0

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

  • soap:addressWSDL 上的值有什么用?
  • 它会影响客户端连接到 Web 服务的方式吗?

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

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

我在客户端工作,所以我担心是否需要为此采取任何措施。目前,我只知道如何通过HttpUrlConnection.

下面是 WSDL 文件的示例:(如下所示,使用的传输协议是 HTTP,但随后服务也将其与 JMS 地址一起使用?我在这里有点困惑。这是 SOAP over HTTP 还是 SOAP通过 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>

提前致谢!

4

2 回答 2

4

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。指南可以在这里找到。

于 2012-07-18T20:49:50.360 回答
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有几个相关的问题。

于 2012-07-18T12:22:38.033 回答