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);


Reply via email to