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 {
|
return mutableListOf<PropertyAccessor>().apply {
|
||||||
kotlinConstructor.parameters.withIndex().forEach { param ->
|
kotlinConstructor.parameters.withIndex().forEach { param ->
|
||||||
val name = param.value.name ?: throw NotSerializableException(
|
// If a parameter doesn't have a name *at all* then chances are it's a synthesised
|
||||||
"Constructor parameter of $clazz has no name.")
|
// 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) {
|
val propertyReader = if (name in classProperties) {
|
||||||
if (classProperties[name]!!.getter != null) {
|
if (classProperties[name]!!.getter != null) {
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package net.corda.nodeapi.internal.serialization.amqp;
|
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.nodeapi.internal.serialization.AllWhitelist;
|
||||||
import net.corda.core.serialization.SerializedBytes;
|
import net.corda.core.serialization.SerializedBytes;
|
||||||
import org.apache.qpid.proton.codec.DecoderImpl;
|
import org.apache.qpid.proton.codec.DecoderImpl;
|
||||||
@ -9,6 +12,7 @@ import org.junit.Test;
|
|||||||
import javax.annotation.Nonnull;
|
import javax.annotation.Nonnull;
|
||||||
import java.io.NotSerializableException;
|
import java.io.NotSerializableException;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
@ -234,4 +238,23 @@ public class JavaSerializationOutputTests {
|
|||||||
BoxedFooNotNull obj = new BoxedFooNotNull("Hello World!", 123);
|
BoxedFooNotNull obj = new BoxedFooNotNull("Hello World!", 123);
|
||||||
serdes(obj);
|
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