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/23 09:37:32 UTC
svn commit: r1174567 - in /axis/axis2/java/core/trunk/modules:
adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java
Author: sagara
Date: Fri Sep 23 07:37:31 2011
New Revision: 1174567
URL: http://svn.apache.org/viewvc?rev=1174567&view=rev
Log:
Fixed AXIS2-5151.
Supported to use Date objects with xs:type attributes in Object Arrays , Object Collections and Object Maps.
Modified:
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/utils/BeanUtil.java
axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java
Modified: axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java?rev=1174567&r1=1174566&r2=1174567&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java (original)
+++ axis/axis2/java/core/trunk/modules/adb/src/org/apache/axis2/databinding/typemapping/SimpleTypeMapper.java Fri Sep 23 07:37:31 2011
@@ -31,6 +31,7 @@ import org.apache.axis2.description.Axis
import org.w3c.dom.Document;
import javax.activation.DataHandler;
+import javax.xml.datatype.XMLGregorianCalendar;
import javax.xml.namespace.QName;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -234,7 +235,7 @@ public class SimpleTypeMapper {
return false;
}
String objClassName = obj.getClass().getName();
- return obj instanceof Calendar || obj instanceof Date || isSimpleType(objClassName);
+ return obj instanceof Calendar || obj instanceof Date || obj instanceof XMLGregorianCalendar || isSimpleType(objClassName);
}
public static boolean isSimpleType(Class obj) {
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=1174567&r1=1174566&r2=1174567&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 Fri Sep 23 07:37:31 2011
@@ -66,7 +66,6 @@ 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;
@@ -1311,10 +1310,6 @@ public class BeanUtil {
element.declareNamespace(xsdNS);
QName xsdType = typeTable.getSchemaTypeName(resObject.getClass()
.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);
}
@@ -1731,10 +1726,6 @@ public class BeanUtil {
if (SimpleTypeMapper.isSimpleType(value)) {
omValue.addChild(fac.createOMText(SimpleTypeMapper
.getStringValue(value)));
- } else if (value instanceof XMLGregorianCalendar) {
- omValue.addChild(fac
- .createOMText(((XMLGregorianCalendar) value)
- .toXMLFormat()));
} else {
QName name;
if(elementFormDefault) {
Modified: axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java
URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java?rev=1174567&r1=1174566&r2=1174567&view=diff
==============================================================================
--- axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java (original)
+++ axis/axis2/java/core/trunk/modules/kernel/src/org/apache/axis2/description/java2wsdl/TypeTable.java Fri Sep 23 07:37:31 2011
@@ -160,6 +160,8 @@ public class TypeTable {
//byteArrat
simpleTypetoxsd.put("base64Binary",
new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "base64Binary", "xs"));
+ simpleTypetoxsd.put(XMLGregorianCalendar.class.getName(),
+ new QName(Java2WSDLConstants.URI_2001_SCHEMA_XSD, "date", "xs"));
}
private static void populateJavaTypeMap(){
@@ -311,11 +313,45 @@ public class TypeTable {
*/
public QName getSchemaTypeName(String name) {
QName qName = getSimpleSchemaTypeName(name);
+ if (qName == null) {
+ qName = getSchemaTypeNameByClass(name);
+ }
if( qName == null){
qName = getComplexSchemaType(name);
}
return qName;
}
+
+ /**
+ * Gets the schema type name by class name. Sometimes it's required perform class
+ * name mapping to find correct Schema type.
+ *
+ * @param name
+ * the name
+ * @return the schema type name by class
+ */
+ private QName getSchemaTypeNameByClass(String name) {
+ Object dataClass;
+ try {
+ dataClass = Class.forName(name).newInstance();
+ /*
+ * XMLGregorianCalendar can be found as following classes.
+ * 1.)com.sun.org.apache.xerces.internal.jaxp.datatype.XMLGregorianCalendarImpl
+ * 2.)org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl
+ */
+ if (dataClass instanceof XMLGregorianCalendar) {
+ return (QName) simpleTypetoxsd.get(XMLGregorianCalendar.class
+ .getName());
+ }
+ } catch (InstantiationException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ } catch (ClassNotFoundException e) {
+ e.printStackTrace();
+ }
+ return null;
+ }
}