You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by "phil.n" <ne...@psydev.com> on 2012/03/13 17:00:19 UTC

wsdl first generation; class cast exception with generated code

Hi,

Apologies if this has been asked before.
I am using cxf to create a client for a webservice that is described via
wsdl. The generation seems to work ok, except for a couple of operations
where the incoming request is empty:

<xs:element name="opRequest" />

<wsdl11:message name="opRequest">
        <wsdl11:part name="Parameters" element="tns:opRequest"/>
</wsdl11:message>

The following java is generated from this:
@WebMethod(action = "http://test.com/read")
public void read(
  @WebParam(partName = "Parameters", name = "opRequest", targetNamespace =
"http://test.com")
   java.lang.Object parameters,
   ....

Subsequently in my client code, if I try to create an object and pass it
through, I get a ClassCastException:

Object read_req = new Object();
port.read(read_req ... );

If I pass a null, then the error goes away, but I run into an issue with the
service provider as the SOAP that comes out has an empty SOAP:body, when
they're epecting an <opRequest>.

Any ideas?
Phil

Stack Trace below:

org.apache.cxf.interceptor.Fault: Marshalling Error: java.lang.Object cannot
be
cast to org.w3c.dom.Element
        at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja
va:263)
        at
org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:169)
        at
org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writePar
ts(AbstractOutDatabindingInterceptor.java:119)
        at
org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutIn
terceptor.java:68)
        at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept
orChain.java:263)
        at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366)
        at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319)
        at
org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
        at
org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:13
4)
        at $Proxy44.readAllPersonIds(Unknown Source)
        at
com.psydev.lis.person.clients.PersonClient.readAllIds(PersonClient.ja
va:319)
        at
com.psydev.lis.person.clients.PersonClientCLI.processOperation(Person
ClientCLI.java:240)
        at
com.psydev.lis.person.clients.PersonClientCLI.run(PersonClientCLI.jav
a:350)
        at
com.psydev.lis.person.clients.PersonClientCLI.main(PersonClientCLI.ja
va:368)
Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast to
org.
w3c.dom.Element
        at
com.sun.xml.bind.v2.runtime.AnyTypeBeanInfo.serializeURIs(AnyTypeBean
Info.java:149)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerialize
r.java:677)
        at
com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serial
izeBody(SingleElementNodeProperty.java:152)
        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Eleme
ntBeanInfoImpl.java:157)
        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Eleme
ntBeanInfoImpl.java:189)
        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(Element
BeanInfoImpl.java:316)
        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Element
BeanInfoImpl.java:323)
        at
com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Element
BeanInfoImpl.java:72)
        at
com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.j
ava:494)
        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:
315)
        at
com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.jav
a:172)
        at
org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder
.java:550)
        at
org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja
va:236)
        ... 15 more


--
View this message in context: http://cxf.547215.n5.nabble.com/wsdl-first-generation-class-cast-exception-with-generated-code-tp5561429p5561429.html
Sent from the cxf-user mailing list archive at Nabble.com.

Re: wsdl first generation; class cast exception with generated code

Posted by Daniel Kulp <dk...@apache.org>.

The Object that is passed in must be something that JAXB knows about.   That 
would include one of the classes that was generated from the wsdl2java call 
or a DOM.

Dan


On Tuesday, March 13, 2012 09:00:19 AM phil.n wrote:
> Hi,
> 
> Apologies if this has been asked before.
> I am using cxf to create a client for a webservice that is described via
> wsdl. The generation seems to work ok, except for a couple of operations
> where the incoming request is empty:
> 
> <xs:element name="opRequest" />
> 
> <wsdl11:message name="opRequest">
>         <wsdl11:part name="Parameters" element="tns:opRequest"/>
> </wsdl11:message>
> 
> The following java is generated from this:
> @WebMethod(action = "http://test.com/read")
> public void read(
>   @WebParam(partName = "Parameters", name = "opRequest", targetNamespace =
> "http://test.com")
>    java.lang.Object parameters,
>    ....
> 
> Subsequently in my client code, if I try to create an object and pass it
> through, I get a ClassCastException:
> 
> Object read_req = new Object();
> port.read(read_req ... );
> 
> If I pass a null, then the error goes away, but I run into an issue with
> the service provider as the SOAP that comes out has an empty SOAP:body,
> when they're epecting an <opRequest>.
> 
> Any ideas?
> Phil
> 
> Stack Trace below:
> 
> org.apache.cxf.interceptor.Fault: Marshalling Error: java.lang.Object
> cannot be
> cast to org.w3c.dom.Element
>         at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja
> va:263)
>         at
> org.apache.cxf.jaxb.io.DataWriterImpl.write(DataWriterImpl.java:169)
>         at
> org.apache.cxf.interceptor.AbstractOutDatabindingInterceptor.writePar
> ts(AbstractOutDatabindingInterceptor.java:119)
>         at
> org.apache.cxf.interceptor.BareOutInterceptor.handleMessage(BareOutIn
> terceptor.java:68)
>         at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseIntercept
> orChain.java:263)
>         at
> org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:533) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:463) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:366) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:319) at
> org.apache.cxf.frontend.ClientProxy.invokeSync(ClientProxy.java:88)
>         at
> org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:13
> 4)
>         at $Proxy44.readAllPersonIds(Unknown Source)
>         at
> com.psydev.lis.person.clients.PersonClient.readAllIds(PersonClient.ja
> va:319)
>         at
> com.psydev.lis.person.clients.PersonClientCLI.processOperation(Person
> ClientCLI.java:240)
>         at
> com.psydev.lis.person.clients.PersonClientCLI.run(PersonClientCLI.jav
> a:350)
>         at
> com.psydev.lis.person.clients.PersonClientCLI.main(PersonClientCLI.ja
> va:368)
> Caused by: java.lang.ClassCastException: java.lang.Object cannot be cast
> to org.
> w3c.dom.Element
>         at
> com.sun.xml.bind.v2.runtime.AnyTypeBeanInfo.serializeURIs(AnyTypeBean
> Info.java:149)
>         at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerialize
> r.java:677)
>         at
> com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.serial
> izeBody(SingleElementNodeProperty.java:152)
>         at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Eleme
> ntBeanInfoImpl.java:157)
>         at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl$1.serializeBody(Eleme
> ntBeanInfoImpl.java:189)
>         at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeBody(Element
> BeanInfoImpl.java:316)
>         at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Element
> BeanInfoImpl.java:323)
>         at
> com.sun.xml.bind.v2.runtime.ElementBeanInfoImpl.serializeRoot(Element
> BeanInfoImpl.java:72)
>         at
> com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.j
> ava:494)
>         at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:
> 315)
>         at
> com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.jav
> a:172)
>         at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.writeObject(JAXBEncoderDecoder
> .java:550)
>         at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.marshall(JAXBEncoderDecoder.ja
> va:236)
>         ... 15 more
> 
> 
> --
> View this message in context:
> http://cxf.547215.n5.nabble.com/wsdl-first-generation-class-cast-exceptio
> n-with-generated-code-tp5561429p5561429.html Sent from the cxf-user
> mailing list archive at Nabble.com.
-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com