This is an automated email from the ASF dual-hosted git repository. billblough pushed a commit to branch 1_5 in repository https://gitbox.apache.org/repos/asf/axis-axis2-java-core.git
commit e929313a2986b02a9ff867456c38c1a954bf98c9 Author: Andreas Veithen <veit...@apache.org> AuthorDate: Sat Oct 15 20:53:41 2011 +0000 Backported r795789 and part of r1042244 to the 1.5 branch to reduce the coupling to Axiom internals. This should solve AXIS2-4363 and AXIS2-4387. --- .../axis2/schema/template/ADBBeanTemplate.xsl | 194 +-------------------- .../types/soapencoding/Base64Binary.java | 42 +---- .../axis2/databinding/types/xsd/Base64Binary.java | 26 +-- .../axis2/databinding/utils/ConverterUtil.java | 29 +-- 4 files changed, 12 insertions(+), 279 deletions(-) diff --git a/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl b/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl index 03fd807..2daa034 100644 --- a/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl +++ b/modules/adb-codegen/src/org/apache/axis2/schema/template/ADBBeanTemplate.xsl @@ -692,20 +692,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 --> /** @@ -3052,33 +3038,7 @@ } else { </xsl:if> - if (isReaderMTOMAware(reader) - && - 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 && <xsl:value-of select="$propQName"/>.equals(reader.getName())) { - reader.next(); - } - if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT && 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> @@ -3107,30 +3067,7 @@ } else { </xsl:if> - <xsl:if test="not($simple)">reader.next();</xsl:if> - if (isReaderMTOMAware(reader) - && - 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 && 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{ @@ -3368,35 +3305,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) - && - 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 && 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> @@ -4129,20 +4040,6 @@ public <xsl:if test="not(@unwrapped) or (@skip-write)">static</xsl:if> class <xs return org.apache.axis2.databinding.utils.BeanUtil.getUniquePrefix(); } - /** - * 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 --> /** @@ -5343,33 +5240,7 @@ public <xsl:if test="not(@unwrapped) or (@skip-write)">static</xsl:if> class <xs } else { </xsl:if> - if (isReaderMTOMAware(reader) - && - 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 && <xsl:value-of select="$propQName"/>.equals(reader.getName())) { - reader.next(); - } - if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT && 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> @@ -5398,30 +5269,7 @@ public <xsl:if test="not(@unwrapped) or (@skip-write)">static</xsl:if> class <xs } else { </xsl:if> - <xsl:if test="not($simple)">reader.next();</xsl:if> - if (isReaderMTOMAware(reader) - && - 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 && 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{ @@ -5622,35 +5470,9 @@ public <xsl:if test="not(@unwrapped) or (@skip-write)">static</xsl:if> class <xs <!-- 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) - && - 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 && 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> diff --git a/modules/adb/src/org/apache/axis2/databinding/types/soapencoding/Base64Binary.java b/modules/adb/src/org/apache/axis2/databinding/types/soapencoding/Base64Binary.java index 8872ef2..1a97229 100644 --- a/modules/adb/src/org/apache/axis2/databinding/types/soapencoding/Base64Binary.java +++ b/modules/adb/src/org/apache/axis2/databinding/types/soapencoding/Base64Binary.java @@ -87,22 +87,6 @@ } - /** - * isReaderMTOMAware - * @return true if the reader supports MTOM - */ - public static boolean isReaderMTOMAware(javax.xml.stream.XMLStreamReader reader) { - boolean isReaderMTOMAware = false; - - 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; - } - - /** * * @param parentQName @@ -455,31 +439,7 @@ if (reader.isStartElement() || reader.hasText()){ - if (isReaderMTOMAware(reader) - && - 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.setBase64Binary( - (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER)); - } else { - if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT && 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.setBase64Binary(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id)); - reader.next(); - - } else if(reader.hasText()) { - //Do the usual conversion - java.lang.String content = reader.getText(); - object.setBase64Binary( - org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content)); - - } - } - - - reader.next(); + object.setBase64Binary(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader)); } // End of if for expected property start element diff --git a/modules/adb/src/org/apache/axis2/databinding/types/xsd/Base64Binary.java b/modules/adb/src/org/apache/axis2/databinding/types/xsd/Base64Binary.java index 2ba0cd7..15fb552 100644 --- a/modules/adb/src/org/apache/axis2/databinding/types/xsd/Base64Binary.java +++ b/modules/adb/src/org/apache/axis2/databinding/types/xsd/Base64Binary.java @@ -455,31 +455,7 @@ if (reader.isStartElement() || reader.hasText()){ - if (isReaderMTOMAware(reader) - && - 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.setBase64Binary( - (javax.activation.DataHandler) reader.getProperty(org.apache.axiom.om.OMConstants.DATA_HANDLER)); - } else { - if (reader.getEventType() == javax.xml.stream.XMLStreamConstants.START_ELEMENT && 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.setBase64Binary(((org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder) ((org.apache.axiom.om.impl.llom.OMStAXWrapper) reader).getBuilder()).getDataHandler(id)); - reader.next(); - - } else if(reader.hasText()) { - //Do the usual conversion - java.lang.String content = reader.getText(); - object.setBase64Binary( - org.apache.axis2.databinding.utils.ConverterUtil.convertToBase64Binary(content)); - - } - } - - - reader.next(); + object.setBase64Binary(org.apache.axiom.util.stax.XMLStreamReaderUtils.getDataHandlerFromElement(reader)); } // End of if for expected property start element diff --git a/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java b/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java index 8547210..ad98668 100644 --- a/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java +++ b/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java @@ -22,15 +22,11 @@ package org.apache.axis2.databinding.utils; 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; @@ -1525,8 +1521,7 @@ public class ConverterUtil { 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) { @@ -1617,26 +1612,6 @@ public class ConverterUtil { 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){