[ 
http://issues.apache.org/jira/browse/AXIS-1456?page=comments#action_12314500 ] 

Venkat Reddy commented on AXIS-1456:
------------------------------------

dims,

My point was that the default mapping of xsd:date to java.util.Date might be 
incorrect. I feel that it should be mapped to java.sql.Date.

-- venkat


> 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, sqldate-testcase.zip
>
> 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

Reply via email to