SOAP over JMS 1.0 supportPage edited by Daniel KulpSOAP over JMS offers an alternative messaging mechanism to SOAP over HTTP. SOAP over JMS offers more reliable and scalable messaging support than SOAP over HTTP. SOAP over JMS specification is aimed at a set of standards for the transport of SOAP messages over JMS. The main purpose is to ensure interoperability between the implementations of different Web services vendors. CXF supports and is compliant with this specification.
What's new compared to the old CXF JMS TransportSOAP over JMS transport supports most configurations of JMS Transport and provides some extensions to support the SOAP over JMS specification. SOAP over JMS Transport uses the JMS URI (jms:address, for example) to describe JMS addressing information and provides new WSDL extensions for JMS configuration. SOAP over JMS NamespaceWSDL NamespaceThe WSDL extensions for defining a JMS endpoint use a special namespace. In order to use the JMS WSDL extensions you will need to add the namespace definition shown below to the definitions element of your contract. JMS Extension Namespace
xmlns:soapjms="http://www.w3.org/2008/07/soap/bindings/JMS/"
For more details about these attributes, please check out the JMS URI specification. WSDL ExtensionVarious JMS properties may be set in three places in the WSDL — the binding, the service, and the port. Values specified at the service will propagate to all ports. Values specified at the binding will propagate to all ports using that binding.
Here is an example: <wsdl11:binding name="exampleBinding"> <soapjms:jndiContextParameter name="name" value="value" /> <soapjms:jndiConnectionFactoryName>ConnectionFactory </soapjms:jndiConnectionFactoryName> <soapjms:jndiInitialContextFactory> org.apache.activemq.jndi.ActiveMQInitialContextFactory </soapjms:jndiInitialContextFactory> <soapjms:jndiURL>tcp://localhost:61616 </soapjms:jndiURL> <soapjms:deliveryMode>PERSISTENT</soapjms:deliveryMode> <soapjms:priority>5</soapjms:priority> <soapjms:timeToLive>200</soapjms:timeToLive> </wsdl11:binding> <wsdl11:service name="exampleService"> <soapjms:jndiInitialContextFactory> com.example.jndi.InitialContextFactory </soapjms:jndiInitialContextFactory> <soapjms:timeTolive>100</soapjms:timeToLive> ... <wsdl11:port name="quickPort" binding="tns:exampleBinding"> ... <soapjms:timeToLive>10</soapjms:timeToLive> </wsdl11:port> <wsdl11:port name="slowPort" binding="tns:exampleBinding"> ... </wsdl11:port> </wsdl11:service> If a property is specified at multiple levels, the setting at the most granular level takes precedence (port first, then service, then binding). In the above example, notice the timeToLive property — for the quickPort port, the value will be 10ms (specified at the port level). For the slowPort port, the value will be 100ms (specified at the service level). In this example, the setting in the binding will always be overridden. WSDL UsageFor this example: <wsdl:definitions name="JMSGreeterService" <wsdl:binding name="JMSGreeterPortBinding" type="tns:JMSGreeterPortType"> <soap:binding style="document" transport="http://www.w3.org/2008/07/soap/bindings/JMS/" /> <soapjms:jndiContextParameter name="name" value="value" /> <soapjms:jndiConnectionFactoryName>ConnectionFactory </soapjms:jndiConnectionFactoryName> <soapjms:jndiInitialContextFactory> org.apache.activemq.jndi.ActiveMQInitialContextFactory </soapjms:jndiInitialContextFactory> <soapjms:jndiURL>tcp://localhost:61616 </soapjms:jndiURL> <soapjms:deliveryMode>PERSISTENT</soapjms:deliveryMode> <soapjms:priority>5</soapjms:priority> <soapjms:timeToLive>1000</soapjms:timeToLive> <wsdl:operation name="greetMe"> <soap:operation soapAction="test" style="document" /> <wsdl:input name="greetMeRequest"> <soap:body use="literal" /> </wsdl:input> <wsdl:output name="greetMeResponse"> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="JMSGreeterService"> <wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort"> <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
Publishing an service with the JAVA APIDevelopers who don't wish to modify the WSDL file can also publish the endpoint information using Java code. For CXF's SOAP over JMS implementation you can write the following:
// You just need to set the address with JMS URI
String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"
+ "?jndiInitialContextFactory"
+ "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ "&jndiConnectionFactoryName=ConnectionFactory&jndiURL=tcp://localhost:61500";
Hello implementor = new HelloImpl();
JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
svrFactory.setServiceClass(Hello.class);
svrFactory.setAddress(address);
// And specify the transport ID with SOAP over JMS specification
svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
svrFactory.setServiceBean(implementor);
svrFactory.create();
Consume the service with the APISample code to consume a SOAP-over-JMS service is as follows:
public void invoke() throws Exception {
// You just need to set the address with JMS URI
String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"
+ "?jndiInitialContextFactory"
+ "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+ "&jndiConnectionFactoryName=ConnectionFactory&jndiURL=tcp://localhost:61500";
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
// And specify the transport ID with SOAP over JMS specification
factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
factory.setServiceClass(Hello.class);
factory.setAddress(address);
Hello client = (Hello)factory.create();
String reply = client.sayHi(" HI");
System.out.println(reply);
}
Differences between the SOAP over JMS and the CXF old JMS transport implementationThere are some differences between the SOAP over JMS and the previous CXF over JMS transport implementation.
Change Notification Preferences
View Online
|
View Change
|
Add Comment
|
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 support confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
- [CONF] Apache CXF Documentation > SOAP over JMS 1.0 sup... confluence
