[JBoss JIRA] Created: (JBWS-1509) Namespace incorrect for complex types
by Peter Yuill (JIRA)
Namespace incorrect for complex types
-------------------------------------
Key: JBWS-1509
URL: http://jira.jboss.com/jira/browse/JBWS-1509
Project: JBoss Web Services
Issue Type: Bug
Security Level: Public (Everyone can see)
Components: jaxws
Affects Versions: jbossws-2.0.0.CR2, jbossws-1.0.4, jbossws-1.0.3.SP1
Environment: WindowsXP, Sun java 1.5.0_10, jboss4.0.5/jboss5.0.0.Beta1
Reporter: Peter Yuill
Using a JSR181 pojo service with a targetNamespace set in the @WebService annotation creates WSDL with incorrect targetNamespace for some referenced complex types. The correct namespace is determined for types referenced directly, but the default namespace is allocated to any indirectly referenced type. For example the following service code:
@WebService(targetNamespace="http://test.com")
@SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL)
public class TestWS implements ServiceLifecycle {
@WebMethod
public Type1 getType1() {return new Type1();}
@WebMethod
public Type2[] getType2() {return new Type2[0];}
@WebMethod
public Type3 getType3() {return new Type3();}
generates the correct namespace (http://test.com) for Type1, Type3 and Type2.Array, but generates the default (http://test/jaws) for Type2 and Type4 (referenced by Type3).
--
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
17 years, 10 months
[JBoss JIRA] Commented: (JBWS-800) ClassCastException when trying to marshal a subclass of Date
by Thomas Diesler (JIRA)
[ http://jira.jboss.com/jira/browse/JBWS-800?page=comments#action_12352337 ]
Thomas Diesler commented on JBWS-800:
-------------------------------------
Actually jboss50 is not that relevant because it is not a production target container for jbossws-1.2.0
> ClassCastException when trying to marshal a subclass of Date
> ------------------------------------------------------------
>
> 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: Alexey Loubyansky
> Fix For: jbossws-1.2.0
>
>
> 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
17 years, 10 months