我需要使用相同的 SOAP 请求才能调用方法的相同实现,但该方法由 2 个不同的服务端点公开:
- 端点 A - 用于通过 SOAP 进行同步访问
- 端点 B - 用于通过 JMS 进行异步访问
现在看到的是,在 JMS 和 SOAP Web 服务端点上工作的 SOAP 请求消息在结构上是不同的。
我想知道使用 ApacheCXF 是否可以使用相同的 SOAP 请求调用 SOAP 或 JMS 端点?
在我的情况下,我能够调用两个端点,但每个端点使用的请求并不相同
下面是一个 SOAP 消息的示例,该消息适用于异步端点 B,但不适用于同步端点 A .. 请注意,我通过执行 Junit 测试获得了异步消息并截获了 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>
这是适用于同步端点但不适用于异步端点的 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-common-utilities-2.2.2.jar、cxf-rt-databinding-aegis-2.2.2.jar、XmlSchema-1.4.5。 jar、cxf-rt-transsports-jms-2.2.2.jar、spring-jms-2.5.5.jar、acegi-security-1.0.7.jar