【问题标题】:Can I create a SOAP/JMS service without forcing the consumer to add the MQ maker's library?我可以在不强制消费者添加 MQ 制造商库的情况下创建 SOAP/JMS 服务吗?
【发布时间】:2016-06-16 18:57:55
【问题描述】:

我正在测试使用 Apache CXF 构建的 SOAP over JMS Web 服务。特别是,我关注了 "jms_specs_demo":一个 WSDL 示例,描述了消费者所需的调用、SOAP 服务实现和消息持久性所需的队列。

客户端调用等同于 SOAP over HTTP 调用(端点位于 WSDL 文件上)。但是,JMS JNDI 地址使用 MQ 制造商的库(org.apache.activemq.jndi.ActiveMQInitialContextFactory),客户端也需要它:

<soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory&amp;jndiConnectionFactoryName=ConnectionFactory&amp;jndiURL=tcp://localhost:61616"/>

我已经建立了一个独立的客户端来测试它:

JMSGreeterService service = new JMSGreeterService();
JMSGreeterPortType greeter = service.getGreeterPort();

greeter.greetMeOneWay("hello World");

但实际上,此代码仅在添加 ApacheMQ 依赖项时才有效:

<dependency>
    <groupId>org.apache.activemq</groupId>
    <artifactId>activemq-broker</artifactId>
    <version>5.13.3</version>
</dependency>

有什么方法可以创建 SOAP over JMS 服务而不需要在消费者上添加 MQ 制造商的库 (JAR)?我认为 JMS API 可以管理传输并将消息推送到远程队列中,而无需额外的库。

【问题讨论】:

    标签: java soap wsdl jms cxf


    【解决方案1】:

    简而言之,不。JMS API 本身就是这样 - 一个定义 JMS 对象必须履行的契约的 API。请参阅javadoc for the JMS API

    要实际使用 JMS,您的客户端需要使用 JMS API(称为 JMS 提供者)的具体实现,这就是您使用 activemq-broker 库所做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多