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() {