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