关于WSDL中SOAP地址位置的JMS:它是什么意思?

时间:2012-07-18 12:04:56

标签: java soap wsdl jms httpurlconnection

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

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

此外,我尝试在Google上搜索jms:/queue?destination=...,并在结果中使用“SOAP over JMS”一词。

  • 什么是'JMS',什么是'SOAP over JMS'?

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

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

先谢谢!

2 个答案:

答案 0 :(得分:4)

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

JMS网址不像HTTP网址那样“独立”。

喜欢这个:

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

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

没有像获取开源Java库那样容易,只是开始。所有JMS供应商都是独特的实现。 (例如,IBM WebSphere MQ,Apache ActiveMQ,Tibco EMS,OpenMQ,HornetQ)。有一些OpenSource和一些商业广告。您需要确定基础架构中使用的特定JMS供应商,根据供应商文档设置JMS配置。某些供应商允许在JMS URL中进行完整设置,例如ActiveMQ。它仍然需要在java中加载特定的库。

SOAP over JMS简单地使用了SOAP的所有通用标准,如WSDL,WS-Security等,但JMS增加了可靠性和事务性以及松散耦合,从而为系统和配置复杂性提供了稳健性。

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

答案 1 :(得分: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有几个相关的问题。