You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by rli <ru...@gmail.com> on 2013/08/02 20:03:07 UTC

cxf soap call exception when using dataFormat=POJO

Hi,

I'm new to Camel and currently trying to setup a soap call to a web service
as part of my learning process.

*Environment:* JDK 1.6, Camel 2.11.0

*Web service:* http://www.webservicex.net/stockquote.asmx
*WSDL:* http://www.webservicex.net/stockquote.asmx?WSDL

*Client stub classes* generated based on WSDL with wsdl2java:

- GetQuote.java
- GetQuoteResponse.java
- ObjectFactory.java
- package-info.java
- StockQuote.java
- StockQuoteSoap.java

*In spring-camel.xml* I have:

    <cxf:cxfEndpoint id="serviceEndpoint" 
    		address="http://www.webservicex.net/stockquote.asmx"
            wsdlURL="http://www.webservicex.net/stockquote.asmx?WSDL"
            serviceClass="net.webservicex.StockQuoteSoap">
	    <cxf:properties>
        	<entry key="dataFormat" value="POJO"/> 
            </cxf:properties>            
    </cxf:cxfEndpoint>

*The route* is simple:

	
from("jms:queue:SoapRequestQueue?jmsMessageType=Text&concurrentConsumers=5")
		.process(new QueueProcessor())
		.to("cxf:bean:serviceEndpoint?dataFormat=POJO")
		.process(new WsProcessor())
		.to("mock:end");

    * Input is through an ActiveMQ queue.

*QueueProcessor* class takes the ActiveMQ input and wraps it into GetQuote
object:

public class QueueProcessor implements Processor {

	public void process(Exchange exchange) throws Exception {
		String symbol = exchange.getIn().getBody(String.class);
        GetQuote req = new GetQuote();
        req.setSymbol(symbol);
        exchange.getOut().setBody(req, GetQuote.class);
    }
}  

*WsProcessor* is supposed to retrieve the response:

public class WsProcessor implements Processor {
	public void process(Exchange exchange) throws Exception {
		MessageContentsList msgList = (MessageContentsList)
exchange.getIn().getBody();
		GetQuoteResponse resp = (GetQuoteResponse) msgList.get(0);
		String result = resp.getGetQuoteResult();
		exchange.getIn().setBody(result, String.class);
    }
}

When I run it, I got the following *exception*:

(camelContext) thread #34 - JmsConsumer[SoapRequestQueue]] WARN 
o.a.cxf.phase.PhaseInterceptorChain - Interceptor for
{http://www.webserviceX.NET/}StockQuoteSoapService#{http://www.webserviceX.NET/}GetQuote
has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: net.webservicex.GetQuote cannot be cast to
java.lang.String
	at
org.apache.cxf.jaxws.interceptors.WrapperClassOutInterceptor.handleMessage(WrapperClassOutInterceptor.java:117)
~[cxf-rt-frontend-jaxws-2.7.6.jar:2.7.6]
	at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:271)
~[cxf-api-2.7.6.jar:2.7.6]
	at org.apache.cxf.endpoint.ClientImpl.doInvoke(ClientImpl.java:541)
[cxf-api-2.7.6.jar:2.7.6]
	at org.apache.cxf.endpoint.ClientImpl.invoke(ClientImpl.java:467)
[cxf-api-2.7.6.jar:2.7.6]
	at org.apache.camel.component.cxf.CxfProducer.process(CxfProducer.java:112)
[camel-cxf-2.11.0.jar:2.11.0]

I'm stuck here, can someone help me with this?

Thanks!



--
View this message in context: http://camel.465427.n5.nabble.com/cxf-soap-call-exception-when-using-dataFormat-POJO-tp5736712.html
Sent from the Camel - Users mailing list archive at Nabble.com.

Re: cxf soap call PhaseInterceptorChain exception (cannot cast to String) when using dataFormat=POJO

Posted by dbremmen <db...@gmail.com>.
Hi!

I'm stuck in the same area. Were you able to find out a solution?
Thanks!
 David



--
View this message in context: http://camel.465427.n5.nabble.com/cxf-soap-call-PhaseInterceptorChain-exception-cannot-cast-to-String-when-using-dataFormat-POJO-tp5736712p5760898.html
Sent from the Camel - Users mailing list archive at Nabble.com.