キャメルからウェブサービスに電話したいのですが。しかし、サービスを呼び出すたびにnullを受け取ります。解決策を見つけるのを手伝ってくれませんか。
このサービスはtomcatで実行されており、soapUIでテストできます。これがSoapUIからのリクエストです。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:hel="http://helloworld.localhost">
<soapenv:Header/>
<soapenv:Body>
<hel:HelloWorldRequest>
<hel:input>Pavel</hel:input>
</hel:HelloWorldRequest>
</soapenv:Body>
</soapenv:Envelope>
応答はHelloPavelを返します。CamelInActionガイドに従って、コントラクトファーストWebサービスを作成しました。ファイルを読み取ってWebサービスに送信するルートを実行できます。
ルートのコードは次のとおりです。
public class FileToWsRoute extends RouteBuilder {
public void configure() {
from("file://src/data?noop=false")
.process(new FileProcessor())
.to("cxf:bean:helloWorld");
}
}
FileProcessorクラスは次のようになります。
public class FileProcessor implements Processor {
public void process(Exchange exchange) throws Exception {
System.out.println("We just downloaded: "
+ exchange.getIn().getHeader("CamelFileName"));
String text =
"<?xml version='1.0' ?>"
+"<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:hel=\"http://helloworld.localhost\">"
+"<soapenv:Header/>"
+ "<soapenv:Body>"
+ " <hel:HelloWorldRequest>"
+ " <hel:input>WhatsUP</hel:input>"
+ " </hel:HelloWorldRequest>"
+ "</soapenv:Body>"
+"</soapenv:Envelope>";
exchange.getIn().setBody(text);
}
}
次のバージョンでは、cxf-codegen-pluginによって生成されたオブジェクト(HalloWorld.java、HelloWorldImpl.java、HelloWorldRequest.java、HelloWorldResponse.java、HelloWorldService.java、ObjectFactory.java、package-info.java)を介してリクエストを生成したいと思います。 )。
camel-cxf.xmlには、次のものがあります。
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:cxf="http://camel.apache.org/schema/cxf"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://camel.apache.org/schema/cxf
http://camel.apache.org/schema/cxf/camel-cxf.xsd">
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-http-jetty.xml"/>
<cxf:cxfEndpoint id="helloWorld"
address="http://localhost:8080/ode/processes/HelloWorld"
serviceClass="localhost.helloworld.HelloWorld"
wsdlURL="wsdl/HelloWorld.wsdl"/>
</beans>
Webサービスからの応答を読み取るために、このルートを使用しています。
public class WsToQueueRoute extends RouteBuilder {
public void configure() {
from("cxf:bean:helloWorld")
.to("seda:incomingOrders")
.transform().constant("OK");
}
}
最後のルートはsedaからデータを取得します...
public class QueueToProcessRoute extends RouteBuilder {
public void configure() {
from("seda:incomingOrders")
.process(new PrintResult());
}
}
...そして結果を出力します。
public class PrintResult implements Processor {
public void process(Exchange exchange) throws Exception {
System.out.println("Data received: "
+ exchange.getIn().getBody(String.class));
}
}
実行からの出力は次のとおりです。受信したデータ:null
cxfオブジェクトで解析できるXMLファイルが必要です。問題を見つけるのを手伝ってくれませんか。
ありがとうございました
パベル