What does the schema look like for the createAndStartRequestByValueException
element? From that error message, it looks like
createAndStartRequestByValueException is not allowed to have a
"createException" child element. The only expected element is a "requestKey"
element.
Dan
On Tue February 2 2010 5:04:16 am KnutIvar wrote:
> Hi!
>
> I'm trying to call a service, but gets unmarshalling error when I get a
> response which (in my eyes) seems valid.
>
> From the wsdl;
> <wsdl:operation name="createAndStartRequestByValue">
> <wsdl:input name="createAndStartRequestByValueRequest"
> message="omWS-v1-0:createAndStartRequestByValueRequest"/>
> <wsdl:output name="createAndStartRequestByValueResponse"
> message="omWS-v1-0:createAndStartRequestByValueResponse"/>
> <wsdl:fault name="createAndStartRequestByValueException"
> message="omWS-v1-0:createAndStartRequestByValueException"/>
> </wsdl:operation>
>
> The return message from the service (and now my mock...) looks kind of like
> this;
> <soapenv:Envelope
> xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> <soapenv:Body>
> <om-v1-0:createAndStartRequestByValueException
> xmlns:om-v1-0="http://os.org/xml/Management/v1-0"
> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:co-v1-5="http://os.org/xml/Common/v1-5"
> xmlns:jrc-v2-0="http://jrc.com/ossj/xml/Common/v2-0">
> <om-v1-0:createException xsi:type="jrc-v2-0:JrCreateException">
> <co-v1-5:message></co-v1-5:message>
> <jrc-v2-0:jrExceptionDetails>
> <jrc-v2-0:errorCode>60003</jrc-v2-0:errorCode>
> <jrc-v2-0:retryable>false</jrc-v2-0:retryable>
> <jrc-v2-0:errorMessage>Order state
> invalid.</jrc-v2-0:errorMessage>
>
> <jrc-v2-0:component>com.jr.ordermanager</jrc-v2-0:component>
> <jrc-v2-0:severity>Medium</jrc-v2-0:severity>
> <jrc-v2-0:reason>No subscriber found for
> productExternalID [98802-1]</jrc-v2-0:reason>
>
> <jrc-v2-0:requestPrimaryKey>936</jrc-v2-0:requestPrimaryKey>
> </jrc-v2-0:jrExceptionDetails>
> </om-v1-0:createException>
> </om-v1-0:createAndStartRequestByValueException>
> </soapenv:Body>
> </soapenv:Envelope>
>
> However; CXF doesn't like it and gives me the following stacktrace;
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: unexpected element
> (uri:"http://ossj.org/xml/Management/v1-0", local:"createException").
> Expected elements are <{http://ossj.org/xml/Management/v1-0}requestKey>
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:7
> 64) at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:6
> 23) at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:128)
> at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteral
> InInterceptor.java:190) at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
> n.java:236) at
> org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:671) at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
> eInternal(HTTPConduit.java:2177) at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleRespons
> e(HTTPConduit.java:2057) at
> org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPCon
> duit.java:1982) at
> org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66) at
> org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:637) at
> org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInte
> rceptor.handleMessage(MessageSenderInterceptor.java:62) at
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChai
> n.java:236) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:483) at
> org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:309)
> DefaultValidationEventHandler: [ERROR]: unexpected element
> (uri:"http://ossj.org/xml/Management/v1-0", local:"createException").
> Expected elements are <{http://ossj.org/xml/Management/v1-0}requestKey>
> at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:261)
>
> It expects a parameter which is located in the wsdl:output instead of
> mapping it to the wsdl:fault.
> Do I have to write a custom faultinterceptor in order to handle this, or
> could I add a standard interceptor to my client?
>
> Client;
> org.apache.cxf.jaxws.JaxWsProxyFactoryBean clientFactory = new
> org.apache.cxf.jaxws.JaxWsProxyFactoryBean();
> clientFactory.setAddress("http://localhost:8088/soap/services/OrderManageme
> nt-mock"); clientFactory.setServiceClass(JVTManagementSessionWSPort.class);
> JVTManagementSessionWSPort client =
> (JVTManagementSessionWSPort)clientFactory.create();
>
> -----
> http://www.knutivars.net www.knutivars.net
> "http://www.knutivars.net/cxf/index.html Document first Apache CXF and
> XMLBeans with Spring.
>
--
Daniel Kulp
dkulp@apache.org
http://www.dankulp.com/blog
|