cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From conflue...@apache.org
Subject [CONF] Apache CXF Documentation > SOAP over JMS 1.0 support
Date Sun, 19 Sep 2010 20:26:00 GMT
<html>
<head>
    <base href="https://cwiki.apache.org/confluence">
            <link rel="stylesheet" href="/confluence/s/1810/9/1/_/styles/combined.css?spaceKey=CXF20DOC&amp;forWysiwyg=true"
type="text/css">
    </head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
    <h2><a href="https://cwiki.apache.org/confluence/display/CXF20DOC/SOAP+over+JMS+1.0+support">SOAP
over JMS 1.0 support</a></h2>
    <h4>Page <b>edited</b> by             <a href="https://cwiki.apache.org/confluence/display/~bimargulies@gmail.com">Benson
Margulies</a>
    </h4>
        <div id="versionComment">
        <b>Comment:</b>
        Clarify requirement for JNDI params when using jms:queue.<br />
    </div>
        <br/>
                         <h4>Changes (1)</h4>
                                 
    
<div id="page-diffs">
            <table class="diff" cellpadding="0" cellspacing="0">
            <tr><td class="diff-snipped" >...<br></td></tr>
            <tr><td class="diff-unchanged" >{code} <br> <br></td></tr>
            <tr><td class="diff-added-lines" style="background-color: #dfd;">Even
if you want to use the &#39;queue&#39; or &#39;topic&#39; variants and avoid
dealing with JNDI directly, you still have to specify the two factory parameters in the address:
<br> <br>{code} <br>svrFactory.setAddress(&quot;jms:queue:test.cxf.jmstransport.queue?timeToLive=1000&quot;
<br>                              + &quot;&amp;jndiConnectionFactoryName=ConnectionFactory&quot;
<br>                              + &quot;&amp;jndiInitialContextFactory&quot;
<br>                              + &quot;=org.apache.activemq.jndi.ActiveMQInitialContextFactory&quot;);
<br>{code} <br> <br></td></tr>
            <tr><td class="diff-unchanged" >h2. Differences between the SOAP over
JMS and the CXF old JMS transport implementation <br>There are some differences between
the SOAP over JMS and the previous CXF over JMS transport implementation. <br></td></tr>
            <tr><td class="diff-snipped" >...<br></td></tr>
        </table>
</div>                            <h4>Full Content</h4>
                    <div class="notificationGreySide">
        <p>SOAP 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. </p>

<p><a href="http://www.w3.org/TR/soapjms/" class="external-link" rel="nofollow">SOAP
over JMS specification</a> 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.</p>

<div class='panelMacro'><table class='noteMacro'><colgroup><col width='24'><col></colgroup><tr><td
valign='top'><img src="/confluence/images/icons/emoticons/warning.gif" width="16" height="16"
align="absmiddle" alt="" border="0"></td><td><b>"New Feature!"</b><br
/>The <a href="http://www.w3.org/TR/soapjms/" class="external-link" rel="nofollow">SOAP
over JMS specification</a> feature described here is a new feature under development
for CXF 2.3.   It is not available in a release yet.    Help testing this with the 2.3-SNAPSHOTS
would be greatly appreciated.</td></tr></table></div>



<h2><a name="SOAPoverJMS1.0support-What%27snewcomparedtotheoldCXFJMSTransport"></a>What's
new compared to the old CXF JMS Transport</h2>

<p>SOAP over JMS transport supports most <a href="http://cwiki.apache.org/CXF20DOC/jms-transport.html"
class="external-link" rel="nofollow">configurations of JMS Transport</a> and provides
some extensions to support the SOAP over JMS specification. SOAP over JMS Transport uses the
<a href="http://tools.ietf.org/id/draft-merrick-jms-uri-06.txt" class="external-link" rel="nofollow">JMS
URI</a> (jms:address, for example) to describe JMS addressing information and provides
new WSDL extensions for JMS configuration. </p>

<h2><a name="SOAPoverJMS1.0support-SOAPoverJMSNamespace"></a>SOAP over JMS
Namespace</h2>

<h3><a name="SOAPoverJMS1.0support-WSDLNamespace"></a>WSDL Namespace</h3>
<p>The 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.</p>

<h3><a name="SOAPoverJMS1.0support-JMSExtensionNamespace"></a>JMS Extension
Namespace</h3>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
xmlns:soapjms=<span class="code-quote">"http:<span class="code-comment">//www.w3.org/2008/07/soap/bindings/JMS/"</span></span>
</pre>
</div></div>

<h2><a name="SOAPoverJMS1.0support-JMSURI"></a>JMS URI</h2>

<p>JMS endpoints need to know the address information for establishing connections to
the proper destination. SOAP over JMS implements the <a href="http://tools.ietf.org/id/draft-merrick-jms-uri-06.txt"
class="external-link" rel="nofollow">URI Scheme for Java Message Service 1.0</a>.
</p>

<p>This URI scheme starts with "jms:jndi:" plus a JNDI name for a Destination. Since
interaction with some resources may require JNDI contextual information or JMS header fields
and properties to be specified as well, the "jndi" variant of the "jms" URI scheme includes
support for supplying this additional JNDI information as query parameters.</p>

<p>CXF supports three variants, "<b>jndi</b>", "<b>queue</b>",
and "<b>topic</b>".<br/>
For example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
jms:jndi:SomeJndiNameForDestination?jndiInitialContextFactory=com.example.jndi.JndiFactory&amp;priority=3
jms:queue:ExampleQueueName?timeToLive=1000
</pre>
</div></div>

<p>Properties are as follows:</p>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Property</th>
<th class='confluenceTh'>DefaultValue</th>
<th class='confluenceTh'>Description</th>
</tr>
<tr>
<td class='confluenceTd'>deliveryMode</td>
<td class='confluenceTd'> PERSISTENT </td>
<td class='confluenceTd'> NON_PERSISTENT  messages will kept only in memory <br/>
PERSISTENT messages will be saved to disk </td>
</tr>
<tr>
<td class='confluenceTd'>jndiConnectionFactoryName</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the JNDI name bound to the JMS connection factory
to use when connecting to the JMS destination.</td>
</tr>
<tr>
<td class='confluenceTd'>jndiInitialContextFactory</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the fully qualified Java class name of the "InitialContextFactory"
implementation class to use.</td>
</tr>
<tr>
<td class='confluenceTd'>jndiURL</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the JNDI provider URL</td>
</tr>
<tr>
<td class='confluenceTd'>replyToName</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'> Specifies the JNDI name bound to the JMS destinations where
replies are sent. </td>
</tr>
<tr>
<td class='confluenceTd'>priority</td>
<td class='confluenceTd'> 4 </td>
<td class='confluenceTd'>Priority for the messages. See your JMS provider documentation
for details</td>
</tr>
<tr>
<td class='confluenceTd'>timeToLive</td>
<td class='confluenceTd'> 0 </td>
<td class='confluenceTd'>Time (in ms) after which the message will be discarded by the
jms provider</td>
</tr>
<tr>
<td class='confluenceTd'>Additional JNDI Parameters</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Additional parameters for a JNDI provider.  A custom parameter
name must start with the prefix "jndi-".</td>
</tr>
</tbody></table>
</div>


<p>For more details about these attributes, please check out the <a href="http://tools.ietf.org/id/draft-merrick-jms-uri-06.txt"
class="external-link" rel="nofollow">JMS URI specification</a>.</p>

<h2><a name="SOAPoverJMS1.0support-WSDLExtension"></a>WSDL Extension</h2>

<p>Various 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. <br/>
For example, if the <b>jndiInitialContextFactory</b> is indicated for a service,
it will be used for all of the port elements it contains.</p>
<div class='table-wrap'>
<table class='confluenceTable'><tbody>
<tr>
<th class='confluenceTh'>Field</th>
<th class='confluenceTh'>DefaultValue</th>
<th class='confluenceTh'>Description</th>
</tr>
<tr>
<td class='confluenceTd'>deliveryMode</td>
<td class='confluenceTd'> PERSISTENT </td>
<td class='confluenceTd'>NON_PERSISTENT messages will only be kept in memory <br/>
PERSISTENT messages will be saved to disk </td>
</tr>
<tr>
<td class='confluenceTd'>jndiConnectionFactoryName</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the JNDI name bound to the JMS connection factory
to use when connecting to the JMS destination.</td>
</tr>
<tr>
<td class='confluenceTd'>jndiInitialContextFactory</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the fully qualified Java class name of the "InitialContextFactory"
implementation class to use.</td>
</tr>
<tr>
<td class='confluenceTd'>jndiURL</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the JNDI provider URL</td>
</tr>
<tr>
<td class='confluenceTd'>replyToName</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'>Specifies the JNDI name bound to the JMS destinations where
replies are sent. </td>
</tr>
<tr>
<td class='confluenceTd'>priority</td>
<td class='confluenceTd'> 4 </td>
<td class='confluenceTd'>Priority for the messages. See your JMS provider doc for details</td>
</tr>
<tr>
<td class='confluenceTd'>timeToLive</td>
<td class='confluenceTd'> 0 </td>
<td class='confluenceTd'>Time (in ms) after which the message will be discarded by the
jms provider</td>
</tr>
<tr>
<td class='confluenceTd'>jndiContextParameter</td>
<td class='confluenceTd'>&nbsp;</td>
<td class='confluenceTd'> Additional parameters for a JNDI provider.</td>
</tr>
</tbody></table>
</div>


<p>Here is an example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
<span class="code-tag">&lt;wsdl11:binding name=<span class="code-quote">"exampleBinding"</span>&gt;</span>
  <span class="code-tag">&lt;soapjms:jndiContextParameter name=<span class="code-quote">"name"</span>
value=<span class="code-quote">"value"</span> /&gt;</span>
<span class="code-tag">&lt;soapjms:jndiConnectionFactoryName&gt;</span>ConnectionFactory
<span class="code-tag">&lt;/soapjms:jndiConnectionFactoryName&gt;</span>
<span class="code-tag">&lt;soapjms:jndiInitialContextFactory&gt;</span>
org.apache.activemq.jndi.ActiveMQInitialContextFactory
<span class="code-tag">&lt;/soapjms:jndiInitialContextFactory&gt;</span>
<span class="code-tag">&lt;soapjms:jndiURL&gt;</span>tcp://localhost:61616
<span class="code-tag">&lt;/soapjms:jndiURL&gt;</span>
<span class="code-tag">&lt;soapjms:deliveryMode&gt;</span>PERSISTENT<span
class="code-tag">&lt;/soapjms:deliveryMode&gt;</span>
<span class="code-tag">&lt;soapjms:priority&gt;</span>5<span class="code-tag">&lt;/soapjms:priority&gt;</span>
  <span class="code-tag">&lt;soapjms:timeToLive&gt;</span>200<span
class="code-tag">&lt;/soapjms:timeToLive&gt;</span>
<span class="code-tag">&lt;/wsdl11:binding&gt;</span>

<span class="code-tag">&lt;wsdl11:service name=<span class="code-quote">"exampleService"</span>&gt;</span>
  <span class="code-tag">&lt;soapjms:jndiInitialContextFactory&gt;</span>
    com.example.jndi.InitialContextFactory
  <span class="code-tag">&lt;/soapjms:jndiInitialContextFactory&gt;</span>
  <span class="code-tag">&lt;soapjms:timeTolive&gt;</span>100<span
class="code-tag">&lt;/soapjms:timeToLive&gt;</span>
  ...
  <span class="code-tag">&lt;wsdl11:port name=<span class="code-quote">"quickPort"</span>
binding=<span class="code-quote">"tns:exampleBinding"</span>&gt;</span>
    ...
    <span class="code-tag">&lt;soapjms:timeToLive&gt;</span>10<span
class="code-tag">&lt;/soapjms:timeToLive&gt;</span>
  <span class="code-tag">&lt;/wsdl11:port&gt;</span>
  <span class="code-tag">&lt;wsdl11:port name=<span class="code-quote">"slowPort"</span>
binding=<span class="code-quote">"tns:exampleBinding"</span>&gt;</span>
    ...
  <span class="code-tag">&lt;/wsdl11:port&gt;</span>
<span class="code-tag">&lt;/wsdl11:service&gt;</span>
</pre>
</div></div>

<p>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.</p>

<h2><a name="SOAPoverJMS1.0support-WSDLUsage"></a>WSDL Usage</h2>
<p>For this example:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-xml">
&lt;wsdl:definitions name=<span class="code-quote">"JMSGreeterService"</span>
	<span class="code-tag">&lt;wsdl:binding name=<span class="code-quote">"JMSGreeterPortBinding"</span>
type=<span class="code-quote">"tns:JMSGreeterPortType"</span>&gt;</span>
		&lt;soap:binding style=<span class="code-quote">"document"</span>
			transport=<span class="code-quote">"http://www.w3.org/2010/soapjms/"</span>
/&gt;
		&lt;soapjms:jndiContextParameter name=<span class="code-quote">"name"</span>
			value=<span class="code-quote">"value"</span> /&gt;
		<span class="code-tag">&lt;soapjms:jndiConnectionFactoryName&gt;</span>ConnectionFactory
		<span class="code-tag">&lt;/soapjms:jndiConnectionFactoryName&gt;</span>
		<span class="code-tag">&lt;soapjms:jndiInitialContextFactory&gt;</span>
			org.apache.activemq.jndi.ActiveMQInitialContextFactory
		<span class="code-tag">&lt;/soapjms:jndiInitialContextFactory&gt;</span>
		<span class="code-tag">&lt;soapjms:jndiURL&gt;</span>tcp://localhost:61616
		<span class="code-tag">&lt;/soapjms:jndiURL&gt;</span>
		<span class="code-tag">&lt;soapjms:deliveryMode&gt;</span>PERSISTENT<span
class="code-tag">&lt;/soapjms:deliveryMode&gt;</span>
		<span class="code-tag">&lt;soapjms:priority&gt;</span>5<span class="code-tag">&lt;/soapjms:priority&gt;</span>
		<span class="code-tag">&lt;soapjms:timeToLive&gt;</span>1000<span
class="code-tag">&lt;/soapjms:timeToLive&gt;</span>
		<span class="code-tag">&lt;wsdl:operation name=<span class="code-quote">"greetMe"</span>&gt;</span>
			<span class="code-tag">&lt;soap:operation soapAction=<span class="code-quote">"test"</span>
style=<span class="code-quote">"document"</span> /&gt;</span>
			<span class="code-tag">&lt;wsdl:input name=<span class="code-quote">"greetMeRequest"</span>&gt;</span>
				<span class="code-tag">&lt;soap:body use=<span class="code-quote">"literal"</span>
/&gt;</span>
			<span class="code-tag">&lt;/wsdl:input&gt;</span>
			<span class="code-tag">&lt;wsdl:output name=<span class="code-quote">"greetMeResponse"</span>&gt;</span>
				<span class="code-tag">&lt;soap:body use=<span class="code-quote">"literal"</span>
/&gt;</span>
			<span class="code-tag">&lt;/wsdl:output&gt;</span>
		<span class="code-tag">&lt;/wsdl:operation&gt;</span>
	<span class="code-tag">&lt;/wsdl:binding&gt;</span>
        <span class="code-tag">&lt;wsdl:service name=<span class="code-quote">"JMSGreeterService"</span>&gt;</span>
		<span class="code-tag">&lt;soapjms:jndiConnectionFactoryName&gt;</span>ConnectionFactory
		<span class="code-tag">&lt;/soapjms:jndiConnectionFactoryName&gt;</span>
		<span class="code-tag">&lt;soapjms:jndiInitialContextFactory&gt;</span>
			org.apache.activemq.jndi.ActiveMQInitialContextFactory
		<span class="code-tag">&lt;/soapjms:jndiInitialContextFactory&gt;</span>
		<span class="code-tag">&lt;wsdl:port binding=<span class="code-quote">"tns:JMSGreeterPortBinding"</span>
name=<span class="code-quote">"GreeterPort"</span>&gt;</span>
			<span class="code-tag">&lt;soap:address location=<span class="code-quote">"jms:jndi:dynamicQueues/test.cxf.jmstransport.queue"</span>
/&gt;</span>
		<span class="code-tag">&lt;/wsdl:port&gt;</span>
	<span class="code-tag">&lt;/wsdl:service&gt;</span>
<span class="code-tag">&lt;/wsdl:definitions&gt;</span>
</pre>
</div></div>

<ul>
	<li>The transport URI (<a href="http://www.w3.org/2010/soapjms/" class="external-link"
rel="nofollow">http://www.w3.org/2010/soapjms/</a>) is defined in the &lt;soap:binding&gt;.</li>
	<li>The jms: URI is defined in the &lt;soap:address&gt;</li>
	<li>The extension properties are in the &lt;soap:binding&gt;</li>
</ul>


<h2><a name="SOAPoverJMS1.0support-PublishinganservicewiththeJAVAAPI"></a>Publishing
an service with the JAVA API</h2>
<p>Developers 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:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
        <span class="code-comment">// You just need to set the address with JMS URI
</span>        <span class="code-object">String</span> address = <span
class="code-quote">"jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"</span>
            + <span class="code-quote">"?jndiInitialContextFactory"</span>
            + <span class="code-quote">"=org.apache.activemq.jndi.ActiveMQInitialContextFactory"</span>
            + <span class="code-quote">"&amp;jndiConnectionFactoryName=ConnectionFactory&amp;jndiURL=tcp:<span
class="code-comment">//localhost:61500"</span>;
</span>        Hello implementor = <span class="code-keyword">new</span>
HelloImpl();
        JaxWsServerFactoryBean svrFactory = <span class="code-keyword">new</span>
JaxWsServerFactoryBean();
        svrFactory.setServiceClass(Hello.class);
        svrFactory.setAddress(address);
        <span class="code-comment">// And specify the transport ID with SOAP over JMS
specification
</span>        svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
        svrFactory.setServiceBean(implementor);
        svrFactory.create();
</pre>
</div></div>

<p>NOTE: Before you start the server, you need to make sure the JMS broker is stared,
 you can find some useful code of starting the JMS broker here.</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java"><span class="code-keyword">public</span> void run()
{
    <span class="code-keyword">try</span> {                
        broker = <span class="code-keyword">new</span> BrokerService();
        broker.setPersistenceAdapter(<span class="code-keyword">new</span> MemoryPersistenceAdapter());
        broker.setTmpDataDirectory(<span class="code-keyword">new</span> File(<span
class="code-quote">"./target"</span>));
        broker.addConnector(brokerUrl1);
        broker.start();            
    } <span class="code-keyword">catch</span> (Exception e) {
        e.printStackTrace();
    }
}
</pre>
</div></div>

<h2><a name="SOAPoverJMS1.0support-ConsumetheservicewiththeAPI"></a>Consume
the service with the API</h2>

<p>Sample code to consume a SOAP-over-JMS service is as follows:</p>
<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
      <span class="code-keyword">public</span> void invoke() <span class="code-keyword">throws</span>
Exception {
        <span class="code-comment">// You just need to set the address with JMS URI
</span>        <span class="code-object">String</span> address = <span
class="code-quote">"jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"</span>
            + <span class="code-quote">"?jndiInitialContextFactory"</span>
            + <span class="code-quote">"=org.apache.activemq.jndi.ActiveMQInitialContextFactory"</span>
            + <span class="code-quote">"&amp;jndiConnectionFactoryName=ConnectionFactory&amp;jndiURL=tcp:<span
class="code-comment">//localhost:61500"</span>;
</span>        JaxWsProxyFactoryBean factory = <span class="code-keyword">new</span>
JaxWsProxyFactoryBean();
        <span class="code-comment">// And specify the transport ID with SOAP over JMS
specification
</span>        factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID);
        factory.setServiceClass(Hello.class);
        factory.setAddress(address);
        Hello client = (Hello)factory.create();
        <span class="code-object">String</span> reply = client.sayHi(<span
class="code-quote">" HI"</span>);
        <span class="code-object">System</span>.out.println(reply);
    }
</pre>
</div></div>

<p>Even if you want to use the 'queue' or 'topic' variants and avoid dealing with JNDI
directly, you still have to specify the two factory parameters in the address:</p>

<div class="code panel" style="border-width: 1px;"><div class="codeContent panelContent">
<pre class="code-java">
svrFactory.setAddress(<span class="code-quote">"jms:queue:test.cxf.jmstransport.queue?timeToLive=1000"</span>
                              + <span class="code-quote">"&amp;jndiConnectionFactoryName=ConnectionFactory"</span>
                              + <span class="code-quote">"&amp;jndiInitialContextFactory"</span>
                              + <span class="code-quote">"=org.apache.activemq.jndi.ActiveMQInitialContextFactory"</span>);
</pre>
</div></div>

<h2><a name="SOAPoverJMS1.0support-DifferencesbetweentheSOAPoverJMSandtheCXFoldJMStransportimplementation"></a>Differences
between the SOAP over JMS and the CXF old JMS transport implementation</h2>
<p>There are some differences between the SOAP over JMS and the previous CXF over JMS
transport implementation.</p>
<ol>
	<li>The JMS Messages sent by SOAP over JMS transport implementation are in accordance
with the SOAP over JMS specification, allowing CXF to interoperate with other SOAP over JMS
implementations.</li>
	<li>Additional techniques are provided for configuring SOAP over JMS.</li>
	<li>The new implementation provides more sophisticated error handling for the SOAP
over JMS messages.</li>
</ol>

    </div>
        <div id="commentsSection" class="wiki-content pageSection">
        <div style="float: right;">
            <a href="https://cwiki.apache.org/confluence/users/viewnotifications.action"
class="grey">Change Notification Preferences</a>
        </div>
        <a href="https://cwiki.apache.org/confluence/display/CXF20DOC/SOAP+over+JMS+1.0+support">View
Online</a>
        |
        <a href="https://cwiki.apache.org/confluence/pages/diffpagesbyversion.action?pageId=2853910&revisedVersion=6&originalVersion=5">View
Changes</a>
                |
        <a href="https://cwiki.apache.org/confluence/display/CXF20DOC/SOAP+over+JMS+1.0+support?showComments=true&amp;showCommentArea=true#addcomment">Add
Comment</a>
            </div>
</div>
</div>
</div>
</div>
</body>
</html>

Mime
View raw message