You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@camel.apache.org by Ritwick <ri...@gmail.com> on 2014/06/30 23:33:46 UTC
Issue with Camel
Hi,
I am new to Camel and am facing an issue with a route I need to setup. It
will be great if someone can either guide me to the correct forum or better
still rectify the issue I am facing.
Here is what I need to do - expose a restlet endpoint to accept data; use
this data as input to an external SOAP web service and send back the
response in JSON format back to the caller...
Here is what I have done...however, I am getting the following error while
Camel tries to call the Web Service...can anyone guide me here? Thanks.
2014-06-30 14:09:24,987 [tlet-1846031557] WARN PhaseInterceptorChain
- Interceptor for
{http://www.webserviceX.NET/}CurrencyConvertor#{http://www.webserviceX.NET/}ConversionRate
has thrown exception, unwinding now
java.lang.ClassCastException: ClassCastException invoking
http://www.webservicex.net/CurrencyConvertor.asmx:
org.restlet.data.Parameter cannot be cast to java.lang.String
public class IntegrationTest extends CamelTestSupport {
@org.junit.Test
public void integTest() throws Exception {
//trying to simulate the rest service call...
template.sendBodyAndHeader("restlet:http://localhost:8080/convert/{data}?restletMethods=get",
"Body does not matter here", "data",
"{\"FromCurrency\":\"AUD\",\"ToCurrency\":\"USD\"}");
}
@Override
protected RouteBuilder createRouteBuilder() throws Exception {
return new RouteBuilder() {
@Override
public void configure() throws Exception {
System.out.println("In Counfigure");
String cxfEndpoint =
"cxf://http://www.webservicex.net/CurrencyConvertor.asmx?"
+ "wsdlURL=http://www.webservicex.net/CurrencyConvertor.asmx?wsdl&"
+ "serviceName={http://www.webserviceX.NET/}CurrencyConvertor&"
+ "portName={http://www.webserviceX.NET/}CurrencyConvertorSoap&"
+ "dataFormat=MESSAGE";
XmlJsonDataFormat xmlJsonFormat = new XmlJsonDataFormat();
SoapJaxbDataFormat soap = new SoapJaxbDataFormat("net.webservicex",
new ServiceInterfaceStrategy(CurrencyConvertorSoap.class, true));
GsonDataFormat gson = new GsonDataFormat(ConversionRate.class);
gson.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE);
from("restlet:http://localhost:8080/convert/{data}?restletMethods=get").routeId("Restlet")
.process(new Processor() {
@Override
public void process(Exchange
exchange) throws Exception {
String data = (String)
URLDecoder.decode((String) exchange.getIn().getHeader("data"), "UTF-8");
System.out.println(data);
// get the mail body as a
String
exchange.getIn().setBody(data);
Response.getCurrent().setStatus(Status.SUCCESS_OK);
}
})
.unmarshal(gson)
.marshal(soap)
.log("${body}")
.to(cxfEndpoint)
.unmarshal(soap)
.marshal(xmlJsonFormat);
.log("${body}");
}
};
}
}
--
View this message in context: http://camel.465427.n5.nabble.com/Issue-with-Camel-tp5753081.html
Sent from the Camel - Users mailing list archive at Nabble.com.
Re: Issue with Camel
Posted by Ritwick <ri...@gmail.com>.
I was able to get this (Restlet -> CXF SOAP web service call) to work. Just
had to make sure that the following line was
there...exchange.getIn().setHeader("org.restlet.http.headers", "");The
restlet headers was actually causing the route to fail with the
ClassCastException - unable to convert from org.restlet.http.Parameter to
java.lang.String.In order to figure out the issue I had to configure the CXF
endpoint with "loggingFeatureEnabled=true". In the additional log that CXF
then provided me, I found that the only place where the request to the CXF
endpoint looked restlet-ish was in the header...once I removed that, it
worked like a charm...
--
View this message in context: http://camel.465427.n5.nabble.com/Issue-with-Camel-tp5753081p5753473.html
Sent from the Camel - Users mailing list archive at Nabble.com.