axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Davanum Srinivas (JIRA)" <>
Subject [jira] Commented: (AXIS-1456) Mapping of service interfaces defined using java.sql.Date to xsd:date does not work
Date Tue, 14 Jun 2005 12:33:50 GMT
    [ ] 

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:
>      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:
> 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:
For more information on JIRA, see:

View raw message