2013-02-18 53 views
0

我需要使用相同的SOAP请求,以便能够调用相同的实施方法,但它是由2个不同的服务端点暴露:阿帕奇CXF JMS - SOAP

  1. 端点A - 将是用于同步通过SOAP
  2. 端点B访问 - 将通过JMS

现在是什么我看到的是,这对JMS工作SOAP请求消息和SOAP Web服务端点是结构不同对于异步访问。

我想知道使用ApacheCXF是否可以使用相同的SOAP请求调用SOAP或JMS端点?

在我来说,我是能够调用两个端点,但使用的要求是不是每

下同是工作在非同步端点B,但不上同步端点工作SOAP消息的示例一..请注意,我通过执行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> 

在这两种情况下,我使用宙斯盾数据绑定的,我也尝试JAXB很好,但没有成功futher。

鉴于其具有相同方法签名的相同方法,您会期望可以在异步和同步中使用相同的请求,但似乎并非如此。

任何人有类似的问题,或可能会对此有所了解?那现在用的是以下相关

注: 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

发现JMS端点正期待RPC样式请求,而SOAP同步端点预期分别默认情况下都是文档文字......将两者都更改为RPC,例如@SOAPBinding(style = Style.RPC,use = Use.LITERAL )...但我没有设法使JMS消息成为文档文字 – Javed 2013-02-19 02:13:10

回答

0

好吧,我发现解决方案基本上能够通过JMS和同步SOAP发送请求作为文档文字,需要在接口上定义以下内容:

@WebService 
@SOAPBinding(style=Style.DOCUMENT, use=Use.LITERAL,parameterStyle=ParameterStyle.BARE) 
public interface ExampleAsyncService { 

如果没有Document/Literal/Bare配置,JMS将有发送RPC包装样式请求的倾向。