Mantis - Resin
Viewing Issue Advanced Details
2584 minor always 04-09-08 09:13 06-09-08 09:32
ferg  
ferg  
high  
closed 3.1.6  
fixed  
none    
none 3.2.0  
0002584: hessian Lucene serialization
(rep by Matt Johnson)

I am trying to use a Lucene index and place my documents to be indexed
into a JMS queue. The Lucene Document class is documented as being
serializable.

When my queue listener tries to work on the submitted lucene Document
object, I get an error:

could not index doc: ObjectMessageImpl[ID:DOmYA38A3joAEZMMeI8wAK]
com.caucho.jms.JMSExceptionWrapper:
org.apache.lucene.document.Document.fields:
'org.apache.lucene.document.Field' could not be instantiated
    at com.caucho.jms.JMSExceptionWrapper.create(JMSExceptionWrapper.java:76)
    at
com.caucho.jms.message.ObjectMessageImpl.getObject(ObjectMessageImpl.java:120)
    at
latta.ejb3.indexer.ProductIndexQueue.onMessage(ProductIndexQueue.java:34)
    at
_ejb.ProductIndexQueue.ProductIndexQueue__EJB.onMessage(ProductIndexQueue__EJB.java:75)
    at
com.caucho.jms.connection.MessageConsumerImpl.handleMessage(MessageConsumerImpl.java:326)
    at com.caucho.jms.connection.JmsSession.run(JmsSession.java:1072)
    at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:721)
    at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:643)
    at java.lang.Thread.run(Thread.java:619)
Caused by: com.caucho.hessian.io.HessianFieldException:
org.apache.lucene.document.Document.fields:
'org.apache.lucene.document.Field' could not be instantiated
    at
com.caucho.hessian.io.JavaDeserializer.logDeserializeError(JavaDeserializer.java:590)
    at
com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:391)
    at
com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:233)
    at
com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:157)
    at
com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:376)
    at
com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2051)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1977)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1969)
    at
com.caucho.jms.message.ObjectMessageImpl.getObject(ObjectMessageImpl.java:114)
    ... 7 more
Caused by: com.caucho.hessian.io.HessianProtocolException:
'org.apache.lucene.document.Field' could not be instantiated
    at
com.caucho.hessian.io.JavaDeserializer.instantiate(JavaDeserializer.java:275)
    at
com.caucho.hessian.io.JavaDeserializer.readObject(JavaDeserializer.java:155)
    at
com.caucho.hessian.io.SerializerFactory.readObject(SerializerFactory.java:376)
    at
com.caucho.hessian.io.Hessian2Input.readObjectInstance(Hessian2Input.java:2051)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1977)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1969)
    at
com.caucho.hessian.io.CollectionDeserializer.readList(CollectionDeserializer.java:78)
    at com.caucho.hessian.io.Hessian2Input.readObject(Hessian2Input.java:1700)
    at
com.caucho.hessian.io.JavaDeserializer$ObjectFieldDeserializer.deserialize(JavaDeserializer.java:387)
    ... 14 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:271)
    ... 22 more
Caused by: java.lang.NullPointerException: name cannot be null
    at org.apache.lucene.document.Field.<init>(Field.java:306)
    at org.apache.lucene.document.Field.<init>(Field.java:290)
    ... 27 more


I've tried this with Lucene 2.2.0 and 2.3.1 and the same error occurs. I
am using the Resin 080331 snapshot. Any pointers or work arounds would
be helpful.


Notes
(0003150)
ferg   
06-09-08 09:32   
hessian/3a49

Added FooSerializerFactory with a Object writeReplace(Foo foo) method which will allow wrapper classes for legacy classes like the Lucent Field.