[jbossws-issues] [JBoss JIRA] Commented: (JBWS-800) ClassCastException when trying to marshal a SybaseTimestamp

Thomas Diesler (JIRA) jira-events at jboss.com
Wed Nov 8 23:45:41 EST 2006


    [ http://jira.jboss.com/jira/browse/JBWS-800?page=comments#action_12346582 ] 
            
Thomas Diesler commented on JBWS-800:
-------------------------------------

Lets resolve this issue by extending the testcase to use a subclass of DateTime

> ClassCastException when trying to marshal a SybaseTimestamp
> -----------------------------------------------------------
>
>                 Key: JBWS-800
>                 URL: http://jira.jboss.com/jira/browse/JBWS-800
>             Project: JBoss Web Services
>          Issue Type: Bug
>      Security Level: Public(Everyone can see) 
>          Components: jaxrpc
>    Affects Versions: jbossws-1.0.0.CR4
>         Environment: Windows XP, JBoss 4.0.4.CR2
>            Reporter: Chris Baxter
>         Assigned To: Thomas Diesler
>             Fix For: jbossws-1.0.5
>
>
> I have a EJB3 persistent bean mapped to a Sybase DB table.  This table has datetime column that I have mapped back to a java.util.Date property on the persistent bean.  This same bean class is returned from a webservice call.  On JBoss 4.0.3SP1 (using Axis), I had no issues returning this object from my finder call.  Now, when I switch to JBoss 4.0.4CR2 (using JBossWS), I get the following exception:
> Caused by: java.lang.ClassCastException: com.sybase.jdbc3.tds.SybTimestamp
> 	at org.jboss.xb.binding.SimpleTypeBindings.marshal(SimpleTypeBindings.java:1150)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalCharacters(XercesXsMarshaller.java:1169)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalSimpleType(XercesXsMarshaller.java:451)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElementType(XercesXsMarshaller.java:405)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElement(XercesXsMarshaller.java:380)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElementOccurence(XercesXsMarshaller.java:886)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalParticle(XercesXsMarshaller.java:823)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalModelGroupSequence(XercesXsMarshaller.java:1102)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalModelGroup(XercesXsMarshaller.java:1057)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalParticle(XercesXsMarshaller.java:729)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalComplexType(XercesXsMarshaller.java:685)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElementType(XercesXsMarshaller.java:414)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElement(XercesXsMarshaller.java:380)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElementOccurence(XercesXsMarshaller.java:886)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalParticle(XercesXsMarshaller.java:810)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalModelGroupSequence(XercesXsMarshaller.java:1102)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalModelGroup(XercesXsMarshaller.java:1057)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalParticle(XercesXsMarshaller.java:729)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalComplexType(XercesXsMarshaller.java:685)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElementType(XercesXsMarshaller.java:414)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElement(XercesXsMarshaller.java:380)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshalElementOccurence(XercesXsMarshaller.java:886)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshallInternal(XercesXsMarshaller.java:275)
> 	at org.jboss.xb.binding.XercesXsMarshaller.marshal(XercesXsMarshaller.java:222)
> 	at org.jboss.ws.jaxb.JAXBMarshallerImpl.marshal(JAXBMarshallerImpl.java:172)
> 	at org.jboss.ws.jaxrpc.encoding.JAXBSerializer.serialize(JAXBSerializer.java:100)
> 	at org.jboss.ws.soap.SOAPContentElement.getXMLFragment(SOAPContentElement.java:172)
> 	at org.jboss.ws.soap.SOAPContentElement.expandToDOM(SOAPContentElement.java:844)
> 	at org.jboss.ws.soap.SOAPContentElement.getChildNodes(SOAPContentElement.java:761)
> 	at org.jboss.util.xml.DOMWriter.printInternal(DOMWriter.java:201)
> 	at org.jboss.util.xml.DOMWriter.printInternal(DOMWriter.java:260)
> 	at org.jboss.util.xml.DOMWriter.printInternal(DOMWriter.java:260)
> 	at org.jboss.util.xml.DOMWriter.print(DOMWriter.java:177)
> 	at org.jboss.util.xml.DOMWriter.printNode(DOMWriter.java:126)
> 	at org.jboss.ws.server.ServiceEndpoint.postProcessResponse(ServiceEndpoint.java:306)
> 	... 23 more	
> In looking at the source code, I think I see why there may be a problem:
>       else if(typeCode == XS_DATETIME)
>       {
>          Calendar c;
>          if(value.getClass() == java.util.Date.class)
>          {
>             c = Calendar.getInstance();
>             c.clear();
>             c.setTime((java.util.Date)value);
>          }
>          else
>          {
>             c = (Calendar)value;
>          }
>          result = marshalDateTime(c);
>       }
> The SybaseTimestamp class extends java.sql.Timestamp which in turn extends java.util.Date.  That first 'if' should hit, but it won't because SybaseTimestamp.class != java.util.Date.class.  Instead, I think the if statement should be:
> if(java.util.Date.class.isAssignableFrom(value.getClass()))
> I made this change and recompiled and everything works as expected now.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://jira.jboss.com/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        



More information about the jbossws-issues mailing list