You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@axis.apache.org by sa...@apache.org on 2011/09/20 14:39:30 UTC

svn commit: r1173120 - in /axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2: databinding/utils/BeanUtil.java rpc/receivers/RPCUtil.java

Author: sagara
Date: Tue Sep 20 12:39:29 2011
New Revision: 1173120

URL: http://svn.apache.org/viewvc?rev=1173120&view=rev
Log:
AXIS2-5151 - Introduced serialization/deserialization logic for XMLGregorianCalendar. 

Modified:
    axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
    axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java

Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java?rev=1173120&r1=1173119&r2=1173120&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java (original)
+++ axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java Tue Sep 20 12:39:29 2011
@@ -48,6 +48,9 @@ import java.util.concurrent.ConcurrentMa
 import java.util.concurrent.LinkedBlockingQueue;
 
 import javax.activation.DataHandler;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 
@@ -63,6 +66,7 @@ import org.apache.axis2.databinding.type
 import org.apache.axis2.databinding.utils.reader.ADBXMLStreamReaderImpl;
 import org.apache.axis2.deployment.util.BeanExcludeInfo;
 import org.apache.axis2.description.AxisService;
+import org.apache.axis2.description.java2wsdl.Java2WSDLConstants;
 import org.apache.axis2.description.java2wsdl.TypeTable;
 import org.apache.axis2.engine.ObjectSupplier;
 import org.apache.axis2.util.Loader;
@@ -530,6 +534,11 @@ public class BeanUtil {
                 }
             }else if(SimpleTypeMapper.isDomDocument(beanClass)){                  	
                 return convertOMtoDOM(beanElement);
+                
+            } else if (XMLGregorianCalendar.class.getName().equals(
+                    beanClass.getName())) {
+                return getXMLGregorianCalendar(beanElement);
+
             } else {
                 if (SimpleTypeMapper.isSimpleType(beanClass)) {
                     return getSimpleTypeObjectChecked(beanClass, beanElement);
@@ -641,6 +650,8 @@ public class BeanUtil {
             throw new AxisFault("InvocationTargetException : " + e);
         } catch (IntrospectionException e) {
             throw new AxisFault("IntrospectionException : " + e);
+        } catch (DatatypeConfigurationException e) {
+            throw new AxisFault("DatatypeConfigurationException : " + e);            
         }
 
 
@@ -1299,7 +1310,11 @@ public class BeanUtil {
 		element.declareNamespace(xsiNS);
 		element.declareNamespace(xsdNS);
 		QName xsdType = typeTable.getSchemaTypeName(resObject.getClass()
-				.getName());		
+				.getName());	
+        if (xsdType == null && resObject instanceof XMLGregorianCalendar) {
+            xsdType = new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date",
+                    "xs");
+        }
 		String attrValue = xsdType.getPrefix() + ":" + xsdType.getLocalPart();
 		element.addAttribute(Constants.XSI_TYPE_ATTRIBUTE, attrValue, xsiNS);
 	}
@@ -1713,7 +1728,11 @@ public class BeanUtil {
 			if (SimpleTypeMapper.isSimpleType(value)) {
 				omValue.addChild(fac.createOMText(SimpleTypeMapper
 						.getStringValue(value)));
-			} else {
+            } else if (value instanceof XMLGregorianCalendar) {
+                omValue.addChild(fac
+                        .createOMText(((XMLGregorianCalendar) value)
+                                .toXMLFormat()));
+            } else {
 			    QName name;
 			    if(elementFormDefault) {
 			        name = new QName(ns.getNamespaceURI(), elementName,
@@ -1990,5 +2009,12 @@ public class BeanUtil {
 	    }
 	}
 	
+    private static XMLGregorianCalendar getXMLGregorianCalendar(
+            OMElement beanElement) throws DatatypeConfigurationException {
+        String greCal = beanElement.getText();
+        XMLGregorianCalendar xmlCal = DatatypeFactory.newInstance()
+                .newXMLGregorianCalendar(greCal);
+        return xmlCal;
+    }	
 
 }

Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java?rev=1173120&r1=1173119&r2=1173120&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java (original)
+++ axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/rpc/receivers/RPCUtil.java Tue Sep 20 12:39:29 2011
@@ -41,6 +41,7 @@ import org.apache.axis2.description.java
 import org.apache.axis2.engine.ObjectSupplier;
 import org.apache.axis2.util.StreamWrapper;
 
+import javax.xml.datatype.XMLGregorianCalendar;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 import java.lang.reflect.Array;
@@ -99,6 +100,20 @@ public class RPCUtil {
                 child.addChild(fac.createOMText(child, SimpleTypeMapper.getStringValue(resObject)));
                 addInstanceTypeInfo(fac, child, method, resObject, typeTable);               
                 bodyContent.addChild(child);
+                
+            } else if (resObject instanceof XMLGregorianCalendar) {
+                bodyContent = fac.createOMElement(
+                        method.getName() + "Response", ns);
+                OMElement child;
+                if (qualified) {
+                    child = fac.createOMElement(Constants.RETURN_WRAPPER, ns);
+                } else {
+                    child = fac.createOMElement(Constants.RETURN_WRAPPER, null);
+                }
+                child.addChild(fac.createOMText(child, ((XMLGregorianCalendar)resObject).toXMLFormat()));
+                addInstanceTypeInfo(fac, child, method, resObject, typeTable);               
+                bodyContent.addChild(child);
+                
             } else {
                 bodyContent = fac.createOMElement(
                         method.getName() + "Response", ns);