Camel 公开 CXF Web 服务
Camel exposing CXF Web service
我正在尝试使用 Camel 公开 JAX-WS Web 服务(带注释的 Java class)。当使用单个参数时,Web 服务会正确回复。另一方面,当将对象或多个参数用作参数时,它不起作用。
这是我在 JBoss Fuse:
上部署的蓝图
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf" xmlns:cxf="http://cxf.apache.org/blueprint/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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="demo-target-cxf" address="http://localhost:9000/SourceExample/hello" serviceClass="com.sample.SourceExampleWSImpl" endpointName="SourceExamplePort" serviceName="SourceExampleService" />
<camelContext xmlns="http://camel.apache.org/schema/blueprint" id="fuse-demo-route-exmple-cxf">
<route id="demo-target-cxf">
<from uri="cxf:bean:demo-target-cxf" />
<transform>
<simple>${in.body}</simple>
</transform>
<log message="Message input: ${in.body}" />
<removeHeaders pattern="CamelHttp*" />
</route>
</camelContext>
</blueprint>
这是 Web 服务实现 class:
@WebService
public class SourceExampleWSImpl {
@WebMethod
public int getTotal(int x, int y) {
return x+y;
}
}
bundle ic 正确部署在 JBoss Fuse 上。调用 Web 服务时,仅评估第一个参数。因此,例如,使用参数 1 和 4 调用:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://sample.com/">
<soapenv:Header/>
<soapenv:Body>
<sam:getTotal>
<arg0>1</arg0>
<arg1>4</arg1>
</sam:getTotal>
</soapenv:Body>
</soapenv:Envelope>
returns:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getTotalResponse xmlns:ns2="http://sample.com/">
<return>1</return>
</ns2:getTotalResponse>
</soap:Body>
</soap:Envelope>
知道如何解决吗?
谢谢
你是说预期的输出应该是
1 + 4 = 5
因为应该调用下面的代码?
public int getTotal(int x, int y) {
return x+y;
}
如果没有发生这种情况,当您将 camel-cxf 用作 bean 时,bean 仅定义契约,实现中的代码 未 在使用中。
如果您只想要一个标准的 SOAP-WS 并编写 java 构建和处理 SOAP 的代码 requests/response 那么只需使用普通的 CXF。
我正在尝试使用 Camel 公开 JAX-WS Web 服务(带注释的 Java class)。当使用单个参数时,Web 服务会正确回复。另一方面,当将对象或多个参数用作参数时,它不起作用。
这是我在 JBoss Fuse:
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" xmlns:camelcxf="http://camel.apache.org/schema/blueprint/cxf" xmlns:cxf="http://cxf.apache.org/blueprint/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 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="demo-target-cxf" address="http://localhost:9000/SourceExample/hello" serviceClass="com.sample.SourceExampleWSImpl" endpointName="SourceExamplePort" serviceName="SourceExampleService" />
<camelContext xmlns="http://camel.apache.org/schema/blueprint" id="fuse-demo-route-exmple-cxf">
<route id="demo-target-cxf">
<from uri="cxf:bean:demo-target-cxf" />
<transform>
<simple>${in.body}</simple>
</transform>
<log message="Message input: ${in.body}" />
<removeHeaders pattern="CamelHttp*" />
</route>
</camelContext>
</blueprint>
这是 Web 服务实现 class:
@WebService
public class SourceExampleWSImpl {
@WebMethod
public int getTotal(int x, int y) {
return x+y;
}
}
bundle ic 正确部署在 JBoss Fuse 上。调用 Web 服务时,仅评估第一个参数。因此,例如,使用参数 1 和 4 调用:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:sam="http://sample.com/">
<soapenv:Header/>
<soapenv:Body>
<sam:getTotal>
<arg0>1</arg0>
<arg1>4</arg1>
</sam:getTotal>
</soapenv:Body>
</soapenv:Envelope>
returns:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:getTotalResponse xmlns:ns2="http://sample.com/">
<return>1</return>
</ns2:getTotalResponse>
</soap:Body>
</soap:Envelope>
知道如何解决吗? 谢谢
你是说预期的输出应该是
1 + 4 = 5
因为应该调用下面的代码?
public int getTotal(int x, int y) {
return x+y;
}
如果没有发生这种情况,当您将 camel-cxf 用作 bean 时,bean 仅定义契约,实现中的代码 未 在使用中。
如果您只想要一个标准的 SOAP-WS 并编写 java 构建和处理 SOAP 的代码 requests/response 那么只需使用普通的 CXF。