You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ve...@apache.org on 2009/07/20 13:58:47 UTC

svn commit: r795789 - in /webservices/axis2/trunk/java/modules: adb-codegen/src/org/apache/axis2/schema/template/ adb-codegen/test/org/apache/axis2/schema/base64binary/ adb/src/org/apache/axis2/databinding/utils/

Author: veithen
Date: Mon Jul 20 11:58:46 2009
New Revision: 795789

URL: http://svn.apache.org/viewvc?rev=795789&view=rev
Log:
Simplified and fixed the base64 parsing in ADB generated code. This should solve AXIS2-4363 and AXIS2-4387.

Modified:
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-bean.xsl
    webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-helpermode.xsl
    webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java
    webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-bean.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-bean.xsl?rev=795789&r1=795788&r2=795789&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-bean.xsl (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-bean.xsl Mon Jul 20 11:58:46 2009
@@ -655,20 +655,6 @@
             }
         </xsl:if>
 
-    /**
-     * isReaderMTOMAware
-     * @return true if the reader supports MTOM
-     */
-    public static boolean isReaderMTOMAware(javax.xml.stream.XMLStreamReader reader) {
-        boolean isReaderMTOMAware = false;
-        <!-- workaround for the issues in the wstx reader!-->
-        try{
-          isReaderMTOMAware = java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_DATA_HANDLERS_AWARE));
-        }catch(java.lang.IllegalArgumentException e){
-          isReaderMTOMAware = false;
-        }
-        return isReaderMTOMAware;
-    }
      <!-- ######################################################################################### -->
      <!-- get OMElement methods that allows direct writing -->
         /**
@@ -2726,34 +2712,7 @@
                                                   } else {
                                                 </xsl:if>
 
-                                                    if (isReaderMTOMAware(reader)
-                                                            &amp;&amp;
-                                                            java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_BINARY)))
-                                                    {
-                                                        //MTOM aware reader - get the datahandler directly and put it in the object
-                                                        <xsl:value-of select="$listName"/>.add(
-                                                                (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER));
-                                                    } else {
-                                                        // Step in
-                                                        if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; <xsl:value-of select="$propQName"/>.equals(reader.getName())) {
-                                                            reader.next();
-                                                        }
-                                                        if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; reader.getName().equals(new javax.xml.namespace.QName(org.apache.axiom.om.impl.MTOMConstants.XOP_NAMESPACE_URI, org.apache.axiom.om.impl.MTOMConstants.XOP_INCLUDE)))
-                                                        {
-                                                            java.lang.String id = org.apache.axiom.om.util.ElementHelper.getContentID(reader, "UTF-8");
-                                                            <xsl:value-of select="$listName"/>.add(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id));
-                                                            reader.next();
-                                                            reader.next();
-                                                        } else if(reader.hasText()) {
-                                                            //Do the usual conversion
-                                                            java.lang.String content = reader.getText();
-                                                            <xsl:value-of select="$listName"/>.add(
-                                                                    org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content));
-                                                                    reader.next();
-                                                        }
-
-                                                    }
-
+                                                    <xsl:value-of select="$listName"/>.add(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader));
 
                                                 <xsl:if test="@nillable">}</xsl:if>
                                                 //loop until we find a start element that is not part of this array
@@ -2781,30 +2740,7 @@
                                                               } else {
                                                             </xsl:if>
 
-                                                                <xsl:if test="not($simple)">reader.next();</xsl:if>
-                                                                if (isReaderMTOMAware(reader)
-                                                                        &amp;&amp;
-                                                                        java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_BINARY)))
-                                                                {
-                                                                    //MTOM aware reader - get the datahandler directly and put it in the object
-                                                                    <xsl:value-of select="$listName"/>.add(
-                                                                            (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER));
-                                                                } else {
-                                                                    if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; reader.getName().equals(new javax.xml.namespace.QName(org.apache.axiom.om.impl.MTOMConstants.XOP_NAMESPACE_URI, org.apache.axiom.om.impl.MTOMConstants.XOP_INCLUDE)))
-                                                                    {
-                                                                        java.lang.String id = org.apache.axiom.om.util.ElementHelper.getContentID(reader, "UTF-8");
-                                                                        <xsl:value-of select="$listName"/>.add(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id));
-                                                                        reader.next();
-                                                                        reader.next();
-                                                                    } else if(reader.hasText()) {
-                                                                        //Do the usual conversion
-                                                                        java.lang.String content = reader.getText();
-                                                                        <xsl:value-of select="$listName"/>.add(
-                                                                                org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content));
-                                                                                reader.next();
-                                                                    }
-
-                                                                }
+                                                                <xsl:value-of select="$listName"/>.add(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader));
 
                                                             <xsl:if test="@nillable">}</xsl:if>
                                                         }else{
@@ -3042,35 +2978,9 @@
                                 <!-- end of OMelement handling -->
                                 <!-- start of the simple types handling for binary content-->
                                 <xsl:when test="@binary">
-                                    <xsl:if test="not($simple)">reader.next();</xsl:if>
-                                    if (isReaderMTOMAware(reader)
-                                            &amp;&amp;
-                                            java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_BINARY)))
-                                    {
-                                        //MTOM aware reader - get the datahandler directly and put it in the object
-                                        object.set<xsl:value-of select="$javaName"/>(
-                                                (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER));
-                                    } else {
-                                        if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; reader.getName().equals(new javax.xml.namespace.QName(org.apache.axiom.om.impl.MTOMConstants.XOP_NAMESPACE_URI, org.apache.axiom.om.impl.MTOMConstants.XOP_INCLUDE)))
-                                        {
-                                            java.lang.String id = org.apache.axiom.om.util.ElementHelper.getContentID(reader, "UTF-8");
-                                            object.set<xsl:value-of select="$javaName"/>(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id));
-                                            reader.next();
-                                            <xsl:if test="($isType or $anon) and not($simple)">
-                                                reader.next();
-                                            </xsl:if>
-                                        } else if(reader.hasText()) {
-                                            //Do the usual conversion
-                                            java.lang.String content = reader.getText();
-                                            object.set<xsl:value-of select="$javaName"/>(
-                                                    org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content));
-                                            <xsl:if test="($isType or $anon) and not($simple)">
-                                                reader.next();
-                                            </xsl:if>
-                                        }
-                                    }
+                                    object.set<xsl:value-of select="$javaName"/>(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader));
 
-                                    <xsl:if test="$isType or $anon">  <!-- This is a subelement property to be consumed -->
+                                    <xsl:if test="($isType or $anon) and not($simple)">  <!-- This is a subelement property to be consumed -->
                                         reader.next();
                                     </xsl:if>
                                 </xsl:when>

Modified: webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-helpermode.xsl
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-helpermode.xsl?rev=795789&r1=795788&r2=795789&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-helpermode.xsl (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate-helpermode.xsl Mon Jul 20 11:58:46 2009
@@ -537,20 +537,6 @@
         return <xsl:value-of select="$fullyQualifiedName"/>.class;
     }
     
-    /**
-     * isReaderMTOMAware
-     * @return true if the reader supports MTOM
-     */
-    public static boolean isReaderMTOMAware(javax.xml.stream.XMLStreamReader reader) {
-        boolean isReaderMTOMAware = false;
-        <!-- workaround for the issues in the wstx reader!-->
-        try{
-          isReaderMTOMAware = java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_DATA_HANDLERS_AWARE));
-        }catch(java.lang.IllegalArgumentException e){
-          isReaderMTOMAware = false;
-        }
-        return isReaderMTOMAware;
-    }
      <!-- ######################################################################################### -->
      <!-- get OMElement methods that allows direct writing -->
         /**
@@ -1752,34 +1738,7 @@
                                                   } else {
                                                 </xsl:if>
 
-                                                    if (isReaderMTOMAware(reader)
-                                                            &amp;&amp;
-                                                            java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_BINARY)))
-                                                    {
-                                                        //MTOM aware reader - get the datahandler directly and put it in the object
-                                                        <xsl:value-of select="$listName"/>.add(
-                                                                (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER));
-                                                    } else {
-                                                        // Step in
-                                                        if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; <xsl:value-of select="$propQName"/>.equals(reader.getName())) {
-                                                            reader.next();
-                                                        }
-                                                        if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; reader.getName().equals(new javax.xml.namespace.QName(org.apache.axiom.om.impl.MTOMConstants.XOP_NAMESPACE_URI, org.apache.axiom.om.impl.MTOMConstants.XOP_INCLUDE)))
-                                                        {
-                                                            java.lang.String id = org.apache.axiom.om.util.ElementHelper.getContentID(reader, "UTF-8");
-                                                            <xsl:value-of select="$listName"/>.add(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id));
-                                                            reader.next();
-                                                            reader.next();
-                                                        } else if(reader.hasText()) {
-                                                            //Do the usual conversion
-                                                            java.lang.String content = reader.getText();
-                                                            <xsl:value-of select="$listName"/>.add(
-                                                                    org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content));
-                                                                    reader.next();
-                                                        }
-
-                                                    }
-
+                                                    <xsl:value-of select="$listName"/>.add(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader));
 
                                                 <xsl:if test="@nillable">}</xsl:if>
                                                 //loop until we find a start element that is not part of this array
@@ -1807,30 +1766,7 @@
                                                               } else {
                                                             </xsl:if>
 
-                                                                <xsl:if test="not($simple)">reader.next();</xsl:if>
-                                                                if (isReaderMTOMAware(reader)
-                                                                        &amp;&amp;
-                                                                        java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_BINARY)))
-                                                                {
-                                                                    //MTOM aware reader - get the datahandler directly and put it in the object
-                                                                    <xsl:value-of select="$listName"/>.add(
-                                                                            (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER));
-                                                                } else {
-                                                                    if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; reader.getName().equals(new javax.xml.namespace.QName(org.apache.axiom.om.impl.MTOMConstants.XOP_NAMESPACE_URI, org.apache.axiom.om.impl.MTOMConstants.XOP_INCLUDE)))
-                                                                    {
-                                                                        java.lang.String id = org.apache.axiom.om.util.ElementHelper.getContentID(reader, "UTF-8");
-                                                                        <xsl:value-of select="$listName"/>.add(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id));
-                                                                        reader.next();
-                                                                        reader.next();
-                                                                    } else if(reader.hasText()) {
-                                                                        //Do the usual conversion
-                                                                        java.lang.String content = reader.getText();
-                                                                        <xsl:value-of select="$listName"/>.add(
-                                                                                org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content));
-                                                                                reader.next();
-                                                                    }
-
-                                                                }
+                                                                <xsl:value-of select="$listName"/>.add(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader));
 
                                                             <xsl:if test="@nillable">}</xsl:if>
                                                         }else{
@@ -2031,35 +1967,9 @@
                                 <!-- end of OMelement handling -->
                                 <!-- start of the simple types handling for binary content-->
                                 <xsl:when test="@binary">
-                                    <xsl:if test="not($simple)">reader.next();</xsl:if>
-                                    if (isReaderMTOMAware(reader)
-                                            &amp;&amp;
-                                            java.lang.Boolean.TRUE.equals(reader.getProperty(org.apache.axiom.om.OMConstants.IS_BINARY)))
-                                    {
-                                        //MTOM aware reader - get the datahandler directly and put it in the object
-                                        object.set<xsl:value-of select="$javaName"/>(
-                                                (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER));
-                                    } else {
-                                        if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT &amp;&amp; reader.getName().equals(new javax.xml.namespace.QName(org.apache.axiom.om.impl.MTOMConstants.XOP_NAMESPACE_URI, org.apache.axiom.om.impl.MTOMConstants.XOP_INCLUDE)))
-                                        {
-                                            java.lang.String id = org.apache.axiom.om.util.ElementHelper.getContentID(reader, "UTF-8");
-                                            object.set<xsl:value-of select="$javaName"/>(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id));
-                                            reader.next();
-                                            <xsl:if test="($isType or $anon) and not($simple)">
-                                                reader.next();
-                                            </xsl:if>
-                                        } else if(reader.hasText()) {
-                                            //Do the usual conversion
-                                            java.lang.String content = reader.getText();
-                                            object.set<xsl:value-of select="$javaName"/>(
-                                                    org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content));
-                                            <xsl:if test="($isType or $anon) and not($simple)">
-                                                reader.next();
-                                            </xsl:if>
-                                        }
-                                    }
+                                    object.set<xsl:value-of select="$javaName"/>(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader));
 
-                                    <xsl:if test="$isType or $anon">  <!-- This is a subelement property to be consumed -->
+                                    <xsl:if test="($isType or $anon) and not($simple)">  <!-- This is a subelement property to be consumed -->
                                         reader.next();
                                     </xsl:if>
                                 </xsl:when>

Modified: webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java?rev=795789&r1=795788&r2=795789&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java (original)
+++ webservices/axis2/trunk/java/modules/adb-codegen/test/org/apache/axis2/schema/base64binary/Base64BinaryTest.java Mon Jul 20 11:58:46 2009
@@ -80,6 +80,6 @@
                 new DataHandler("DataHandler 2", "text/plain"),
                 new DataHandler("DataHandler 3", "text/plain")
         });
-        testSerializeDeserialize(bean);
+        testSerializeDeserialize(bean, false);
     }
 }

Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java?rev=795789&r1=795788&r2=795789&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java (original)
+++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java Mon Jul 20 11:58:46 2009
@@ -22,15 +22,11 @@
 import org.apache.axiom.attachments.ByteArrayDataSource;
 import org.apache.axiom.attachments.utils.IOUtils;
 import org.apache.axiom.om.OMAbstractFactory;
-import org.apache.axiom.om.OMConstants;
 import org.apache.axiom.om.OMElement;
-import org.apache.axiom.om.impl.MTOMConstants;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
-import org.apache.axiom.om.impl.llom.OMStAXWrapper;
 import org.apache.axiom.om.util.Base64;
-import org.apache.axiom.om.util.ElementHelper;
 import org.apache.axiom.om.util.StAXUtils;
-import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder;
+import org.apache.axiom.util.stax.XMLStreamReaderUtils;
 import org.apache.axis2.databinding.ADBBean;
 import org.apache.axis2.databinding.ADBException;
 import org.apache.axis2.databinding.i18n.ADBMessages;
@@ -1526,8 +1522,7 @@
 
                 if (Constants.XSD_NAMESPACE.equals(attributeNameSpace)) {
                     if ("base64Binary".equals(attributeType)) {
-                        xmlStreamReader.next();
-                        returnObject = getDataHandlerObject(xmlStreamReader);
+                        returnObject = XMLStreamReaderUtils.getDataHandlerFromElement(xmlStreamReader);
                     } else {
                         String attribValue = xmlStreamReader.getElementText();
                         if (attribValue != null) {
@@ -1618,26 +1613,6 @@
         return returnObject;
     }
 
-    private static Object getDataHandlerObject(XMLStreamReader reader) throws XMLStreamException {
-        Object dataHandler = null;
-        if (Boolean.TRUE.equals(reader.getProperty(OMConstants.IS_DATA_HANDLERS_AWARE))
-                && Boolean.TRUE.equals(reader.getProperty(OMConstants.IS_BINARY))) {
-            dataHandler = reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER);
-        } else {
-            if (reader.getEventType() == XMLStreamConstants.START_ELEMENT &&
-                    reader.getName().equals(new QName(MTOMConstants.XOP_NAMESPACE_URI, MTOMConstants.XOP_INCLUDE))) {
-                String id = ElementHelper.getContentID(reader, "UTF-8");
-                dataHandler = ((MTOMStAXSOAPModelBuilder) ((OMStAXWrapper) reader).getBuilder()).getDataHandler(id);
-                reader.next();
-            } else if (reader.hasText()) {
-                String content = reader.getText();
-                dataHandler = ConverterUtil.convertToBase64Binary(content);
-
-            }
-        }
-        return dataHandler;
-    }
-
     static {
         isCustomClassPresent = (System.getProperty(SYSTEM_PROPERTY_ADB_CONVERTERUTIL) != null);
         if (isCustomClassPresent){