【问题标题】:JMS on SOAP address location in a WSDL: What does it mean?WSDL 中 SOAP 地址位置上的 JMS:这是什么意思?
【发布时间】:2012-07-17 11:09:05
【问题描述】:

我正在查看一个 wsdl,它包含一个 soap:address location 标记,其值为 jms:/queue?destination=...

  • soap:address 值在 WSDL 上有什么用处?
  • 是否会影响客户端连接到 Web 服务的方式?

另外,我尝试在 Google 上搜索 jms:/queue?destination=...,结果中出现了“SOAP over JMS”一词。

  • 什么是“JMS”,什么是“SOAP over JMS”?

我在客户端工作,所以我担心是否需要为此采取任何措施。目前,我只知道如何通过HttpUrlConnection 连接到 REST 和 SOAP Web 服务。

下面是 WSDL 文件的示例:(如下所示,使用的传输协议是 HTTP,但是服务也使用 JMS 地址?我在这里有点困惑。这个 SOAP 是否结束HTTP 还是 SOAP over JMS?)

<wsdl:binding name="MethodSOAP_JMS_Binding" type="tns:MethodPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" />
    <wsdl:operation name="methodName">
        <soap:operation soapAction="" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" />
        <wsdl:input name="method_Input">
            <soap:body parts="RequestBean" use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" />
        </wsdl:input>
        <wsdl:output name="method_Output">
            <soap:body parts="ResponseBean" use="literal" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" />
        </wsdl:output>
    </wsdl:operation>
</wsdl:binding>

<wsdl:service name="MethodSOAP_JMS_Service">
    <wsdl:port binding="tns:MethodSOAP_JMS_Binding" name="MethodSOAPPort">
        <soap:address location="jms:/queue?..." xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" />
    </wsdl:port>
</wsdl:service>

提前致谢!

【问题讨论】:

    标签: java soap wsdl jms httpurlconnection


    【解决方案1】:

    JMS,Java Message Service,是一种用于在系统之间发送可靠消息的 Java 标准。消息永远不会在系统之间直接发送,例如 HTTP,而是由兼容 JMS 的服务器软件存储和转发。 JMS 消息是一些标头和各种类型的有效负载,但对于 SOAP,它很可能是字符串有效负载,因为 SOAP 是基于 XML 的。

    JMS URL 不像 HTTP url 那样“独立”。

    喜欢这个:

    jms:///queue?connectionfactory=MyQCF&destination=MyQ
    

    它说你应该连接一个叫做 MyQCF 的连接工厂和一个叫做 MyQ 的目的地。确切地说,这意味着必须在其他地方配置,它没有说明特定的物理服务器等。这在 JMS 中很常见,因为建立与 JMS 服务器的连接的最常见方法是通过名为 JNDI 的配置文件或寄存器。在该配置中,供应商特定的设置和配置解析为要联系的服务器、服务器的供应商/版本、目的地(主题或队列)等等。

    真的没有像获得一个开源的 java 库然后开始那么简单。所有 JMS 供应商都是独特的实现。 (示例。IBM WebSphere MQ、Apache ActiveMQ、Tibco EMS、OpenMQ、HornetQ)。有一些开源和一些商业。您需要确定在您的基础架构中使用了哪个特定的 JMS 供应商,并根据该供应商的文档设置 JMS 配置。一些供应商允许在 JMS url 中进行完整设置,例如 ActiveMQ。它仍然需要在 java 中加载的特定库。

    JMS 上的 SOAP 仅使用 SOAP 的所有通用标准,例如 WSDL、WS-Security 等。但 JMS 增加了可靠性和事务性以及松散耦合,这反过来又为系统和配置复杂性提供了稳健性。

    如果您没有考虑到特定的 JMS 供应商和库,您可能希望查看 CXF 和 ActiveMQ 以启动和运行 SOAP over JMS。指南可以找到here

    【讨论】:

    • 在进一步检查 WSDL 后,我发现方法的肥皂绑定正在使用 SOAP over HTTP。但我很困惑,因为它使用的肥皂地址位置是 JMS 格式。将添加我的 WSDL 文件示例。
    • Web 服务同时通过 HTTP 和 JMS 公开的情况并不少见。两者的绑定可以同时存在于 WSDL 中。在您的 WSDL 中,您指的是设置为 HTTP 的传输部分。错了,应该是JMS,因为它显然是一个JMS服务。据我所知,JMS 没有明显的命名空间,但schemas.xmlsoap.org/soap/jms 很常见。不过,这不应该是您主要关心的问题,因为绑定、协议和地址通常是独立于 WSDL 设置的。
    【解决方案2】:

    基本上,JMS 是用于消息传递的中间件服务,请参阅:http://en.wikipedia.org/wiki/Java_Message_Service

    'soap:address' 定义了服务的位置。

    “SOAP over JMS”表示您通过 JMS 队列将 SOAP 请求发送到服务,参见图 1:http://www.ibm.com/developerworks/websphere/library/techarticles/0402_du/0402_du.html

    在客户端,您必须连接到相应的 JMS 队列。是否透明处理(或完全支持)取决于您的库。

    另一个教程: http://www.ibm.com/developerworks/websphere/library/tutorials/0903_adams/index.html

    SO 有几个相关的问题。

    【讨论】:

    • 嗨。感谢您的链接!服务的位置是指我要连接的 URL 吗?因为给我的 URL(这是我应该连接的地方)与soap:address 上定义的位置不同。截至目前,我没有使用任何外部库进行连接。我只使用HttpUrlConnection。你能为此推荐一个免费的开源库吗?
    • WSDL 中的 soap:address 取决于构建它的主机,也许这不是生产主机。您可以使用 Axis2:publib.boulder.ibm.com/infocenter/wmqv7/v7r1/…
    • 那么soap:address不是我应该连接的地方吗?因为他们还给了我一个可以连接的 URL。格式是这样的: http://ipAddress:port/methodName 它看起来像一个普通的 URL。可以正确地说我可以通过 URL 调用它并在我的请求正文中传递肥皂,类似于如何完成 Web 服务调用?
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2021-03-24
    • 2013-04-12
    • 2011-07-17
    • 1970-01-01
    • 2014-03-10
    • 2018-08-23
    相关资源
    最近更新 更多