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 am...@apache.org on 2007/11/05 07:47:24 UTC

svn commit: r591896 - /webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java

Author: amilas
Date: Sun Nov  4 22:47:23 2007
New Revision: 591896

URL: http://svn.apache.org/viewvc?rev=591896&view=rev
Log:
add functioality to handle any type and datahandlers

Modified:
    webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ConverterUtil.java

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=591896&r1=591895&r2=591896&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 Sun Nov  4 22:47:23 2007
@@ -22,11 +22,17 @@
 import org.apache.axiom.attachments.utils.IOUtils;
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMConstants;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.MTOMConstants;
+import org.apache.axiom.om.impl.llom.OMStAXWrapper;
 import org.apache.axiom.om.util.Base64;
 import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.om.util.ElementHelper;
+import org.apache.axiom.soap.impl.builder.MTOMStAXSOAPModelBuilder;
 import org.apache.axis2.databinding.ADBBean;
 import org.apache.axis2.databinding.ADBException;
+import org.apache.axis2.databinding.utils.writer.MTOMAwareXMLStreamWriter;
 import org.apache.axis2.databinding.i18n.ADBMessages;
 import org.apache.axis2.databinding.types.*;
 import org.apache.commons.logging.Log;
@@ -38,6 +44,7 @@
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
+import javax.xml.stream.XMLStreamConstants;
 import java.io.ByteArrayInputStream;
 import java.io.InputStream;
 import java.lang.reflect.Array;
@@ -1201,6 +1208,8 @@
             serializeAnyType("boolean", value.toString(), xmlStreamWriter);
         } else if (value instanceof URI) {
             serializeAnyType("anyURI", value.toString(), xmlStreamWriter);
+        } else if (value instanceof Byte) {
+            serializeAnyType("byte", value.toString(), xmlStreamWriter);
         } else if (value instanceof Date) {
             serializeAnyType("date", convertToString((Date) value), xmlStreamWriter);
         } else if (value instanceof Calendar) {
@@ -1217,6 +1226,10 @@
             serializeAnyType("short", value.toString(), xmlStreamWriter);
         } else if (value instanceof BigDecimal) {
             serializeAnyType("decimal", value.toString(), xmlStreamWriter);
+        } else if (value instanceof DataHandler) {
+            addTypeAttribute(xmlStreamWriter,"base64Binary");
+            MTOMAwareXMLStreamWriter mtomAwareXMLStreamWriter = (MTOMAwareXMLStreamWriter) xmlStreamWriter;
+            mtomAwareXMLStreamWriter.writeDataHandler((DataHandler)value);
         } else if (value instanceof QName) {
             QName qNameValue = (QName) value;
             String prefix = xmlStreamWriter.getPrefix(qNameValue.getNamespaceURI());
@@ -1265,6 +1278,11 @@
                                          XMLStreamWriter xmlStreamWriter)
             throws XMLStreamException {
 
+        addTypeAttribute(xmlStreamWriter, type);
+        xmlStreamWriter.writeCharacters(value);
+    }
+
+    private static void addTypeAttribute(XMLStreamWriter xmlStreamWriter, String type) throws XMLStreamException {
         String prefix = xmlStreamWriter.getPrefix(Constants.XSI_NAMESPACE);
         if (prefix == null) {
             prefix = BeanUtil.getUniquePrefix();
@@ -1287,7 +1305,6 @@
         }
 
         xmlStreamWriter.writeAttribute(Constants.XSI_NAMESPACE, "type", attributeValue);
-        xmlStreamWriter.writeCharacters(value);
     }
 
     public static Object getAnyTypeObject(XMLStreamReader xmlStreamReader) throws XMLStreamException {
@@ -1310,70 +1327,97 @@
                 NamespaceContext namespaceContext = xmlStreamReader.getNamespaceContext();
                 xmlStreamReader.next();
 
-                String attribValue = xmlStreamReader.getText();
-                if (attribValue != null){
-                    if (attributeType.equals("string")) {
-                        returnObject = attribValue;
-                    } else if (attributeType.equals("int")) {
-                        returnObject = new Integer(attribValue);
-                    } else if (attributeType.equals("QName")) {
-                        String namespacePrefix = null;
-                        String localPart = null;
-                        if (attribValue.indexOf(":") > -1){
-                            namespacePrefix = attribValue.substring(0,attribValue.indexOf(":"));
-                            localPart = attribValue.substring(attribValue.indexOf(":") + 1);
-                            returnObject = new QName(namespaceContext.getNamespaceURI(namespacePrefix),localPart);
-                        }
-                    } else if ("boolean".equals(attributeType)) {
-                        returnObject = new Boolean(attribValue);
-                    } else if ("anyURI".equals(attributeType)) {
-                        try {
-                            returnObject = new URI(attribValue);
-                        } catch (URI.MalformedURIException e) {
-                            throw new XMLStreamException("Invalid URI");
+                if ("base64Binary".equals(attributeType)) {
+                    returnObject = getDataHandlerObject(xmlStreamReader);
+                } else {
+                    String attribValue = xmlStreamReader.getText();
+                    if (attribValue != null) {
+                        if (attributeType.equals("string")) {
+                            returnObject = attribValue;
+                        } else if (attributeType.equals("int")) {
+                            returnObject = new Integer(attribValue);
+                        } else if (attributeType.equals("QName")) {
+                            String namespacePrefix = null;
+                            String localPart = null;
+                            if (attribValue.indexOf(":") > -1) {
+                                namespacePrefix = attribValue.substring(0, attribValue.indexOf(":"));
+                                localPart = attribValue.substring(attribValue.indexOf(":") + 1);
+                                returnObject = new QName(namespaceContext.getNamespaceURI(namespacePrefix), localPart);
+                            }
+                        } else if ("boolean".equals(attributeType)) {
+                            returnObject = new Boolean(attribValue);
+                        } else if ("anyURI".equals(attributeType)) {
+                            try {
+                                returnObject = new URI(attribValue);
+                            } catch (URI.MalformedURIException e) {
+                                throw new XMLStreamException("Invalid URI");
+                            }
+                        } else if ("date".equals(attributeType)) {
+                            returnObject = ConverterUtil.convertToDate(attribValue);
+                        } else if ("dateTime".equals(attributeType)) {
+                            returnObject = ConverterUtil.convertToDateTime(attribValue);
+                        } else if ("time".equals(attributeType)) {
+                            returnObject = ConverterUtil.convertToTime(attribValue);
+                        } else if ("byte".equals(attributeType)) {
+                            returnObject = new Byte(attribValue);
+                        } else if ("short".equals(attributeType)) {
+                            returnObject = new Short(attribValue);
+                        } else if ("float".equals(attributeType)) {
+                            returnObject = new Float(attribValue);
+                        } else if ("long".equals(attributeType)) {
+                            returnObject = new Long(attribValue);
+                        } else if ("double".equals(attributeType)) {
+                            returnObject = new Double(attribValue);
+                        } else if ("decimal".equals(attributeType)) {
+                            returnObject = new BigDecimal(attribValue);
+                        } else if ("unsignedLong".equals(attributeType)) {
+                            returnObject = new UnsignedLong(attribValue);
+                        } else if ("unsignedInt".equals(attributeType)) {
+                            returnObject = new UnsignedInt(attribValue);
+                        } else if ("unsignedShort".equals(attributeType)) {
+                            returnObject = new UnsignedShort(attribValue);
+                        } else if ("unsignedByte".equals(attributeType)) {
+                            returnObject = new UnsignedByte(attribValue);
+                        } else if ("positiveInteger".equals(attributeType)) {
+                            returnObject = new PositiveInteger(attribValue);
+                        } else if ("negativeInteger".equals(attributeType)) {
+                            returnObject = new NegativeInteger(attribValue);
+                        } else if ("nonNegativeInteger".equals(attributeType)) {
+                            returnObject = new NonNegativeInteger(attribValue);
+                        } else if ("nonPositiveInteger".equals(attributeType)) {
+                            returnObject = new NonPositiveInteger(attribValue);
+                        } else {
+                            throw new ADBException("Unknown type ==> " + attributeType);
                         }
-                    } else if ("date".equals(attributeType)) {
-                        returnObject = ConverterUtil.convertToDate(attribValue);
-                    } else if ("dateTime".equals(attributeType)) {
-                        returnObject = ConverterUtil.convertToDateTime(attribValue);
-                    } else if ("time".equals(attributeType)) {
-                        returnObject = ConverterUtil.convertToTime(attribValue);
-                    } else if ("float".equals(attributeType)) {
-                        returnObject = new Float(attribValue);
-                    } else if ("long".equals(attributeType)) {
-                        returnObject = new Long(attribValue);
-                    } else if ("double".equals(attributeType)) {
-                        returnObject = new Double(attribValue);
-                    } else if ("decimal".equals(attributeType)) {
-                        returnObject = new BigDecimal(attribValue);
-                    } else if ("unsignedLong".equals(attributeType)) {
-                        returnObject = new UnsignedLong(attribValue);
-                    } else if ("unsignedInt".equals(attributeType)) {
-                        returnObject = new UnsignedInt(attribValue);
-                    } else if ("unsignedShort".equals(attributeType)) {
-                        returnObject = new UnsignedShort(attribValue);
-                    } else if ("unsignedByte".equals(attributeType)) {
-                        returnObject = new UnsignedByte(attribValue);
-                    } else if ("positiveInteger".equals(attributeType)) {
-                        returnObject = new PositiveInteger(attribValue);
-                    } else if ("negativeInteger".equals(attributeType)) {
-                        returnObject = new NegativeInteger(attribValue);
-                    } else if ("nonNegativeInteger".equals(attributeType)) {
-                        returnObject = new NonNegativeInteger(attribValue);
-                    } else if ("nonPositiveInteger".equals(attributeType)) {
-                        returnObject = new NonPositiveInteger(attribValue);
                     } else {
-                        throw new ADBException("Unknown type ==> " + attributeType);
+                        throw new ADBException("Attribute value is null");
                     }
-                } else {
-                    throw new ADBException("Attribute value is null");
                 }
-
             } else {
                 throw new ADBException("Any type element type has not been given");
             }
         }
         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 {



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org