krisha created BEANUTILS-417:
--------------------------------

             Summary: java.io.StreamCorruptedException: defaultWriteObject or 
writeFields not called on the sender's side
                 Key: BEANUTILS-417
                 URL: https://issues.apache.org/jira/browse/BEANUTILS-417
             Project: Commons BeanUtils
          Issue Type: Bug
         Environment: WebSphere Platform 7.0.0.23 [ND 7.0.0.23 cf231218.02] 
Host Operating System is Linux, version 2.6.32.59-0.7-default
Java version = JRE 1.6.0 IBM J9 2.4 Linux amd64-64 
jvmxa6460sr10fp1-20120202_101568 (JIT enabled, AOT enabled)
J9VM - 20120202_101568
JIT  - r9_20111107_21307ifx1
GC   - 20120202_AA_CMPRSS, Java Compiler = j9jit24, Java VM name = IBM J9 VM

            Reporter: krisha


The exception is an expected behavior as the implementation of the    
DynaProperty.readObject and DynaProperty.writeObject do not adhere to 
the serialization specifications.                                     

When I looked at the implementation of the write/readObject in           
org.apache.commons.beanutils.DynaProperty at the link -                  
(                                                                        
http://javasourcecode.org/html/open-source/commons-beanutils/commons-bea 
nutils-1.8.1/org/apache/commons/beanutils/DynaProperty.java.html)        
I see that they do not adhere to the serialization specification         
(                                                                        
http://docs.oracle.com/javase/7/docs/platform/serialization/spec/output. 
html#861)                                                                
which states the following -                                             
Either ObjectOutputStream's defaultWriteObject or writeFields method     
must be called once (and only once) before writing any optional data     
that will be needed by the corresponding readObject method to restore    
the state of the object; even if no optional data is written,            
defaultWriteObject or writeFields must still be invoked once. If         
defaultWriteObject or writeFields is not invoked once prior to the       
writing of optional data (if any), then the behavior of instance         
deserialization is undefined in cases where the ObjectInputStream cannot 
resolve the class which defined the writeObject method in question.      
------------------------------------------------------------------------ 
The defaultWriteObject or writeFields have to be invoked prior to        
writing any data.                                                        
                                                                         
A fix was added to the Java 6 SR10 onwards (IX90079), to catch incorrect 
implementations of the read/writeObjects. Hence, the exception is seen   
with WAS 7.                                                              

3182 [8/24/12 12:13:45:967 EDT] 00000034 ORBRas        3 
com.ibm.rmi.io.IIOPInputStream invokeObjectReader:1812 ORB.thread.pool : 0 The 
following exception was logged
3183                                  
java.lang.reflect.InvocationTargetException
3184    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
3185    at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:48)
3186    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
3187    at java.lang.reflect.Method.invoke(Method.java:600)
3188    at 
com.ibm.rmi.io.IIOPInputStream.invokeObjectReader(IIOPInputStream.java:1809)
3189    at 
com.ibm.rmi.io.IIOPInputStream.inputObjectUsingClassDesc(IIOPInputStream.java:1529)
3190    at 
com.ibm.rmi.io.IIOPInputStream.inputObjectClassDesc(IIOPInputStream.java:1504)
3191    at 
com.ibm.rmi.io.IIOPInputStream.readSerializable(IIOPInputStream.java:1178)
3192    at 
com.ibm.rmi.io.IIOPInputStream.simpleReadObjectInternal(IIOPInputStream.java:460)
3193    at 
com.ibm.rmi.io.IIOPInputStream.simpleReadObjectLoop(IIOPInputStream.java:545)
3194    at 
com.ibm.rmi.io.IIOPInputStream.simpleReadObject(IIOPInputStream.java:497)
3195    at com.ibm.rmi.io.ValueHandlerImpl.readValue(ValueHandlerImpl.java:210)
3196    at com.ibm.rmi.iiop.CDRReader.read_value(CDRReader.java:1578)
3197    at 
com.ibm.rmi.iiop.ObjectCopierFactory$AbstractArrayCopier.doWork(ObjectCopierFactory.java:424)
3198    at 
com.ibm.rmi.iiop.ObjectCopierFactory$AbstractCopier.invoke(ObjectCopierFactory.java:229)
3199    at $Proxy24.doWork(Unknown Source)
3200    at com.ibm.ejs.oa.pool.PooledThread.run(ThreadPool.java:118)
3201    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1613)
3202 Caused by: java.io.StreamCorruptedException: defaultWriteObject or 
writeFields not called on the sender's side
3203    at 
com.ibm.rmi.io.IIOPInputStream.defaultReadObject(IIOPInputStream.java:681)
3204    at 
org.apache.commons.beanutils.DynaProperty.readObject(DynaProperty.java:281)
3205    ... 18 more


--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to