WildFly 12 fails to serialize Throwable thrown by EJB
ymartin Apr 9, 2018 10:46 AMHello
Our team is upgrading an application from WildFly 9 to 12 and we not face strange trouble when application remote EJB raises a "business" exception. Marshaling fails with:
WFLYEJB0054: Failed to marshal EJB parameters, Caused by: java.lang.IllegalStateException: Constructor is unexpectedly inaccessible at org.jboss.marshalling.reflect.SerializableClass.invokeConstructorNoException(SerializableClass.java:377) at org.jboss.marshalling.reflect.SerializableClass.callNonInitConstructor(SerializableClass.java:332) at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:248) at org.jboss.marshalling.cloner.SerializingCloner.clone(SerializingCloner.java:130) at org.jboss.marshalling.cloner.SerializingCloner.cloneFields(SerializingCloner.java:391) at org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:311) at org.jboss.marshalling.cloner.SerializingCloner.initSerializableClone(SerializingCloner.java:279)
When investigating in debug mode with break points, here is original exception (disappointingly swallowed) at jboss-marshalling/SerializableClass.java at master · jboss-remoting/jboss-marshalling · GitHub
java.lang.IllegalAccessException: Class org.jboss.marshalling.reflect.SerializableClass can not access a member of class java.util.AbstractList with modifiers "protected"
One step deeper, our understanding is that SerializingCloner.clone(Object, boolean) line: 248 cannot instantiate java.util.AbstractList (nonSerializable) when clonedClass is java.util.ArrayList.
This happens when processing Throwable.suppressedExceptions:
/** * The list of suppressed exceptions, as returned by {@link * #getSuppressed()}. The list is initialized to a zero-element * unmodifiable sentinel list. When a serialized Throwable is * read in, if the {@code suppressedExceptions} field points to a * zero-element list, the field is reset to the sentinel value. * * @serial * @since 1.7 */ private List suppressedExceptions = SUPPRESSED_SENTINEL;
Is that a WildFly bug or does our application now face more strict behaviour from WildFly compared to previous versions?
Thank you in advance for your help
Best regards
Yves Martin