我是駱駝新手,面臨着我需要設置的路由問題。如果有人能夠指導我參加正確的論壇,或者更好地解決我所面臨的問題,那將會很棒。 這是我需要做的 - 公開一個restlet端點來接受數據;使用此數據作爲外部SOAP Web服務的輸入,並將響應以JSON格式發送回調用方... 以下是我所做的...但是,當駱駝嘗試調用Web服務...任何人都可以在這裏指導我嗎?謝謝。Camel Restlet和CXF SOA集成問題
我使用駱駝2.11.1和CXF-CODEGEN插件版本2.7.11
我得到以下異常:org.restlet.data.Parameter不能轉換爲java.lang.String。
public class IntegrationTest extends CamelTestSupport {
String restletURL = <url>;
@org.junit.Test
public void integTest() throws Exception {
//trying to simulate the rest service call...
template.sendBodyAndHeader(restletURL, "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(restletURL).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}");
}
};
}
}
然而,抽樣工作,當我嘗試了各個部分 - 的Restlet和單獨CXF ...
感謝, Ritwick。
下面是完整的異常堆棧(我是不允許進入的原題2個鏈接:2014年7月1日13:33:00228 [stlet-963335244] WARN PhaseInterceptorChain - Interceptor for {http://www.webserviceX.NET/}CurrencyConvertor#{http://www.webserviceX.NET/}ConversionRate拋出異常,立即展開 java.lang.ClassCastException: ClassCastException調用http://www.webservicex.net/CurrencyConvertor.asmx:org.restlet.data.Parameter不能轉換爲java.lang.String \t at sun.reflect.NativeConstructorAccessorImpl.newInstance0(N ative Method) –
如果您自己執行編組和解組工作,則可以使用camel-http組件將請求重定向到真實的後端服務。這次你不需要使用camel-cxf。 –
感謝Willem,我將嘗試使用camel-servlet組件來完成camel-restlet組件的工作。仍在努力...讓我們看看如何。 –