java - WSDL 中 SOAP 地址位置上的 JMS : What does it mean?

标签 java soap wsdl jms httpurlconnection

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

  • soap:address有什么用? WSDL 的值(value)?
  • 它会影响客户端连接网络服务的方式吗?

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

  • 什么是“JMS”以及“基于 JMS 的 SOAP”?

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

下面是 WSDL 文件的示例:(如下所示,使用的传输协议(protocol)是 HTTP,但是服务也将其与 JMS 地址一起使用?我在这里有点困惑。这是 SOAP 吗? HTTP 还是基于 JMS 的 SOAP?)

<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>

提前致谢!

最佳答案

JMS(Java 消息服务)是一种在系统之间发送可靠消息的 Java 标准。消息永远不会像 HTTP 那样在系统之间直接发送,而是由符合 JMS 的服务器软件存储和转发。 JMS 消息是一些 header 和各种类型的有效负载,但对于 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 来启动并运行基于 JMS 的 SOAP。指南可参见here .

关于java - WSDL 中 SOAP 地址位置上的 JMS : What does it mean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11540968/

相关文章:

java - IProgressMonitor 如何暂停?

java - 在 Java 中将字节转换为 int

Java Web 服务客户端到 WCF Web 服务服务器。互操作性解决方案

java - 使用字符串从 Java 构建 SOAP 信封

java - 从 WSDL 生成 java 文件 - 测试与生产 WSDL

java - match_parent 布局参数不起作用?

java - Android 从另一个 Activity 中获取结果

web-services - 使用 CreateObject( "Errors reported by Java compiler", ...) 时为 "webservice"

maven-2 - axis2 Maven 示例

php - SOAP 消息的最大大小是如何确定的?