我需要使用相同的SOAP请求才能调用方法的相同实现,但是由2个不同的服务端点公开:
现在看到的是,在JMS和SOAP Web服务端点上运行的SOAP请求消息在结构上是不同的。
我想知道使用ApacheCXF是否可以使用相同的SOAP请求调用SOAP或JMS端点?
在我的情况下,我能够调用两个端点,但每个
使用的请求不一样下面是一个SOAP消息的示例,该消息适用于Asynch Endpoint B,但不能在Synch Endpoint A上运行。请注意,我通过执行Junit测试获取了Asynch消息,并在ActiveMQ队列上拦截了生成消息:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:create xmlns:ns1="http://service.ws.example/">
<CustomPartyModel>
<ns2:customerModel
xmlns:ns2="http://party.beans.commons.example">
<ns2:person>
<ns2:budgetPlanNumber>131484</ns2:budgetPlanNumber>
<ns2:clientSituationCode
xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance" ns3:nil="true" />
<ns2:employeeReduction>J</ns2:employeeReduction>
<ns2:employeeNumber></ns2:employeeNumber>
<ns2:packageNumber>5</ns2:packageNumber>
<ns2:planIndicator xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance"
ns3:nil="true" />
<ns2:privateRelationNumber
xmlns:ns3="http://www.w3.org/2001/XMLSchema-instance" ns3:nil="true" />
</ns2:person>
</ns2:customerModel>
</CustomPartyModel>
</ns1:create>
</soap:Body>
这是在同步端点上工作但不在Asynch上的SOAP请求。这个请求是从WSDL创建请求获得的:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.ws.example/" xmlns:par="http://party.beans.commons.example">
<soapenv:Body>
<ser:CustomPartyModel>
<par:customerModel>
<par:person>
<par:budgetPlanNumber>131484</par:budgetPlanNumber>
<par:employeeReduction>J</par:employeeReduction>
<par:employeeNumber></par:employeeNumber>
<par:packageNumber>5</par:packageNumber>
<par:professionCodePartner></par:professionCodePartner>
<par:professionDescriptionPartner></par:professionDescriptionPartner>
</par:person>
</par:customerModel>
</ser:CustomPartyModel>
在使用Aegis进行数据绑定的两种情况下,我都尝试过JAXB,但没有取得进一步的成功。
鉴于它具有相同方法签名的相同方法,您可以预期在异步和同步中可以使用相同的请求,但似乎并非如此。
任何人都有过类似的问题,或者可能会对此有所了解?
请注意,我使用以下依赖项: cxf-api-2.2.2.jar, CXF常见的实用工具,2.2.2.jar, CXF-RT-绑定宙斯盾-2.2.2.jar, XMLSchema的1.4.5.jar, CXF-RT-传输的JMS-2.2.2.jar, 弹簧JMS-2.5.5.jar, 的acegi安全-1.0.7.jar
答案 0 :(得分:0)
好的,我发现解决方案基本上能够通过JMS和Synchronous SOAP作为Document Literal发送请求,需要在界面上定义以下内容
@WebService
@SOAPBinding(style=Style.DOCUMENT, use=Use.LITERAL,parameterStyle=ParameterStyle.BARE)
public interface ExampleAsyncService {
如果没有Document / Literal / Bare配置,JMS将倾向于发送RPC包装样式请求。