Author: veithen
Date: Sun Jul 11 14:36:42 2010
New Revision: 963081

URL: http://svn.apache.org/viewvc?rev=963081&view=rev
Log:
AXIS2-4768: Make sure that for a POJO, ADB produces an XMLStreamReader that 
returns the same value for the IsDatahandlersAwareParsing property regardless 
of the position in the stream. Axiom 1.2.9 checks the property only once (in 
order to avoid repeated calls to XMLStreamReader#getProperty) and may therefore 
fail to optimize binary data if the value of this property changes during the 
lifecycle of the XMLStreamReader object.

Modified:
    
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java
    
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
    
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/StreamWrapper.java

Modified: 
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java?rev=963081&r1=963080&r2=963081&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/reader/ADBXMLStreamReaderImpl.java
 Sun Jul 11 14:36:42 2010
@@ -170,12 +170,8 @@ public class ADBXMLStreamReaderImpl impl
      * @throws IllegalArgumentException
      */
     public Object getProperty(String key) throws IllegalArgumentException {
-        if (state == START_ELEMENT_STATE || state == END_ELEMENT_STATE) {
-            if (OPTIMIZATION_ENABLED.equals(key)) {
-                return Boolean.TRUE;
-            } else {
-                return null;
-            }
+        if (OPTIMIZATION_ENABLED.equals(key)) {
+            return Boolean.TRUE;
         } else if (state == TEXT_STATE) {
             if (IS_BINARY.equals(key)) {
                 return Boolean.FALSE;

Modified: 
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java?rev=963081&r1=963080&r2=963081&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/adb/test/org/apache/axis2/databinding/utils/BeanUtilTest.java
 Sun Jul 11 14:36:42 2010
@@ -20,12 +20,14 @@
 package org.apache.axis2.databinding.utils;
 
 import org.apache.axiom.om.*;
+import org.apache.axis2.description.java2wsdl.TypeTable;
 import org.apache.axis2.engine.DefaultObjectSupplier;
 import org.apache.axis2.engine.ObjectSupplier;
 
 import junit.framework.TestCase;
 
 import javax.activation.DataHandler;
+import javax.mail.util.ByteArrayDataSource;
 import javax.xml.namespace.QName;
 
 import java.util.List;
@@ -131,4 +133,18 @@ public class BeanUtilTest extends TestCa
     private OMAttribute createTypeAttribute(String value) {
         return omFactory.createOMAttribute("type", xsiNamespace, value);
     }
+    
+    /**
+     * Test that for a {...@link DataHandler} object, {...@link BeanUtil} 
creates sequence of
+     * events that allows Axiom to recognize the optimized binary.
+     */
+    public void testGetOMElementWithDataHandlerArg() {
+        DataHandler dh = new DataHandler(new ByteArrayDataSource(new 
byte[4096],
+                "application/octet-stream"));
+        OMElement element = BeanUtil.getOMElement(new QName("urn:ns1", "myop"),
+                new Object[] { dh }, new QName("urn:ns1", "part"), true, new 
TypeTable());
+        OMText text = (OMText)element.getFirstElement().getFirstOMChild();
+        assertTrue(text.isOptimized());
+        assertSame(dh, text.getDataHandler());
+    }
 }

Modified: 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/StreamWrapper.java
URL: 
http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/StreamWrapper.java?rev=963081&r1=963080&r2=963081&view=diff
==============================================================================
--- 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/StreamWrapper.java
 (original)
+++ 
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/util/StreamWrapper.java
 Sun Jul 11 14:36:42 2010
@@ -308,11 +308,7 @@ public class StreamWrapper implements XM
     }
 
     public Object getProperty(String s) throws IllegalArgumentException {
-        if (state != STATE_INIT) {
-            return realReader.getProperty(s);
-        } else {
-            throw new IllegalArgumentException();
-        }
+        return realReader.getProperty(s);
     }
 
     public String getText() {


Reply via email to