mirror of
https://github.com/corda/corda.git
synced 2024-12-22 06:17:55 +00:00
CORDA-1032 - unnamed ctor param serialization issue (#2535)
This commit is contained in:
parent
b87ca85046
commit
3606cef0a1
@ -213,8 +213,13 @@ internal fun <T : Any> propertiesForSerializationFromConstructor(
|
||||
|
||||
return mutableListOf<PropertyAccessor>().apply {
|
||||
kotlinConstructor.parameters.withIndex().forEach { param ->
|
||||
val name = param.value.name ?: throw NotSerializableException(
|
||||
"Constructor parameter of $clazz has no name.")
|
||||
// If a parameter doesn't have a name *at all* then chances are it's a synthesised
|
||||
// one. A good example of this is non static nested classes in Java where instances
|
||||
// of the nested class require access to the outer class without breaking
|
||||
// encapsulation. Thus a parameter is inserted into the constructor that passes a
|
||||
// reference to the enclosing class. In this case we can't do anything with
|
||||
// it so just ignore it as it'll be supplied at runtime anyway on invocation
|
||||
val name = param.value.name ?: return@forEach
|
||||
|
||||
val propertyReader = if (name in classProperties) {
|
||||
if (classProperties[name]!!.getter != null) {
|
||||
|
@ -1,5 +1,8 @@
|
||||
package net.corda.nodeapi.internal.serialization.amqp;
|
||||
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import net.corda.core.contracts.ContractState;
|
||||
import net.corda.core.identity.AbstractParty;
|
||||
import net.corda.nodeapi.internal.serialization.AllWhitelist;
|
||||
import net.corda.core.serialization.SerializedBytes;
|
||||
import org.apache.qpid.proton.codec.DecoderImpl;
|
||||
@ -9,6 +12,7 @@ import org.junit.Test;
|
||||
import javax.annotation.Nonnull;
|
||||
import java.io.NotSerializableException;
|
||||
import java.nio.ByteBuffer;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
import static org.junit.Assert.assertTrue;
|
||||
@ -234,4 +238,23 @@ public class JavaSerializationOutputTests {
|
||||
BoxedFooNotNull obj = new BoxedFooNotNull("Hello World!", 123);
|
||||
serdes(obj);
|
||||
}
|
||||
|
||||
protected class DummyState implements ContractState {
|
||||
@Override
|
||||
public List<AbstractParty> getParticipants() {
|
||||
return ImmutableList.of();
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void dummyStateSerialize() throws NotSerializableException {
|
||||
SerializerFactory factory1 = new SerializerFactory(
|
||||
AllWhitelist.INSTANCE,
|
||||
ClassLoader.getSystemClassLoader(),
|
||||
new EvolutionSerializerGetter());
|
||||
|
||||
SerializationOutput serializer = new SerializationOutput(factory1);
|
||||
|
||||
serializer.serialize(new DummyState());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user