2012-07-18 77 views
0

我正在查看wsdl,它包含一个soap:address location标记,其值为jms:/queue?destination=...JMS在WSDL中的SOAP地址位置上:这是什么意思?

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

此外,我试图搜索谷歌的jms:/queue?destination=...和术语'SOAP over JMS'是在结果上。

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

我在客户端工作,所以我担心如果我需要为它做任何措施。目前,我只知道如何通过HttpUrlConnection连接到REST和SOAP Web服务。下面是一个WSDL文件的示例:(如下所示,所使用的传输协议是HTTP,但随后服务也将它与JMS地址一起使用?我在这里有点困惑。通过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

JMS是Java消息服务,它是用于在系统之间发送可靠消息的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网址中完成设置,例如ActiveMQ。它仍然需要在java中加载特定的库。

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

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

+0

谢谢Petter!现在我更清楚了。但我还有一个问题。服务器的所有者给了我一个包含一组方法的WSDL。每种方法都有自己的soap地址标签。肥皂地址的价值就像你的解释。但除此之外,他们还向我提供了一个包含连接到哪里的文件。它的格式是这样的:http:// ipAddress:port/methodName。它与JMS的soap地址位置不同。我应该如何连接到他们的服务? – Arci 2012-07-19 01:47:13

+0

我是否需要通过JMS方式连接到他们的服务,或者我可以通过调用他们给我的URL来连接到他们的服务,并将SOAP传递到正文中,就像在普通的Web服务中一样? – Arci 2012-07-19 01:49:19

+0

进一步检查WSDL后,我发现这些方法的soap绑定正在使用基于HTTP的SOAP。但是我很困惑,因为它使用的soap地址位置是JMS格式。将添加我的WSDL文件的样本。 – Arci 2012-07-19 03:26:08

2

基本上JMS是一个中间件服务,请参见:http://en.wikipedia.org/wiki/Java_Message_Service

“肥皂:地址”定义了服务的位置。

“JMS上的SOAP”的意思是你通过一个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有几个相关的问题。

+0

嗨。感谢您的链接!通过服务的位置,你的意思是我要连接到的URL?因为给予我的URL(这是我应该连接的地方)与在soap:address上定义的位置不同。截至目前,我没有使用任何外部库进行连接。我只使用'HttpUrlConnection'。你能为此建议一个免费的开源库吗? – Arci 2012-07-18 12:57:02

+0

soap:WSDL中的地址取决于它所在的主机,也许这不是生产主机。你可以使用Axis2:http://publib.boulder.ibm.com/infocenter/wmqv7/v7r1/index.jsp?topic=%2Fcom.ibm.mq.doc%2Fts20535_.htm – mdo 2012-07-18 13:55:31

+0

然后soap:地址不是真的我应该在哪里连接?因为他们也给了我一个我可以连接的URL。格式如下:http:// ipAddress:port/methodName它看起来像一个普通的URL。我可以正确地说,我可以通过URL调用它并将请求内容中的soap传递给类似于Web服务调用的SOAP类型吗? – Arci 2012-07-19 02:04:43