次の CXF Web サービスをヒューズ ブループリントで公開しています。ブループリントはファブリック プロファイルに展開されます。
<blueprint
xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf"
xmlns:cxf="http://cxf.apache.org/blueprint/core"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0 http://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd
http://camel.apache.org/schema/blueprint/cxf http://camel.apache.org/schema/blueprint/cxf/camel-cxf.xsd
http://cxf.apache.org/blueprint/core http://cxf.apache.org/schemas/blueprint/core.xsd
http://camel.apache.org/schema/blueprint http://camel.apache.org/schema/blueprint/camel-blueprint.xsd">
<camelcxf:cxfEndpoint id="input-cxf" address="/myfuse-demo/"
serviceClass="com.sample.SourceExampleWS" />
<camelContext id="fuse-demo-route-example-cxf" xmlns="http://camel.apache.org/schema/blueprint">
<route id="demo-source-cxf">
<from uri="cxf:bean:input-cxf"/>
<transform>
<simple>
${in.body[0]}
</simple>
</transform>
<log message="Received: ${in.body}"/>
<!-- removed for brevity -->
</route>
</camelContext>
</blueprint>
SourceExampleWS は、次の単純なインターフェイスです。
package com.sample;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface SourceExampleWS {
@WebMethod int call( @WebParam( name = "struct")Struct s);
}
Struct クラスは単なる Java Bean です。
package com.sample;
@XmlRootElement
public class Struct implements java.io.Serializable {
public Struct() {
}
int x;
int y;
public int getX() {
return x;
}
public int getY() {
return y;
}
public void setX(int x) { this.x = x; }
public void setY(int y) { this.y = y; }
}
問題は、バンドルを Fabric にデプロイするときに、WebService の call メソッドを呼び出すことができないことです。
WSDL ( http://10.1.86.122:8182/cxf/myfuse-demo?wsdl ) から、SOAPUI は次の SOAP メッセージを生成します。
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://sample.com/">
<soapenv:Header/>
<soapenv:Body>
<sam:call>
<sam:struct>
<x>201</x>
<y>144</y>
</sam:struct>
</sam:call>
</soapenv:Body>
</soapenv:Envelope>
しかし、次のエラーが返されます。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unmarshalling Error: unexpected element (uri:"http://sample.com/", local:"struct"). Expected elements are <{}struct></faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
名前空間「sam」をパケットから削除しましたが、別のエラーが発生します。
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<soap:Fault>
<faultcode>soap:Client</faultcode>
<faultstring>Unexpected wrapper element call found. Expected {http://sample.com/}call.</faultstring>
</soap:Fault>
</soap:Body>
</soap:Envelope>
問題を解決する方法はありますか? ありがとうございました!