Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Commons loggers serialized in BytesMessage causing issues during deserialisation #51

Closed
evanherc opened this issue Jun 19, 2013 · 1 comment

Comments

@evanherc
Copy link

The BytesMessage and StreamMessage both contain a non-transient _log field. These are serialized to the SQS message (you can verify this by base 64 decoding it). Apart from it being very odd to send a logger across the wire and a waste of resources, it also seems to cause issues when receiving a message.

Hessian throws a fit when it wants to re-instantiate the object with the UnsafeDeserializer. The JavaDeserializer does better but can't seem to create the object due to a crash in the java.util (which I believe might be actually one of the recent security fixes in the latest java releases - running 1.6.0_45)

See for example
Jun 19, 2013 3:58:54 PM org.skyscreamer.nevado.jms.connector.AbstractSQSConnector receiveMessage
INFO: Received message 4da1c0ee-e763-49b3-ae54-3334e4917997
Jun 19, 2013 3:58:54 PM org.skyscreamer.nevado.jms.connector.AbstractSQSConnector deserializeMessage
SEVERE: Unable to deserialized message: org.skyscreamer.nevado.jms.message.NevadoBytesMessage._log: 'org.apache.commons.logging.impl.Jdk14Logger' could not be instantiated
com.caucho.hessian.io.HessianFieldException: org.skyscreamer.nevado.jms.message.NevadoBytesMessage._log: 'org.apache.commons.logging.impl.Jdk14Logger' could not be instantiated
at com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:748)
at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:477)
at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:270)
at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:181)
at com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2188)
at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2109)
at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:2093)
at org.skyscreamer.nevado.jms.util.SerializeUtil.deserialize(SerializeUtil.java:54)
at org.skyscreamer.nevado.jms.util.SerializeUtil.deserializeFromString(SerializeUtil.java:46)
at org.skyscreamer.nevado.jms.connector.AbstractSQSConnector.deserializeMessage(AbstractSQSConnector.java:281)
at org.skyscreamer.nevado.jms.connector.AbstractSQSConnector.convertSqsMessage(AbstractSQSConnector.java:224)
at org.skyscreamer.nevado.jms.connector.AbstractSQSConnector.receiveMessage(AbstractSQSConnector.java:99)
at org.skyscreamer.nevado.jms.NevadoSession.getUnfilteredMessage(NevadoSession.java:462)
at org.skyscreamer.nevado.jms.NevadoSession.receiveMessage(NevadoSession.java:425)
at org.skyscreamer.nevado.jms.NevadoMessageConsumer.receive(NevadoMessageConsumer.java:83)
at org.skyscreamer.nevado.jms.NevadoMessageConsumer.receive(NevadoMessageConsumer.java:74)
at org.skyscreamer.nevado.jms.NevadoMessageConsumer.receive(NevadoMessageConsumer.java:1)
Caused by: com.caucho.hessian.io.HessianProtocolException: 'org.apache.commons.logging.impl.Jdk14Logger' could not be instantiated
at com.caucho.hessian.io.JavaDeserializer.instantiate(JavaDeserializer.java:342)
at com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:197)
at com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2185)
at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1695)
at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1679)
at com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:473)
... 17 more
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.caucho.hessian.io.JavaDeserializer.instantiate(JavaDeserializer.java:338)
... 22 more
Caused by: java.lang.NullPointerException
at java.util.Hashtable.get(Hashtable.java:334)
at java.util.logging.LogManager$LoggerContext.findLogger(LogManager.java:466)
at java.util.logging.LogManager.getLogger(LogManager.java:888)
at java.util.logging.LogManager.demandLogger(LogManager.java:376)
at java.util.logging.Logger.demandLogger(Logger.java:290)
at java.util.logging.Logger.getLogger(Logger.java:321)
at org.apache.commons.logging.impl.Jdk14Logger.getLogger(Jdk14Logger.java:152)
at org.apache.commons.logging.impl.Jdk14Logger.(Jdk14Logger.java:53)
... 27 more

@carterpage
Copy link
Member

Thanks for the catch. I've fixed it in master and will schedule a release in the next week.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants