[ http://issues.apache.org/jira/browse/AXIS-1456?page=comments#action_12313579 ]
Davanum Srinivas commented on AXIS-1456: ---------------------------------------- don't even dream about touching this part of code :) you have been warned!! :) :) my suggestion, come up with a stand-alone test case that we can drop into test harness and we can tackle it post 1.2.1 -- dims > Mapping of service interfaces defined using java.sql.Date to xsd:date does > not work > ----------------------------------------------------------------------------------- > > Key: AXIS-1456 > URL: http://issues.apache.org/jira/browse/AXIS-1456 > Project: Apache Axis > Type: Bug > Components: Serialization/Deserialization > Versions: 1.1 > Environment: Multiple environments (i.e. UNIX and Windows based) > Reporter: Alan Murphy > Assignee: Venkat Reddy > Attachments: DateDeserializer.java.patch > > Whilst JAX-RPC does not define a standard mapping from a Java class to > xsd:date, Apache Axis has a non standard extension which maps service > interfaces defined using java.sql.Date to xsd:date. Unfortunately this does > not work out-of-the-box. When a parameter of type xsd:date is sent from a > client stub to an AXIS server, it is erroneously deserialized as a > java.util.Date. This is despite the fact that both the WSDD, and XML request, > specify that the parameter is of type XSD:Date, rather than XSD:DateTime. > The resultant effect of this incorrect deserialization, is that AXIS will > erroneously try to find a method to invoke with a java.util.Date in it's > signature, rather than a java.sql.Date (which the method signature actually > specifies), and hence will throw a 'no such method error'. > The problem is resolved by implementing a custom deserializer which, when > registered against the type java.sql.Date, merely converts the incorrectly > deserialized java.util.Date to a java.sql.Date, allowing AXIS to invoke the > correct method. > The code for the overriden makeValue function of the custom deserializer is > as follows: > public Object makeValue(String source) { > > Object obj = super.makeValue(source); > > if (javaType == java.sql.Date.class) { > if (obj instanceof java.sql.Date) { > return obj; > } else if (obj instanceof java.util.Date) { > return new > java.sql.Date(((java.util.Date)obj).getTime()); > } > } > > if (javaType == java.util.Date.class) { > if (obj instanceof java.util.Date) { > return obj; > } > } > > throw new RuntimeException( > "cannot convert " + obj.getClass().getName() + " to " + > javaType.getName() > ); > } -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
