我正在查看wsdl,它包含soap:address location
标记,其值为jms:/queue?destination=...
。
soap:address
值的用途是什么?此外,我尝试在Google上搜索jms:/queue?destination=...
,并在结果中使用“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>
先谢谢!
答案 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有几个相关的问题。