当前位置: 首页 > 知识库问答 >
问题:

Apache CXF JMS-SOAP

鲁明知
2023-03-14

我需要使用相同的SOAP请求才能调用相同的方法实现,但该方法由2个不同的服务endpoint公开:

  1. endpointA-将用于通过SOAP进行同步访问
  2. endpointB-将用于通过JMS进行异步访问

现在我看到的是,在JMS和SOAP webserviceendpoint上工作的SOAP请求消息在结构上是不同的。

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

在我的例子中,我能够调用两个endpoint,但每个endpoint使用的请求都不相同

下面是一个SOAP消息的示例,它在异步endpointB上工作,但在同步endpointA上不工作。。注意,我通过执行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请求,它适用于同步endpoint,但不适用于Asynchendpoint...此请求是从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-transports-jms-2.2.2.jar、spring-jms-2.5.5.jar、acegi-security-1.0.7.jar

共有1个答案

黄浩涆
2023-03-14

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

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

如果没有文档/文字/裸配置,JMS将倾向于发送RPC包装样式的请求。

 类似资料:
  • 问题内容: 好的,我正在开发一个程序,该程序将部署到许多机器(Windows,Linux,AIX,z / Linux,openVMS等)上。我希望该应用程序包含SOAP Web服务,但是我不想捆绑tomcat或为这些服务运行单独的服务(我希望它们与应用程序的其余部分在同一过程中)。 基本上,我正在寻找可以定义类的东西(例如)。我也可以编写WSDL或任何其他类型的服务描述。我想要这样的东西: 显然,

  • 问题内容: 目标 我正在为相当老的(但可悲的是不可更改)的接口实现Web服务。我有一个问题,正在调用我的服务的客户端期望SOAP响应中有某个命名空间,而我很难更改它以使其匹配。 考虑一个世界的例子,我想要这样: 看起来像这样: 我在这里找到了与尝试执行的操作类似的操作,但是在使相似的代码正确执行方面遇到困难。(我想坚持使用Metro,而不必更改为cxf或axis) 执行 我的实现返回如下所示: 该

  • 问题内容: 是的,我的应用程序服务器在https上运行。客户端要求将肥皂地址从http更改为https。 客户要求每当他想要2通过浏览器看到wsdl时,soap地址应为https 我已经在axis2.xml中添加了它… 我在service.xml中添加了以下内容 在关闭标签之后,但它给了我下面的错误。 它给了我例外 问题答案: service.xml中 有一个错字。它应该是 : 不是HTTPS。

  • 问题内容: 我正在使用soap spring ws创建一个soap Webservice,并且我已经成功创建了。现在我正在该soap service中执行错误实现,并且我能够使用我创建的如下类进行操作 在下面的覆盖函数中, 我创建了定制的肥皂故障对象并返回了该对象。返回的自定义肥皂故障即将出现在detail标签内。所以我的错是这样的 现在我想做的是我有一个与上述错误相关的错误代码,它正在代码标签内

  • 问题内容: 我在一次采访中遇到了这个问题,所以能否请您说一下SOAP Web服务是否仅支持“ POST” http方法,或者在服务器端是否有某种方法可以接受其他方法? 问题答案: 我一直使用POST,但是根据W3C标准,SOAP支持POST和GET方法。 编辑:经过一些研究,似乎并不完全正确。这是 理论上 可能使用GET因为POST和GET是可用于通过HTTP传输协议和SOAP的HTTP方法。 但

  • 问题内容: 我正在使用Spring-WS和WebServiceTemplate来调用SOAP WebService。目前,我在更新SOAP标头时遇到问题。 下面是SOAP请求的完整结构: 如上所示,我需要在Header中包含2个元素。我有以下代码来更新WebServiceTemplate的SOAP标头 但是当我尝试使用两个元素(字符串)更新标头时,出现以下错误消息: SOAPHeaderStrin

  • 问题内容: 我对SOAP消息和WSDL如何组合在一起感到困惑?我已经开始研究SOAP消息,例如: 是否所有SOAP消息都是WSDL?SOAP是接受其自己的“ SOAP消息”或“ WSDL”的协议吗?如果它们不同,那么我什么时候应该使用SOAP消息,什么时候应该使用WSDL? 关于此的一些说明将是很棒的。 问题答案: 每个请求都会发送一个SOAP文档。假设我们是一家书店,并且拥有一台远程服务器,我们

  • 问题内容: 我正在尝试在JBoss 5.1.0的WAR应用程序中部署一些Web服务。 我已经使用JAX-WS工具从现有的wsdl中创建了源文件。这创建了服务文件和带注释的@XmlType的小包,它们将充当请求和响应包装器。 此类在JBoss 4.2.3上运行良好,但是当移至JBoss 5.1.0时,出现此异常。 java.lang.UnsupportedOperationException:set