我是否可以在不强制消费者添加MQ制造商的库的情况下创建SOAP / JMS服务?

时间:2016-06-16 18:57:56

标签: java soap wsdl jms cxf

我正在测试使用Apache CXF构建的SOAP over JMS Web服务。特别是,我正在关注"jms_specs_demo":一个WSDL-fist示例,描述了消费者需要的调用,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将管理传输并将消息推送到远程队列而无需额外的库。

1 个答案:

答案 0 :(得分:0)

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

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