Re: Can't deserialize xsd:date attributes using Axis WSDL2Java classes
From: Ankur Bulsara (hotmail_at_N0_SPAM_gmail.com)
Date: 09/30/04
- Next message: 6tc1_at_qlink.queensu.ca: "Re: TCP monitor tool like TCPmon"
- Previous message: Brian J. Sayatovic: "Clever serialization broken by CORBA RMI"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Date: Thu, 30 Sep 2004 12:54:20 -0700
When the client gets back a SOAP message, you could transform the SOAP via
XSLT into something more edible for the code generated by wsdl2Java.
So, you would have something like:
Incoming SOAP -> XSLT -> Transformed SOAP -> wsdl2java -> Happy client
Here's some example code that performs XSLT transformations.
http://www.koders.com/java/fid78E5DAFB4D7083A6D56ABA9FC0FC82666BE4DB13.aspx?s=transform+xslt
You would just need to define an XSL document that transforms the server bad
date into an acceptable date.
Hope this helps,
Ankur
"john" <j_m_chang_spam@yahoo.com> wrote in message
news:17be84cd.0409300806.388a6bd5@posting.google.com...
> Thank you for your advice. Unfortunately, I can't change the type of
> the
> attribute - I don't have control over the WSDL or the web service
> provider.
> I only have control over the client.
>
> I certainly think you are right: the server is sending someting back
> that
> the deserializer is not expecting. The server is sending back:
> change_date="1998-01-01"
> But as I say, I can't change the WSDL or what the server is sending.
> All
> I can do is try to figure out some way of getting the WSDL2Java client
> generator to create code that can deal with this. You kindly
> suggested that
> I play around with different date string formats - but isn't that a
> server-side
> thing? How can I play around with different date-string formats
> client-side
> with generated code? If there's a way you could show me, I'd really
> appreciate knowing it.
>
> Thanks again,
> John
>
> "Ankur Bulsara" <hotmail@N0_SPAM_gmail.com> wrote in message
news:<NMOdnU2HupHBo8bcRVn-uw@adelphia.com>...
> > Based on the error (Invalid date/time), it could be that you're sending
bad
> > date strings. I.e. the format of the xml you're sending is not what the
> > deserializer is expecting. What's interesting is that the AXIS
> > CalendarDeserializer was not in the stack trace.
> >
> > You can see the CalendarDeserializer code and what it expects as input
here:
> >
http://www.koders.com/35195/fidB834B20A6E1F27C22E6C95521F7419FB2511576A.aspx
> >
> > You may want to play around with different date string formats, such as
a
> > full GMT format. At worst, you could implement your own
<xsd:complexType>
> > date object.
> >
> > -Ankur
> >
> > "john" <j_m_chang_spam@yahoo.com> wrote in message
> > news:17be84cd.0409291437.4fe7c50f@posting.google.com...
> > > I am generating client classes from a WSDL with the Axis WSDL2Java
> > > tool.
> > > Many of the attributes of the complexType objects described in the
> > > wsdl
> > > are xsd:date attributes. I can call some of the methods successfully,
> > > but
> > > when I call a method that returns an object that has an attribute
> > > which maps
> > > to an xsd:date attribute from the wsdl, the client fails with a
> > > deserialization
> > > error. Here is a snippet from the wsdl:
> > >
> > > <xsd:element name="base_currency_select_response">
> > > <xsd:complexType>
> > > <xsd:sequence>
> > > <xsd:element name="currency" minOccurs="0" maxOccurs="1">
> > > <xsd:complexType>
> > > <xsd:attribute name="currency" type="xsd:string"
> > > use="required"/>
> > > <xsd:attribute name="user_code" type="xsd:string"
> > > use="required"/>
> > > <xsd:attribute name="description" type="xsd:string"/>
> > > <xsd:attribute name="exchange_rate" type="s0:ZZMoney"
> > > use="required"/>
> > > <xsd:attribute name="n_decimal_places" type="xsd:int"
> > > use="required"/>
> > > <xsd:attribute name="change_date" type="xsd:date"
> > > use="required"/>
> > > <xsd:attribute name="currency_symbol" type="xsd:string"/>
> > > <xsd:attribute name="html_symbol" type="xsd:string"/>
> > > </xsd:complexType>
> > > </xsd:element>
> > > </xsd:sequence>
> > > </xsd:complexType>
> > > </xsd:element>
> > >
> > > I look at the xml being sent back to the client from the server, and
> > > it looks
> > > like:
> > >
> > > <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
> > > soap:encodingStyle="" >
> > > <soap:Body xmlns="http://Sandlot/XmlWebServices/" >
> > > <base_currency_select_response table_specification="currency" >
> > > <currency currency="USD" user_code="ZZS" description="US Dollar"
> > > exchange_rate="1.000000" n_decimal_places="2" change_date="1998-01-01"
> > > currency_symbol="$" />
> > > </base_currency_select_response>
> > > </soap:Body>
> > > </soap:Envelope>
> > >
> > > Note the part: change_date="1998-01-01"
> > >
> > > In the Axis-WSDL2Java-generated data file representing this object,
> > > this change_date is represented as a java.util.Date:
> > > private java.util.Date change_date; // attribute
> > >
> > > This is what happens in the console when I call the web service
> > > method:
> > > There was 1 error:
> > > 1)
> >
test8SandlotSoapBaseCurrencySelect(Sandlot.XmlWebServices.SandlotWSTestCase)
> > A
> > > xisFault
> > > faultCode:
> > {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
> > > faultSubcode:
> > > faultString: java.lang.NumberFormatException: Invalid date/time
> > > faultActor:
> > > faultNode:
> > > faultDetail:
> > >
> >
{http://xml.apache.org/axis/}stackTrace:java.lang.NumberFormatException:
> > > Invalid date/time
> > > at
> > org.apache.axis.encoding.ser.BeanDeserializer.onStartElement(BeanDese
> > > rializer.java:417)
> > > at
> > org.apache.axis.encoding.DeserializerImpl.startElement(DeserializerIm
> > > pl.java:435)
> > > at
> > org.apache.axis.encoding.ser.BeanDeserializer.startElement(BeanDeseri
> > > alizer.java:165)
> > > at
> > org.apache.axis.encoding.DeserializationContextImpl.startElement(Dese
> > > rializationContextImpl.java:1053)
> > > at
> > org.apache.axis.message.SAX2EventRecorder.replay(SAX2EventRecorder.ja
> > > va:198)
> > >
> > > I am using java 1.4.2_03. I have tried generating and calling the
> > > service with
> > > Axis 1.1 and 1.2 beta - same problem both times.
> > >
> > > Anybody know what I am doing wrong? Or is this just and Axis bug? Or
> > > is this a bug in the web service server (I doubt that - the xml looks
> > > good - but maybe..)? Any ideas or suggestions would be greatly
> > > appreciated.
> > >
> > > Thanks.
> > > -John
> > >
> > > Any ideas for fixing this would be greatly appreciated.
- Next message: 6tc1_at_qlink.queensu.ca: "Re: TCP monitor tool like TCPmon"
- Previous message: Brian J. Sayatovic: "Clever serialization broken by CORBA RMI"
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Relevant Pages
|