Hi All,
I was trying to invoke a webservice with CXF client using dynamic client
approach but failing with following exception
Exception in thread "main" java.lang.RuntimeException:
org.apache.cxf.binding.soap.SoapFault: Unmarshalling Error: cvc-elt.4.3:
Type 'xs:string' is not validly derived from the type definition,
'getAlertDataRequest', of element 'ns2:getAlertDataRequest'.
Caused by: org.apache.cxf.binding.soap.SoapFault: Unmarshalling Error:
cvc-elt.4.3: Type 'xs:string' is not validly derived from the type
definition, 'getAlertDataRequest', of element 'ns2:getAlertDataRequest'.
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
at
org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:35)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:99)
at
org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:69)
at
org.apache.cxf.binding.soap.interceptor.CheckFaultInterceptor.handleMessage(CheckFaultInterceptor.java:34)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.onMessage(ClientImpl.java:672)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponseInternal(HTTPConduit.java:2254)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.handleResponse(HTTPConduit.java:2134)
at
org.apache.cxf.transport.http.HTTPConduit$WrappedOutputStream.close(HTTPConduit.java:1988)
at
org.apache.cxf.io.CacheAndWriteOutputStream.postClose(CacheAndWriteOutputStream.java:47)
at
org.apache.cxf.io.CachedOutputStream.close(CachedOutputStream.java:188)
at
org.apache.cxf.transport.AbstractConduit.close(AbstractConduit.java:66)
at org.apache.cxf.transport.http.HTTPConduit.close(HTTPConduit.java:639)
at
org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:62)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:243)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:484)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:310)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:262)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:282)
at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:268)
However the webservice invocation is fine with soapUI.
On investigation I found that, the request (soap) message sent was not
correct:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getAlertDataRequest xmlns:ns2="http://ws.alerts.sbm.savvion.com/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
ebms
</ns2:getAlertDataRequest>
</soap:Body>
</soap:Envelope>
Instead it should be:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getAlertDataRequest xmlns:ns2="http://ws.alerts.sbm.savvion.com/"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="xs:string">
<user>ebms</user>
</ns2:getAlertDataRequest>
</soap:Body>
</soap:Envelope>
I am not able to findout, why CXF client request message does not contain
<user> </user> inside </ns2:getAlertDataRequest>.
Any help appreciated.
Thanks
--
View this message in context:
http://cxf.547215.n5.nabble.com/Problem-with-CXF-tp4341066p4341066.html
Sent from the cxf-user mailing list archive at Nabble.com.