You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by co...@apache.org on 2019/05/03 16:03:42 UTC

[cxf] branch 3.2.x-fixes updated: CXF-7885 - SOAP Action ignored by CXF JMS webservice method invoker

This is an automated email from the ASF dual-hosted git repository.

coheigea pushed a commit to branch 3.2.x-fixes
in repository https://gitbox.apache.org/repos/asf/cxf.git


The following commit(s) were added to refs/heads/3.2.x-fixes by this push:
     new 45c41ed  CXF-7885 - SOAP Action ignored by CXF JMS webservice method invoker
45c41ed is described below

commit 45c41ed27e6d6f280daed086e72e8056efa7f1de
Author: Colm O hEigeartaigh <co...@apache.org>
AuthorDate: Fri May 3 16:05:20 2019 +0100

    CXF-7885 - SOAP Action ignored by CXF JMS webservice method invoker
    
    (cherry picked from commit 083c6fa2bb4e674d263e41ac65d84ef30f21e5d2)
---
 .../soap/interceptor/SoapActionInInterceptor.java  |   7 ++
 .../soap/jms/interceptor/SoapJMSInInterceptor.java |   5 +
 .../apache/cxf/systest/jms/TwoWayJMSImplBase.java  |  10 +-
 .../cxf/systest/jms/action/JMSSoapActionTest.java  | 137 +++++++++++++++++++++
 .../Server.java}                                   |  31 +++--
 .../SoapActionGreeterImplTwoWayJMS.java}           |  13 +-
 .../jms/security/SecurityGreeterImplTwoWayJMS.java |   2 +
 .../systest/jms/security/TwoWayJMSImplBase.java    | 117 ------------------
 testutils/src/main/resources/wsdl/jms_test.wsdl    |  39 ++++++
 9 files changed, 230 insertions(+), 131 deletions(-)

diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
index 6dc5cfe..b0c2efa 100644
--- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
+++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/interceptor/SoapActionInInterceptor.java
@@ -29,6 +29,7 @@ import org.apache.cxf.binding.soap.Soap11;
 import org.apache.cxf.binding.soap.Soap12;
 import org.apache.cxf.binding.soap.SoapBindingConstants;
 import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor;
 import org.apache.cxf.binding.soap.model.SoapOperationInfo;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
@@ -111,6 +112,12 @@ public class SoapActionInInterceptor extends AbstractSoapInterceptor {
                 return ct.substring(start, end);
             }
         }
+
+        // Return the Soap Action for the JMS Case
+        if (message.containsKey(SoapJMSInInterceptor.JMS_SOAP_ACTION_VALUE)) {
+            return (String)message.get(SoapJMSInInterceptor.JMS_SOAP_ACTION_VALUE);
+        }
+
         return null;
     }
 
diff --git a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java
index 8aca871..0175d0e 100644
--- a/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java
+++ b/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java
@@ -37,6 +37,8 @@ import org.apache.cxf.phase.Phase;
  */
 public class SoapJMSInInterceptor extends AbstractSoapInterceptor {
 
+    public static final String JMS_SOAP_ACTION_VALUE = "jms.soap.action.value";
+
     public SoapJMSInInterceptor() {
         super(Phase.RECEIVE);
         addAfter(AttachmentInInterceptor.class.getName());
@@ -139,6 +141,9 @@ public class SoapJMSInInterceptor extends AbstractSoapInterceptor {
                 throw f;
             }
         }
+        if (soapAction != null) {
+            message.put(JMS_SOAP_ACTION_VALUE, soapAction);
+        }
     }
 
     /**
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/TwoWayJMSImplBase.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/TwoWayJMSImplBase.java
index c131346..cbd6abb 100644
--- a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/TwoWayJMSImplBase.java
+++ b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/TwoWayJMSImplBase.java
@@ -40,6 +40,7 @@ public class TwoWayJMSImplBase implements HelloWorldPortType {
 
     @Resource
     protected WebServiceContext wsContext;
+
     public String greetMe(String me) {
         if (me.startsWith("PauseForTwoSecs")) {
             try {
@@ -50,11 +51,16 @@ public class TwoWayJMSImplBase implements HelloWorldPortType {
             me = me.substring("PauseForTwoSecs".length()).trim();
         }
 
+        addToReply("Test_Prop", "some return value "  + me);
+
+        return "Hello " + me;
+    }
+
+    private void addToReply(String key, String value) {
         MessageContext mc = wsContext.getMessageContext();
         JMSMessageHeadersType responseHeaders =
             (JMSMessageHeadersType) mc.get(JMSConstants.JMS_SERVER_RESPONSE_HEADERS);
-        responseHeaders.putProperty("Test_Prop", "some return value "  + me);
-        return "Hello " + me;
+        responseHeaders.putProperty(key, value);
     }
 
     public String sayHi() {
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/JMSSoapActionTest.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/JMSSoapActionTest.java
new file mode 100644
index 0000000..59c39da
--- /dev/null
+++ b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/JMSSoapActionTest.java
@@ -0,0 +1,137 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.cxf.systest.jms.action;
+
+
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
+
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.ext.logging.LoggingInInterceptor;
+import org.apache.cxf.ext.logging.LoggingOutInterceptor;
+import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.hello_world_jms.HelloWorldPortType;
+import org.apache.cxf.hello_world_jms.HelloWorldService;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.testutil.common.EmbeddedJMSBrokerLauncher;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+
+
+/**
+ * Some tests for sending a SOAP Action with JMS
+ */
+public class JMSSoapActionTest extends AbstractBusClientServerTestBase {
+    public static final String PORT = allocatePort(JMSSoapActionTest.class);
+
+    private static EmbeddedJMSBrokerLauncher broker;
+    private List<String> wsdlStrings = new ArrayList<>();
+
+    @BeforeClass
+    public static void startServers() throws Exception {
+        broker = new EmbeddedJMSBrokerLauncher("tcp://localhost:" + PORT);
+        launchServer(broker);
+        launchServer(new Server(broker));
+        createStaticBus();
+    }
+
+    @Before
+    public void setUp() throws Exception {
+        assertSame(getStaticBus(), BusFactory.getThreadDefaultBus(false));
+    }
+
+    @After
+    public void tearDown() throws Exception {
+        wsdlStrings.clear();
+    }
+
+    public URL getWSDLURL(String s) throws Exception {
+        URL u = getClass().getResource(s);
+        if (u == null) {
+            throw new IllegalArgumentException("WSDL classpath resource not found " + s);
+        }
+        String wsdlString = u.toString().intern();
+        wsdlStrings.add(wsdlString);
+        broker.updateWsdl(getBus(), wsdlString);
+        return u;
+    }
+
+    @Test
+    public void testSayHi() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldServiceSoapAction");
+        QName portName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldPort");
+        URL wsdl = getWSDLURL("/wsdl/jms_test.wsdl");
+        HelloWorldService service = new HelloWorldService(wsdl, serviceName);
+
+        String response = new String("Bonjour");
+        HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class);
+
+        ClientProxy.getClient(greeter).getOutInterceptors().add(new LoggingOutInterceptor());
+        ClientProxy.getClient(greeter).getOutInterceptors().add(new LoggingInInterceptor());
+
+        ((BindingProvider)greeter).getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, "true");
+        ((BindingProvider)greeter).getRequestContext().put(
+            BindingProvider.SOAPACTION_URI_PROPERTY, "SAY_HI_1"
+        );
+
+        String reply = greeter.sayHi();
+        assertNotNull("no response received from service", reply);
+        assertEquals(response, reply);
+
+        ((java.io.Closeable)greeter).close();
+    }
+
+    @Test
+    public void testSayHi2() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldServiceSoapAction");
+        QName portName = new QName("http://cxf.apache.org/hello_world_jms", "HelloWorldPort");
+        URL wsdl = getWSDLURL("/wsdl/jms_test.wsdl");
+        HelloWorldService service = new HelloWorldService(wsdl, serviceName);
+
+        String response = new String("Bonjour2");
+        HelloWorldPortType greeter = service.getPort(portName, HelloWorldPortType.class);
+
+        ClientProxy.getClient(greeter).getOutInterceptors().add(new LoggingOutInterceptor());
+        ClientProxy.getClient(greeter).getOutInterceptors().add(new LoggingInInterceptor());
+
+        ((BindingProvider)greeter).getRequestContext().put(BindingProvider.SOAPACTION_USE_PROPERTY, "true");
+        ((BindingProvider)greeter).getRequestContext().put(
+            BindingProvider.SOAPACTION_URI_PROPERTY, "SAY_HI_2"
+        );
+
+        String reply = greeter.sayHi();
+        assertNotNull("no response received from service", reply);
+        assertEquals(response, reply);
+
+        ((java.io.Closeable)greeter).close();
+    }
+
+
+}
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/Server.java
similarity index 52%
copy from systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
copy to systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/Server.java
index dc6e3bf..8180823 100644
--- a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
+++ b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/Server.java
@@ -16,15 +16,30 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.systest.jms.security;
+package org.apache.cxf.systest.jms.action;
 
-import javax.jws.WebService;
+import javax.xml.ws.Endpoint;
 
-@WebService(serviceName = "HelloWorldService",
-            portName = "HelloWorldPort",
-            endpointInterface = "org.apache.cxf.hello_world_jms.HelloWorldPortType",
-            targetNamespace = "http://cxf.apache.org/hello_world_jms",
-            wsdlLocation = "testutils/jms_test.wsdl")
-public class SecurityGreeterImplTwoWayJMS extends TwoWayJMSImplBase {
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.testutil.common.AbstractBusTestServerBase;
+import org.apache.cxf.testutil.common.EmbeddedJMSBrokerLauncher;
+
+public class Server extends AbstractBusTestServerBase {
+    public static final String PORT = allocatePort(Server.class);
+
+    EmbeddedJMSBrokerLauncher broker;
+    public Server(EmbeddedJMSBrokerLauncher b) {
+        broker = b;
+    }
+
+    protected void run()  {
+        Bus bus = BusFactory.getDefaultBus();
+        setBus(bus);
+
+        broker.updateWsdl(bus, "testutils/jms_test.wsdl");
+
+        Endpoint.publish(null, new SoapActionGreeterImplTwoWayJMS());
+    }
 
 }
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/SoapActionGreeterImplTwoWayJMS.java
similarity index 76%
copy from systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
copy to systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/SoapActionGreeterImplTwoWayJMS.java
index dc6e3bf..5e4a491 100644
--- a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
+++ b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/action/SoapActionGreeterImplTwoWayJMS.java
@@ -16,15 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.cxf.systest.jms.security;
+package org.apache.cxf.systest.jms.action;
 
 import javax.jws.WebService;
 
-@WebService(serviceName = "HelloWorldService",
+import org.apache.cxf.systest.jms.TwoWayJMSImplBase;
+
+@WebService(serviceName = "HelloWorldServiceSoapAction",
             portName = "HelloWorldPort",
-            endpointInterface = "org.apache.cxf.hello_world_jms.HelloWorldPortType",
+            endpointInterface = "org.apache.cxf.hello_world_jms.HelloWorldSoapActionPortType",
             targetNamespace = "http://cxf.apache.org/hello_world_jms",
             wsdlLocation = "testutils/jms_test.wsdl")
-public class SecurityGreeterImplTwoWayJMS extends TwoWayJMSImplBase {
+public class SoapActionGreeterImplTwoWayJMS extends TwoWayJMSImplBase {
 
+    public String sayHi2() {
+        return "Bonjour2";
+    }
 }
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
index dc6e3bf..bf3b7e0 100644
--- a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
+++ b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/SecurityGreeterImplTwoWayJMS.java
@@ -20,6 +20,8 @@ package org.apache.cxf.systest.jms.security;
 
 import javax.jws.WebService;
 
+import org.apache.cxf.systest.jms.TwoWayJMSImplBase;
+
 @WebService(serviceName = "HelloWorldService",
             portName = "HelloWorldPort",
             endpointInterface = "org.apache.cxf.hello_world_jms.HelloWorldPortType",
diff --git a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/TwoWayJMSImplBase.java b/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/TwoWayJMSImplBase.java
deleted file mode 100644
index c35d3a4..0000000
--- a/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/security/TwoWayJMSImplBase.java
+++ /dev/null
@@ -1,117 +0,0 @@
-/**
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.cxf.systest.jms.security;
-
-import java.util.concurrent.Future;
-
-import javax.annotation.Resource;
-import javax.xml.ws.AsyncHandler;
-import javax.xml.ws.Response;
-import javax.xml.ws.WebServiceContext;
-import javax.xml.ws.handler.MessageContext;
-
-import org.apache.cxf.hello_world_jms.BadRecordLitFault;
-import org.apache.cxf.hello_world_jms.HelloWorldPortType;
-import org.apache.cxf.hello_world_jms.NoSuchCodeLitFault;
-import org.apache.cxf.hello_world_jms.types.BadRecordLit;
-import org.apache.cxf.hello_world_jms.types.ErrorCode;
-import org.apache.cxf.hello_world_jms.types.NoSuchCodeLit;
-import org.apache.cxf.hello_world_jms.types.TestRpcLitFaultResponse;
-import org.apache.cxf.transport.jms.JMSConstants;
-import org.apache.cxf.transport.jms.JMSMessageHeadersType;
-
-public class TwoWayJMSImplBase implements HelloWorldPortType {
-
-    @Resource
-    protected WebServiceContext wsContext;
-
-    public String greetMe(String me) {
-        if (me.startsWith("PauseForTwoSecs")) {
-            try {
-                Thread.sleep(2000);
-            } catch (InterruptedException e) {
-                //ignore
-            }
-            me = me.substring("PauseForTwoSecs".length()).trim();
-        }
-
-        addToReply("Test_Prop", "some return value "  + me);
-
-        return "Hello " + me;
-    }
-
-    private void addToReply(String key, String value) {
-        MessageContext mc = wsContext.getMessageContext();
-        JMSMessageHeadersType responseHeaders =
-            (JMSMessageHeadersType) mc.get(JMSConstants.JMS_SERVER_RESPONSE_HEADERS);
-        responseHeaders.putProperty(key, value);
-    }
-
-    public String sayHi() {
-        return "Bonjour";
-    }
-
-    public void greetMeOneWay(String requestType) {
-        //System.out.println("*********  greetMeOneWay: " + requestType);
-    }
-
-    public TestRpcLitFaultResponse testRpcLitFault(String faultType)
-        throws BadRecordLitFault, NoSuchCodeLitFault {
-        BadRecordLit badRecord = new BadRecordLit();
-        badRecord.setReason("BadRecordLitFault");
-        if (faultType.equals(BadRecordLitFault.class.getSimpleName())) {
-            throw new BadRecordLitFault("TestBadRecordLit", badRecord);
-        }
-        if (faultType.equals(NoSuchCodeLitFault.class.getSimpleName())) {
-            ErrorCode ec = new ErrorCode();
-            ec.setMajor((short)1);
-            ec.setMinor((short)1);
-            NoSuchCodeLit nscl = new NoSuchCodeLit();
-            nscl.setCode(ec);
-            throw new NoSuchCodeLitFault("TestNoSuchCodeLit", nscl);
-        }
-
-        return new TestRpcLitFaultResponse();
-    }
-
-    public Response<String> greetMeAsync(String stringParam0) {
-        return null;
-    }
-
-    public Future<?> greetMeAsync(String stringParam0, AsyncHandler<String> asyncHandler) {
-        return null;
-    }
-
-    public Response<String> sayHiAsync() {
-        return null;
-    }
-
-    public Future<?> sayHiAsync(AsyncHandler<String> asyncHandler) {
-        return null;
-    }
-
-    public Response<TestRpcLitFaultResponse> testRpcLitFaultAsync(String in) {
-        return null;
-    }
-
-    public Future<?> testRpcLitFaultAsync(String in, AsyncHandler<TestRpcLitFaultResponse> asyncHandler) {
-        return null;
-    }
-
-}
diff --git a/testutils/src/main/resources/wsdl/jms_test.wsdl b/testutils/src/main/resources/wsdl/jms_test.wsdl
index 87099d0..12aec18 100644
--- a/testutils/src/main/resources/wsdl/jms_test.wsdl
+++ b/testutils/src/main/resources/wsdl/jms_test.wsdl
@@ -102,6 +102,16 @@
             <fault name="BadRecordLitFault" message="tns:BadRecordLitFault"/>
         </operation>
     </portType>
+    <portType name="HelloWorldSoapActionPortType">
+        <operation name="sayHi">
+            <input message="tns:sayHi" name="sayHi"/>
+            <output message="tns:sayHiResponse" name="sayHiResponse"/>
+        </operation>
+        <operation name="sayHi2">
+            <input message="tns:sayHi" name="sayHi"/>
+            <output message="tns:sayHiResponse" name="sayHiResponse"/>
+        </operation>
+    </portType>
     <portType name="HelloWorldOneWayPort">
         <operation name="greetMeOneWay">
             <input message="tns:greetMeOneWay" name="greetMeOneWay"/>
@@ -157,6 +167,30 @@
             </fault>
         </operation>
     </binding>
+    <binding name="HelloWorldPortSoapActionBinding" type="tns:HelloWorldSoapActionPortType">
+        <soap:binding style="rpc" transport="http://www.w3.org/2010/soapjms/"/>
+        <jms:jndiURL>tcp://localhost:61500</jms:jndiURL>
+        <jms:jndiInitialContextFactory>org.apache.activemq.jndi.ActiveMQInitialContextFactory</jms:jndiInitialContextFactory>
+
+        <operation name="sayHi">
+            <soap:operation soapAction="SAY_HI_1" style="rpc"/>
+            <input name="sayHi">
+                <soap:body namespace="http://cxf.apache.org/hello_world_jms" use="literal"/>
+            </input>
+            <output name="sayHiResponse">
+                <soap:body namespace="http://cxf.apache.org/hello_world_jms" use="literal"/>
+            </output>
+        </operation>
+        <operation name="sayHi2">
+            <soap:operation soapAction="SAY_HI_2" style="rpc"/>
+            <input name="sayHi">
+                <soap:body namespace="http://cxf.apache.org/hello_world_jms" use="literal"/>
+            </input>
+            <output name="sayHiResponse">
+                <soap:body namespace="http://cxf.apache.org/hello_world_jms" use="literal"/>
+            </output>
+        </operation>
+    </binding>
     <binding name="HelloWorldQueueBinMsgBinding" type="tns:HelloWorldPortType">
         <soap:binding style="rpc" transport="http://www.w3.org/2010/soapjms/"/>
     	<jms:jndiURL>tcp://localhost:61500</jms:jndiURL>
@@ -309,6 +343,11 @@
             <soap:address location="jms:jndi:dynamicQueues/test.jmstransport.text?username=testUser&amp;password=testPassword&amp;useConduitIdSelector=false" />
         </port>
     </service>
+    <service name="HelloWorldServiceSoapAction">
+        <port binding="tns:HelloWorldPortSoapActionBinding" name="HelloWorldPort">
+            <soap:address location="jms:jndi:dynamicQueues/test.jmstransport.text?username=testUser&amp;password=testPassword&amp;useConduitIdSelector=false" />
+        </port>
+    </service>
     <service name="HelloWorldServiceAppCorrelationID">
         <port binding="tns:HelloWorldPortBinding" name="HelloWorldPortAppCorrelationIDEng">
 	        <soap:address location="jms:queue:test.jmstransport.text.app.correlation.id?replyToQueueName=test.jmstransport.text.app.correlation.id.reply" />