You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by cs...@apache.org on 2014/02/14 12:44:10 UTC

svn commit: r1568249 [1/2] - in /cxf/trunk: rt/transports/jms/ rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/ rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/ rt/transports/jms/src/main/resources/schemas/wsdl/ rt/transpo...

Author: cschneider
Date: Fri Feb 14 11:44:09 2014
New Revision: 1568249

URL: http://svn.apache.org/r1568249
Log:
CXF-5543 Refactoring JMSEndpoint to not be generated from xsd, not using vm activemq for tests as it is sometimes using kahadb

Added:
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIParser.java
      - copied, changed from r1567869, cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/URISupport.java
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/URIConfiguredConduitTest.java   (with props)
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SoapJmsSpecTest.java   (with props)
Removed:
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIConstants.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/URISupport.java
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xjb
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd
Modified:
    cxf/trunk/rt/transports/jms/pom.xml
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/UnsafeUriCharactersEncoder.java
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SOAPJMSTestSuiteTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerGzipTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSSharedQueueTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/continuations/HelloWorldContinuationsClientServerTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/continuations/HelloWorldContinuationsThrottleTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/continuations/JMSContinuationsClientServerTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/continuations/ProviderJMSContinuationTest.java
    cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/swa/ClientServerSwaTest.java
    cxf/trunk/testutils/src/main/java/org/apache/cxf/testutil/common/EmbeddedJMSBrokerLauncher.java

Modified: cxf/trunk/rt/transports/jms/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/pom.xml?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/pom.xml (original)
+++ cxf/trunk/rt/transports/jms/pom.xml Fri Feb 14 11:44:09 2014
@@ -158,14 +158,6 @@
                                     </extensionArgs>
                                 </xsdOption>
                                 <xsdOption>
-                                    <xsd>${basedir}/src/main/resources/schemas/wsdl/jms-uri.xsd</xsd>
-                                    <bindingFile>${basedir}/src/main/resources/schemas/wsdl/jms-uri.xjb</bindingFile>
-                                    <catalog>${basedir}/src/main/build-resources/catalog.cat</catalog>
-                                    <deleteDirs>
-                                        <deleteDir>${basedir}/target/generated/src/main/java/org/apache/cxf/wsdl</deleteDir>
-                                    </deleteDirs>
-                                </xsdOption>
-                                <xsdOption>
                                     <xsd>${basedir}/src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xsd</xsd>
                                     <bindingFile>${basedir}/src/main/resources/schemas/wsdl/spec/jms-spec-wsdl.xjb</bindingFile>
                                 </xsdOption>

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConfiguration.java Fri Feb 14 11:44:09 2014
@@ -49,7 +49,7 @@ public class JMSConfiguration {
     private boolean messageIdEnabled = true;
     private boolean messageTimestampEnabled = true;
     private boolean pubSubNoLocal;
-    private Long clientReceiveTimeout = 0L;
+    private Long clientReceiveTimeout = 60000L;
     private Long serverReceiveTimeout;
     private boolean explicitQosEnabled;
     private int deliveryMode = Message.DEFAULT_DELIVERY_MODE;

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java Fri Feb 14 11:44:09 2014
@@ -201,12 +201,12 @@ public final class JMSFactory {
         Session session = null;
         try {
             Connection connection = createConnection(jmsConfig);
+            connection.start();
             session = connection.createSession(jmsConfig.isSessionTransacted(), Session.AUTO_ACKNOWLEDGE);
             Destination destination = jmsConfig.getTargetDestination(session);
             MessageListenerContainer container = new MessageListenerContainer(connection, destination, listenerHandler);
             container.setMessageSelector(jmsConfig.getMessageSelector());
             container.start();
-            connection.start();
             return container;
         } catch (JMSException e) {
             throw JMSUtil.convertJmsException(e);

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSMessageUtils.java Fri Feb 14 11:44:09 2014
@@ -51,7 +51,6 @@ import org.apache.cxf.message.MessageUti
 import org.apache.cxf.security.SecurityContext;
 import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
 import org.apache.cxf.transport.jms.uri.JMSEndpoint;
-import org.apache.cxf.transport.jms.uri.JMSEndpointParser;
 import org.apache.cxf.transport.jms.util.JMSMessageConverter;
 import org.apache.cxf.transport.jms.util.JMSUtil;
 
@@ -203,8 +202,8 @@ final class JMSMessageUtils {
                 inMessage.put(org.apache.cxf.message.Message.PROTOCOL_HEADERS, headers);
             }
             try {
-                JMSEndpoint endpoint = JMSEndpointParser.createEndpoint(jmsMessage
-                    .getStringProperty(JMSSpecConstants.REQUESTURI_FIELD));
+                String requestURI = jmsMessage.getStringProperty(JMSSpecConstants.REQUESTURI_FIELD);
+                JMSEndpoint endpoint = new JMSEndpoint(requestURI);
                 if (endpoint.getParameter(JMSSpecConstants.TARGETSERVICE_PARAMETER_NAME) != null) {
                     headers.put(JMSSpecConstants.TARGET_SERVICE_IN_REQUESTURI,
                                 Collections.singletonList("true"));

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSOldConfigHolder.java Fri Feb 14 11:44:09 2014
@@ -30,15 +30,12 @@ import javax.naming.Context;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.logging.LogUtils;
-import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.configuration.Configurer;
 import org.apache.cxf.service.model.BindingInfo;
 import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.service.model.ServiceInfo;
 import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
 import org.apache.cxf.transport.jms.uri.JMSEndpoint;
-import org.apache.cxf.transport.jms.uri.JMSEndpointParser;
-import org.apache.cxf.transport.jms.uri.JMSURIConstants;
 import org.apache.cxf.transport.jms.util.JMSDestinationResolver;
 import org.apache.cxf.transport.jms.util.JndiHelper;
 import org.apache.cxf.transport.jms.wsdl.DeliveryModeType;
@@ -131,9 +128,7 @@ public class JMSOldConfigHolder {
         JMSEndpoint endpoint = null;
         String adr = target == null ? endpointInfo.getAddress() : target.getAddress().getValue();
         try {           
-            endpoint = StringUtils.isEmpty(adr) || "jms://".equals(adr) || !adr.startsWith("jms") 
-                ?  new JMSEndpoint()
-                : JMSEndpointParser.createEndpoint(adr);                
+            endpoint = new JMSEndpoint(adr);
         } catch (RuntimeException ex) {
             throw ex;
         } catch (Exception e) {
@@ -195,21 +190,16 @@ public class JMSOldConfigHolder {
             jmsConfig = new JMSConfiguration();
         }
 
-        if (endpoint.isSetDeliveryMode()) {
-            int deliveryMode = endpoint.getDeliveryMode()
-                .equals(JMSURIConstants.DELIVERYMODE_PERSISTENT)
-                ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT;
-            jmsConfig.setDeliveryMode(deliveryMode);
-        }
+        int deliveryMode = endpoint.getDeliveryMode() 
+            == org.apache.cxf.transport.jms.uri.JMSEndpoint.DeliveryModeType.PERSISTENT
+            ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT;
+        jmsConfig.setDeliveryMode(deliveryMode);
 
-        if (endpoint.isSetPriority()) {
-            int priority = endpoint.getPriority();
-            jmsConfig.setPriority(priority);
-        }
+        jmsConfig.setPriority(endpoint.getPriority());
 
         if (jmsConfig.isUsingEndpointInfo()) {
             JndiHelper jt = new JndiHelper(JMSOldConfigHolder.getInitialContextEnv(endpoint));
-            boolean pubSubDomain = endpoint.getJmsVariant().contains(JMSURIConstants.TOPIC);
+            boolean pubSubDomain = endpoint.getJmsVariant().contains(JMSEndpoint.TOPIC);
             JNDIConfiguration jndiConfig = new JNDIConfiguration();
             jndiConfig.setJndiConnectionFactoryName(endpoint.getJndiConnectionFactoryName());
             jmsConfig.setJndiTemplate(jt);
@@ -218,9 +208,7 @@ public class JMSOldConfigHolder {
             jndiConfig.setConnectionPassword(endpoint.getPassword());
 
             jmsConfig.setJndiConfig(jndiConfig);
-            if (endpoint.isSetReconnectOnException()) {
-                jmsConfig.setReconnectOnException(endpoint.isReconnectOnException());
-            }
+            jmsConfig.setReconnectOnException(endpoint.isReconnectOnException());
             jmsConfig.setDurableSubscriptionName(serverBehavior.getDurableSubscriberName());
             jmsConfig.setExplicitQosEnabled(true);
             if (jmsConfig.getMessageSelector() == null) {
@@ -262,17 +250,11 @@ public class JMSOldConfigHolder {
             if (sessionPool.isSetLowWaterMark()) {
                 jmsConfig.setConcurrentConsumers(sessionPool.getLowWaterMark());
             }
-            if (endpoint.isSetTimeToLive()) {
-                long timeToLive = endpoint.getTimeToLive();
-                jmsConfig.setTimeToLive(timeToLive);
-            }
-            if (endpoint.isSetUseJMS11()) {
-                LOG.log(Level.WARNING, "Use of jms:endpoint[@useJms11] is no longer supported");
-            }
+            jmsConfig.setTimeToLive(endpoint.getTimeToLive());
             if (serverBehavior.isSetTransactional()) {
                 jmsConfig.setSessionTransacted(serverBehavior.isTransactional());
             }
-            boolean useJndi = endpoint.getJmsVariant().contains(JMSURIConstants.JNDI);
+            boolean useJndi = endpoint.getJmsVariant().contains(JMSEndpoint.JNDI);
             if (useJndi) {
                 // Setup Destination jndi destination resolver
                 final JMSDestinationResolver jndiDestinationResolver = new JMSDestinationResolver();
@@ -314,9 +296,9 @@ public class JMSOldConfigHolder {
     private static void mapAddressToEndpoint(AddressType address, JMSEndpoint endpoint) {
         boolean pubSubDomain = DestinationStyleType.TOPIC == address.getDestinationStyle();
         if (address.isSetDestinationStyle()) {
-            endpoint.setJmsVariant(pubSubDomain ? JMSURIConstants.TOPIC : JMSURIConstants.QUEUE);
+            endpoint.setJmsVariant(pubSubDomain ? JMSEndpoint.TOPIC : JMSEndpoint.QUEUE);
         } else {
-            endpoint.setJmsVariant(JMSURIConstants.QUEUE);
+            endpoint.setJmsVariant(JMSEndpoint.QUEUE);
         }
         if (address.isSetJndiConnectionFactoryName()) {
             endpoint.setJndiConnectionFactoryName(address.getJndiConnectionFactoryName());
@@ -335,7 +317,7 @@ public class JMSOldConfigHolder {
         }
         boolean useJndi = address.isSetJndiDestinationName();
         if (useJndi) {
-            endpoint.setJmsVariant(pubSubDomain ? JMSURIConstants.JNDI_TOPIC : JMSURIConstants.JNDI);
+            endpoint.setJmsVariant(pubSubDomain ? JMSEndpoint.JNDI_TOPIC : JMSEndpoint.JNDI);
             endpoint.setDestinationName(address.getJndiDestinationName());
             endpoint.setReplyToName(address.getJndiReplyDestinationName());
         } else {
@@ -366,14 +348,14 @@ public class JMSOldConfigHolder {
                                               jndiContextParameterType.getValue().trim());
         }
         
-        if (!endpoint.isSetJndiConnectionFactoryName()) {
+        if (endpoint.getJndiConnectionFactoryName() == null) {
             JndiConnectionFactoryNameType jndiConnectionFactoryNameType = getWSDLExtensor(
                 ei, JndiConnectionFactoryNameType.class);
             if (jndiConnectionFactoryNameType != null) {
                 endpoint.setJndiConnectionFactoryName(jndiConnectionFactoryNameType.getValue().trim());
             }
         }
-        if (!endpoint.isSetJndiInitialContextFactory()) {
+        if (endpoint.getJndiInitialContextFactory() == null) {
             JndiInitialContextFactoryType jndiInitialContextFactoryType = 
                 getWSDLExtensor(ei, JndiInitialContextFactoryType.class);
             if (jndiInitialContextFactoryType != null) {
@@ -381,7 +363,7 @@ public class JMSOldConfigHolder {
             }
         }
         
-        if (!endpoint.isSetJndiURL()) {
+        if (endpoint.getJndiURL() == null) {
             JndiURLType jndiURLType = getWSDLExtensor(ei, JndiURLType.class);
             if (jndiURLType != null) {
                 endpoint.setJndiURL(jndiURLType.getValue().trim());
@@ -392,7 +374,7 @@ public class JMSOldConfigHolder {
             DeliveryModeType deliveryModeType = getWSDLExtensor(ei, DeliveryModeType.class);
             if (deliveryModeType != null) {
                 String deliveryMode = deliveryModeType.getValue().trim();
-                endpoint.setDeliveryMode(org.apache.cxf.transport.jms.uri.DeliveryModeType
+                endpoint.setDeliveryMode(org.apache.cxf.transport.jms.uri.JMSEndpoint.DeliveryModeType
                     .valueOf(deliveryMode));
             }
         }
@@ -404,21 +386,21 @@ public class JMSOldConfigHolder {
             }
         }
         
-        if (!endpoint.isSetTimeToLive()) {
+        if (endpoint.getTimeToLive() == 0) {
             TimeToLiveType timeToLiveType = getWSDLExtensor(ei, TimeToLiveType.class);
             if (timeToLiveType != null) {
                 endpoint.setTimeToLive(timeToLiveType.getValue()); 
             }
         }
         
-        if (!endpoint.isSetReplyToName()) {
+        if (endpoint.getReplyToName() == null) {
             ReplyToNameType replyToNameType = getWSDLExtensor(ei, ReplyToNameType.class);
             if (replyToNameType != null) {
                 endpoint.setReplyToName(replyToNameType.getValue());
             }
         }
         
-        if (!endpoint.isSetTopicReplyToName()) {
+        if (endpoint.getTopicReplyToName() == null) {
             TopicReplyToNameType topicReplyToNameType = getWSDLExtensor(ei, TopicReplyToNameType.class);
             if (topicReplyToNameType != null) {
                 endpoint.setTopicReplyToName(topicReplyToNameType.getValue());
@@ -449,10 +431,10 @@ public class JMSOldConfigHolder {
     
     public static Properties getInitialContextEnv(JMSEndpoint endpoint) {
         Properties env = new Properties();
-        if (endpoint.isSetJndiInitialContextFactory()) {
+        if (endpoint.getJndiInitialContextFactory() != null) {
             env.put(Context.INITIAL_CONTEXT_FACTORY, endpoint.getJndiInitialContextFactory());
         }
-        if (endpoint.isSetJndiURL()) {
+        if (endpoint.getJndiURL() != null) {
             env.put(Context.PROVIDER_URL, endpoint.getJndiURL());
         }
         for (Map.Entry<String, String> ent : endpoint.getJndiParameters().entrySet()) {

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java Fri Feb 14 11:44:09 2014
@@ -22,31 +22,165 @@ package org.apache.cxf.transport.jms.uri
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.jms.Message;
+
+import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
 
 /**
  * 
  */
-public class JMSEndpoint extends JMSEndpointType {
+public class JMSEndpoint {
+    public static final String JNDI = "jndi";
+    public static final String TOPIC = "topic";
+    public static final String QUEUE = "queue";
+    public static final String JNDI_TOPIC = "jndi-topic";
+
+    // shared parameters
+    public static final String DELIVERYMODE_PARAMETER_NAME = "deliveryMode";
+    public static final String TIMETOLIVE_PARAMETER_NAME = "timeToLive";
+    public static final String PRIORITY_PARAMETER_NAME = "priority";
+    public static final String REPLYTONAME_PARAMETER_NAME = "replyToName";
+    // The new configuration to set the message type of jms message body
+    public static final String MESSAGE_TYPE_PARAMETER_NAME = "messageType";
+
+    // default parameters
+    public static final DeliveryModeType DELIVERYMODE_DEFAULT = DeliveryModeType.PERSISTENT;
+    public static final long TIMETOLIVE_DEFAULT = Message.DEFAULT_TIME_TO_LIVE;
+    public static final int PRIORITY_DEFAULT = Message.DEFAULT_PRIORITY;
+
+    // jndi parameters ? need to be sure.
+    public static final String JNDICONNECTIONFACTORYNAME_PARAMETER_NAME = "jndiConnectionFactoryName";
+    public static final String JNDIINITIALCONTEXTFACTORY_PARAMETER_NAME = "jndiInitialContextFactory";
+    public static final String JNDIURL_PARAMETER_NAME = "jndiURL";
+    public static final String JNDI_PARAMETER_NAME_PREFIX = "jndi-";
+
+    // queue and topic parameters
+    public static final String TOPICREPLYTONAME_PARAMETER_NAME = "topicReplyToName";
+    
     Map<String, String> jndiParameters = new HashMap<String, String>();
     Map<String, String> parameters = new HashMap<String, String>();
+    
+    private String endpointUri;
+    private String jmsVariant;
+    private String destinationName;
+    private DeliveryModeType deliveryMode;
+    private MessageType messageType;
+    private long timeToLive;
+    private Integer priority;
+    private String replyToName;
+    private String topicReplyToName;
+    private String jndiConnectionFactoryName;
+    private String jndiInitialContextFactory;
+    private String jndiURL;
+    private String username;
+    private String password;
+    private boolean reconnectOnException = true;
 
     /**
      * @param uri
      * @param subject
      */
-    public JMSEndpoint(String endpointUri, String jmsVariant, String destinationName) {
-        this.endpointUri = endpointUri;
-        this.jmsVariant = jmsVariant;
-        this.destinationName = destinationName;
+    public JMSEndpoint(String endpointUri) {
+        this();
+        if (!(StringUtils.isEmpty(endpointUri) || "jms://".equals(endpointUri) || !endpointUri.startsWith("jms"))) {
+            this.endpointUri = endpointUri;
+            JMSURIParser parsed = new JMSURIParser(endpointUri);
+            setJmsVariant(parsed.getVariant());
+            this.destinationName = parsed.getDestination();
+            configureProperties(this, parsed.parseQuery());
+        }
     }
+    
     public JMSEndpoint() {
-        jmsVariant = JMSURIConstants.QUEUE;
+        this.jmsVariant = JMSEndpoint.QUEUE;
+    }
+
+    /**
+     * @param endpoint
+     * @param params
+     */
+    private static void configureProperties(JMSEndpoint endpoint, Map<String, String> params) {
+        String deliveryMode = getAndRemoveParameter(params,
+                                                    JMSEndpoint.DELIVERYMODE_PARAMETER_NAME);
+        String timeToLive = getAndRemoveParameter(params,
+                                                  JMSEndpoint.TIMETOLIVE_PARAMETER_NAME);
+        String priority = getAndRemoveParameter(params, JMSEndpoint.PRIORITY_PARAMETER_NAME);
+        String replyToName = getAndRemoveParameter(params,
+                                                   JMSEndpoint.REPLYTONAME_PARAMETER_NAME);
+        String topicReplyToName = getAndRemoveParameter(params,
+                                                   JMSEndpoint.TOPICREPLYTONAME_PARAMETER_NAME);
+        String jndiConnectionFactoryName = getAndRemoveParameter(
+                                                                 params,
+                                                JMSEndpoint.JNDICONNECTIONFACTORYNAME_PARAMETER_NAME);
+        String jndiInitialContextFactory = getAndRemoveParameter(
+                                                                 params,
+                                                JMSEndpoint.JNDIINITIALCONTEXTFACTORY_PARAMETER_NAME);
+        String jndiUrl = getAndRemoveParameter(params, JMSEndpoint.JNDIURL_PARAMETER_NAME);
+
+        String messageType = getAndRemoveParameter(params, JMSEndpoint.MESSAGE_TYPE_PARAMETER_NAME);
+        
+        if (deliveryMode != null) {
+            endpoint.setDeliveryMode(DeliveryModeType.valueOf(deliveryMode));
+        }
+        if (timeToLive != null) {
+            endpoint.setTimeToLive(Long.valueOf(timeToLive));
+        }
+        if (priority != null) {
+            endpoint.setPriority(Integer.valueOf(priority));
+        }
+        if (replyToName != null && topicReplyToName != null) {
+            throw new IllegalArgumentException(
+                "The replyToName and topicReplyToName should not be defined at the same time.");
+        }
+        if (replyToName != null) {
+            endpoint.setReplyToName(replyToName);
+        }
+        if (topicReplyToName != null) {
+            endpoint.setTopicReplyToName(topicReplyToName);
+        }
+        if (jndiConnectionFactoryName != null) {
+            endpoint.setJndiConnectionFactoryName(jndiConnectionFactoryName);
+        }
+        if (jndiInitialContextFactory != null) {
+            endpoint.setJndiInitialContextFactory(jndiInitialContextFactory);
+        }
+        if (jndiUrl != null) {
+            endpoint.setJndiURL(jndiUrl);
+        }
+        if (messageType != null) {
+            endpoint.setMessageType(MessageType.fromValue(messageType));
+        }
+
+        for (String key : params.keySet()) {
+            String value = params.get(key);
+            if (value == null || value.equals("")) {
+                continue;
+            }
+            if (key.startsWith(JMSEndpoint.JNDI_PARAMETER_NAME_PREFIX)) {
+                key = key.substring(5);
+                endpoint.putJndiParameter(key, value);
+            } else {
+                endpoint.putParameter(key, value);
+            }
+        }
+    }
+
+    /**
+     * @param parameters
+     * @param deliverymodeParameterName
+     * @return
+     */
+    private static String getAndRemoveParameter(Map<String, String> parameters,
+                                                String parameterName) {
+        String value = parameters.get(parameterName);
+        parameters.remove(parameterName);
+        return value;
     }
 
     public String getRequestURI() {
         StringBuilder requestUri = new StringBuilder("jms:");
-        if (jmsVariant == JMSURIConstants.JNDI_TOPIC) {
+        if (jmsVariant == JNDI_TOPIC) {
             requestUri.append("jndi");
         } else {
             requestUri.append(jmsVariant);
@@ -57,7 +191,7 @@ public class JMSEndpoint extends JMSEndp
             // now we just skip the MESSAGE_TYPE_PARAMETER_NAME 
             // and TARGETSERVICE_PARAMETER_NAME
             if (JMSSpecConstants.TARGETSERVICE_PARAMETER_NAME.equals(key) 
-                || JMSURIConstants.MESSAGE_TYPE_PARAMETER_NAME.equals(key)) {
+                || MESSAGE_TYPE_PARAMETER_NAME.equals(key)) {
                 continue;
             }
             String value = parameters.get(key);
@@ -101,4 +235,133 @@ public class JMSEndpoint extends JMSEndp
     public Map<String, String> getParameters() {
         return parameters;
     }
+
+    public String getEndpointUri() {
+        return endpointUri;
+    }
+    public void setEndpointUri(String endpointUri) {
+        this.endpointUri = endpointUri;
+    }
+    public String getJmsVariant() {
+        return jmsVariant;
+    }
+    public void setJmsVariant(String jmsVariant) {
+        if (jmsVariant == null) {
+            this.jmsVariant = QUEUE;
+        }
+        if (!(QUEUE.equals(jmsVariant) || TOPIC.equals(jmsVariant)
+            || JNDI.equals(jmsVariant) || JNDI_TOPIC.equals(jmsVariant))) {
+            throw new IllegalArgumentException("Unknow JMS Variant " + jmsVariant);
+        }
+        this.jmsVariant = jmsVariant;
+    }
+    public String getDestinationName() {
+        return destinationName;
+    }
+    public void setDestinationName(String destinationName) {
+        this.destinationName = destinationName;
+    }
+    public boolean isSetDeliveryMode() {
+        return deliveryMode != null;
+    }
+    public DeliveryModeType getDeliveryMode() {
+        return deliveryMode == null ? DeliveryModeType.PERSISTENT : deliveryMode;
+    }
+    public void setDeliveryMode(DeliveryModeType deliveryMode) {
+        this.deliveryMode = deliveryMode;
+    }
+    public MessageType getMessageType() {
+        return messageType == null ? MessageType.BYTE : messageType;
+    }
+    public void setMessageType(MessageType messageType) {
+        this.messageType = messageType;
+    }
+    public long getTimeToLive() {
+        return timeToLive;
+    }
+    public void setTimeToLive(long timeToLive) {
+        this.timeToLive = timeToLive;
+    }
+    public boolean isSetPriority() {
+        return priority != null;
+    }
+    public int getPriority() {
+        return priority == null ?  Message.DEFAULT_PRIORITY : priority;
+    }
+    public void setPriority(int priority) {
+        this.priority = priority;
+    }
+    public String getReplyToName() {
+        return replyToName;
+    }
+    public void setReplyToName(String replyToName) {
+        this.replyToName = replyToName;
+    }
+    public String getTopicReplyToName() {
+        return topicReplyToName;
+    }
+    public void setTopicReplyToName(String topicReplyToName) {
+        this.topicReplyToName = topicReplyToName;
+    }
+    public String getJndiConnectionFactoryName() {
+        return jndiConnectionFactoryName;
+    }
+    public void setJndiConnectionFactoryName(String jndiConnectionFactoryName) {
+        this.jndiConnectionFactoryName = jndiConnectionFactoryName;
+    }
+    public String getJndiInitialContextFactory() {
+        return jndiInitialContextFactory;
+    }
+    public void setJndiInitialContextFactory(String jndiInitialContextFactory) {
+        this.jndiInitialContextFactory = jndiInitialContextFactory;
+    }
+    public String getJndiURL() {
+        return jndiURL;
+    }
+    public void setJndiURL(String jndiURL) {
+        this.jndiURL = jndiURL;
+    }
+    public String getUsername() {
+        return username;
+    }
+    public void setUsername(String username) {
+        this.username = username;
+    }
+    public String getPassword() {
+        return password;
+    }
+    public void setPassword(String password) {
+        this.password = password;
+    }
+    public boolean isReconnectOnException() {
+        return reconnectOnException;
+    }
+    public void setReconnectOnException(boolean reconnectOnException) {
+        this.reconnectOnException = reconnectOnException;
+    }
+    public enum DeliveryModeType { PERSISTENT, NON_PERSISTENT };
+    
+    public enum MessageType {
+        BYTE("byte"),
+        BINARY("binary"),
+        TEXT("text");
+        private final String value;
+
+        MessageType(String v) {
+            value = v;
+        }
+
+        public String value() {
+            return value;
+        }
+
+        public static MessageType fromValue(String v) {
+            for (MessageType c: MessageType.values()) {
+                if (c.value.equals(v)) {
+                    return c;
+                }
+            }
+            throw new IllegalArgumentException(v);
+        }
+    }
 }

Copied: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIParser.java (from r1567869, cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/URISupport.java)
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIParser.java?p2=cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIParser.java&p1=cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/URISupport.java&r1=1567869&r2=1568249&rev=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/URISupport.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIParser.java Fri Feb 14 11:44:09 2014
@@ -19,276 +19,98 @@
 package org.apache.cxf.transport.jms.uri;
 
 import java.io.UnsupportedEncodingException;
-import java.net.URI;
-import java.net.URISyntaxException;
 import java.net.URLDecoder;
-import java.net.URLEncoder;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.logging.Level;
+import java.util.logging.Logger;
 
+import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 
 /**
- * URI utilities.
- *
+ * Unfortunately soap/jms URIs are not recognized correctly in URI.
+ * So this class is specialized on parsing jms uris into their parts
  */
-public final class URISupport {
+final class JMSURIParser {
+    private static final Logger LOG = LogUtils.getL7dLogger(JMSURIParser.class);
     
-    private URISupport() {
-        // Helper class
-    }
-
-    /**
-     * Holder to get parts of the URI.
-     */
-    public static class CompositeData {
-        private String host;
-
-        private String scheme;
-        private String path;
-        private URI components[];
-        private Map<String, String> parameters;
-        private String fragment;
-
-        public URI[] getComponents() {
-            return components;
-        }
-
-        public String getFragment() {
-            return fragment;
-        }
-
-        public Map<String, String> getParameters() {
-            return parameters;
-        }
-
-        public String getScheme() {
-            return scheme;
-        }
-
-        public String getPath() {
-            return path;
-        }
-
-        public String getHost() {
-            return host;
-        }
-
-        public URI toURI() throws URISyntaxException {
-            StringBuilder sb = new StringBuilder();
-            if (scheme != null) {
-                sb.append(scheme);
-                sb.append(':');
-            }
-
-            if (host != null && host.length() != 0) {
-                sb.append(host);
-            } else if (components != null) {
-                sb.append('(');
-                for (int i = 0; i < components.length; i++) {
-                    if (i != 0) {
-                        sb.append(',');
-                    }
-                    sb.append(components[i].toString());
-                }
-                sb.append(')');
-            }
-
-            if (path != null) {
-                sb.append('/');
-                sb.append(path);
-            }
-            if (!parameters.isEmpty()) {
-                sb.append("?");
-                sb.append(createQueryString(parameters));
-            }
-            if (fragment != null) {
-                sb.append("#");
-                sb.append(fragment);
-            }
-            return new URI(sb.toString());
-        }
-    }
-
-    public static Map<String, String> parseQuery(String uri) throws URISyntaxException {
-        try {
-            Map<String, String> rc = new HashMap<String, String>();
-            if (uri != null) {
-                String[] parameters = StringUtils.split(uri, "&");
-                for (String parameter : parameters) {
-                    int p = parameter.indexOf("=");
-                    if (p >= 0) {
-                        String name = URLDecoder.decode(parameter.substring(0, p), "UTF-8");
-                        String value = URLDecoder.decode(parameter.substring(p + 1), "UTF-8");
-                        rc.put(name, value);
-                    } else {
-                        rc.put(parameter, null);
-                    }
-                }
-            }
-            return rc;
-        } catch (UnsupportedEncodingException e) {
-            URISyntaxException se = new URISyntaxException(e.toString(), "Invalid encoding");
-            se.initCause(e);
-            throw se;
-        }
-    }
-
-    public static Map<String, String> parseParameters(URI uri) throws URISyntaxException {
-        String query = uri.getQuery();
-        if (query == null) {
-            String schemeSpecificPart = uri.getSchemeSpecificPart();
-            int idx = schemeSpecificPart.lastIndexOf('?');
-            if (idx < 0) {
-                return Collections.emptyMap();
-            } else {
-                query = schemeSpecificPart.substring(idx + 1);
-            }
+    String uri;
+    int pos;
+    private String scheme;
+    private String variant;
+    private String destination;
+    private String query;
+    
+    public JMSURIParser(String uri) {
+        this.uri = UnsafeUriCharactersEncoder.encode(uri);
+        this.scheme = parseUntil(":");
+        this.variant = parseUntil(":");
+        this.destination = parseUntil("?");
+        String rest = parseToEnd();
+        if (this.destination == null) {
+            this.destination = rest;
+            this.query = null;
         } else {
-            query = stripPrefix(query, "?");
+            this.query = rest;
         }
-        return parseQuery(query);
+        LOG.log(Level.FINE, "Creating endpoint uri=[" + uri + "], destination=[" + destination
+                + "], query=[" + query + "]");
     }
-
-    /**
-     * Removes any URI query from the given uri
-     */
-    public static URI removeQuery(URI uri) throws URISyntaxException {
-        return createURIWithQuery(uri, null);
-    }
-
-    /**
-     * Creates a URI with the given query
-     */
-    public static URI createURIWithQuery(URI uri, String query) throws URISyntaxException {
-        return new URI(uri.getScheme(), uri.getUserInfo(), uri.getHost(), uri.getPort(), uri.getPath(),
-                       query, uri.getFragment());
-    }
-
-    public static CompositeData parseComposite(URI uri) throws URISyntaxException {
-
-        CompositeData rc = new CompositeData();
-        rc.scheme = uri.getScheme();
-        String ssp = stripPrefix(uri.getSchemeSpecificPart().trim(), "//").trim();
-
-        parseComposite(uri, rc, ssp);
-
-        rc.fragment = uri.getFragment();
-        return rc;
+    
+    private String parseToEnd() {
+        return uri.substring(pos, uri.length());
     }
 
-    private static void parseComposite(URI uri, CompositeData rc, String ssp) throws URISyntaxException {
-        String params;
-
-        if (!checkParenthesis(ssp)) {
-            throw new URISyntaxException(uri.toString(), "Not a matching number of '(' and ')' parenthesis");
-        }
-
-        int p;
-        int intialParen = ssp.indexOf("(");
-        if (intialParen == 0) {
-            rc.host = ssp.substring(0, intialParen);
-            p = rc.host.indexOf("/");
-            if (p >= 0) {
-                rc.path = rc.host.substring(p);
-                rc.host = rc.host.substring(0, p);
-            }
-            p = ssp.lastIndexOf(")");
-            params = ssp.substring(p + 1).trim();
+    private String parseUntil(String separator) {
+        int separatorPos = uri.indexOf(separator, pos);
+        if (separatorPos != -1) {
+            String found = uri.substring(pos, separatorPos);
+            pos = separatorPos + 1;
+            return found;
         } else {
-            params = "";
-        }
-
-        p = params.indexOf("?");
-        if (p >= 0) {
-            if (p > 0) {
-                rc.path = stripPrefix(params.substring(0, p), "/");
-            }
-            rc.parameters = parseQuery(params.substring(p + 1));
-        } else {
-            if (params.length() > 0) {
-                rc.path = stripPrefix(params, "/");
-            }
-            rc.parameters = Collections.emptyMap();
+            return null;
         }
     }
 
-    public static String stripPrefix(String value, String prefix) {
-        if (value.startsWith(prefix)) {
-            return value.substring(prefix.length());
+    public Map<String, String> parseQuery() {
+        Map<String, String> rc = new HashMap<String, String>();
+        if (query != null) {
+            String[] parameters = StringUtils.split(query, "&");
+            for (String parameter : parameters) {
+                int p = parameter.indexOf("=");
+                if (p >= 0) {
+                    String name = urldecode(parameter.substring(0, p));
+                    String value = urldecode(parameter.substring(p + 1));
+                    rc.put(name, value);
+                } else {
+                    rc.put(parameter, null);
+                }
+            }
         }
-        return value;
-    }
+        return rc;
 
-    public static URI stripScheme(URI uri) throws URISyntaxException {
-        return new URI(stripPrefix(uri.getSchemeSpecificPart().trim(), "//"));
     }
-
-    public static String createQueryString(Map<String, String> options) throws URISyntaxException {
+    
+    private static String urldecode(String s) {
         try {
-            if (options.size() > 0) {
-                StringBuilder rc = new StringBuilder();
-                boolean first = true;
-                for (String key : options.keySet()) {
-                    if (first) {
-                        first = false;
-                    } else {
-                        rc.append("&");
-                    }
-
-                    String value = options.get(key);
-                    rc.append(URLEncoder.encode(key, "UTF-8"));
-                    rc.append("=");
-                    rc.append(URLEncoder.encode(value, "UTF-8"));
-                }
-                return rc.toString();
-            } else {
-                return "";
-            }
+            return URLDecoder.decode(s, "UTF-8");
         } catch (UnsupportedEncodingException e) {
-            URISyntaxException se = new URISyntaxException(e.toString(), "Invalid encoding");
-            se.initCause(e);
-            throw se;
+            throw new IllegalArgumentException("Encoding UTF-8 not supported");
         }
     }
 
-    /**
-     * Creates a URI from the original URI and the remaining parameters
-     */
-    public static URI createRemainingURI(URI originalURI, Map<String, String> params) 
-        throws URISyntaxException {
-        String s = createQueryString(params);
-        if (s.length() == 0) {
-            s = null;
-        }
-        return createURIWithQuery(originalURI, s);
+    public String getScheme() {
+        return scheme;
     }
 
-    public static URI changeScheme(URI bindAddr, String scheme) throws URISyntaxException {
-        return new URI(scheme, bindAddr.getUserInfo(), bindAddr.getHost(), bindAddr.getPort(), bindAddr
-            .getPath(), bindAddr.getQuery(), bindAddr.getFragment());
+    public String getVariant() {
+        return variant;
     }
 
-    public static boolean checkParenthesis(String str) {
-        boolean result = true;
-        if (str != null) {
-            int open = 0;
-            int closed = 0;
-
-            int i = 0;
-            while ((i = str.indexOf('(', i)) >= 0) {
-                i++;
-                open++;
-            }
-            i = 0;
-            while ((i = str.indexOf(')', i)) >= 0) {
-                i++;
-                closed++;
-            }
-            result = open == closed;
-        }
-        return result;
+    public String getDestination() {
+        return destination;
     }
-   
+
+    
 }

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/UnsafeUriCharactersEncoder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/UnsafeUriCharactersEncoder.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/UnsafeUriCharactersEncoder.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/UnsafeUriCharactersEncoder.java Fri Feb 14 11:44:09 2014
@@ -28,7 +28,7 @@ import org.apache.cxf.common.logging.Log
 /**
  * Encoder for unsafe URI characters.
  */
-public final class UnsafeUriCharactersEncoder {
+final class UnsafeUriCharactersEncoder {
     private static BitSet unsafeCharacters;
     private static final Logger LOG = LogUtils.getL7dLogger(UnsafeUriCharactersEncoder.class);
     private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C',

Modified: cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java (original)
+++ cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java Fri Feb 14 11:44:09 2014
@@ -21,6 +21,7 @@ package org.apache.cxf.transport.jms.uri
 
 import java.util.Map;
 
+import org.apache.cxf.transport.jms.uri.JMSEndpoint.DeliveryModeType;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -28,18 +29,18 @@ public class JMSEndpointTest extends Ass
 
     @Test
     public void testBasicQueue() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
-        assertEquals(endpoint.getDestinationName(), "Foo.Bar");
-        assertEquals(endpoint.getJmsVariant(), JMSURIConstants.QUEUE);
+        JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
+        assertEquals("Foo.Bar", endpoint.getDestinationName());
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
     }
 
     @Test
     public void testQueueParameters() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar?foo=bar&foo2=bar2");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?foo=bar&foo2=bar2");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
         assertEquals(endpoint.getDestinationName(), "Foo.Bar");
-        assertEquals(endpoint.getJmsVariant(), JMSURIConstants.QUEUE);
+        assertEquals(endpoint.getJmsVariant(), JMSEndpoint.QUEUE);
         assertEquals(endpoint.getParameters().size(), 2);
         assertEquals(endpoint.getParameter("foo"), "bar");
         assertEquals(endpoint.getParameter("foo2"), "bar2");
@@ -47,16 +48,16 @@ public class JMSEndpointTest extends Ass
 
     @Test
     public void testBasicTopic() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:topic:Foo.Bar");
-        assertEquals(JMSURIConstants.TOPIC, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:topic:Foo.Bar");
+        assertEquals(JMSEndpoint.TOPIC, endpoint.getJmsVariant());
         assertEquals(endpoint.getDestinationName(), "Foo.Bar");
-        assertEquals(endpoint.getJmsVariant(), JMSURIConstants.TOPIC);
+        assertEquals(endpoint.getJmsVariant(), JMSEndpoint.TOPIC);
     }
 
     @Test
     public void testTopicParameters() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:topic:Foo.Bar?foo=bar&foo2=bar2");
-        assertEquals(JMSURIConstants.TOPIC, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:topic:Foo.Bar?foo=bar&foo2=bar2");
+        assertEquals(JMSEndpoint.TOPIC, endpoint.getJmsVariant());
         assertEquals(endpoint.getParameters().size(), 2);
         assertEquals(endpoint.getParameter("foo"), "bar");
         assertEquals(endpoint.getParameter("foo2"), "bar2");
@@ -64,19 +65,19 @@ public class JMSEndpointTest extends Ass
 
     @Test
     public void testBasicJNDI() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:jndi:Foo.Bar");
-        assertEquals(JMSURIConstants.JNDI, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar");
+        assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
         assertEquals(endpoint.getDestinationName(), "Foo.Bar");
-        assertEquals(endpoint.getJmsVariant(), JMSURIConstants.JNDI);
+        assertEquals(endpoint.getJmsVariant(), JMSEndpoint.JNDI);
     }
 
     @Test
     public void testJNDIParameters() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
-                                               + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
-                                               + "&jndiConnectionFactoryName=ConnectionFactory"
-                                               + "&jndiURL=tcp://localhost:61616");
-        assertEquals(JMSURIConstants.JNDI, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
+            + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+            + "&jndiConnectionFactoryName=ConnectionFactory"
+            + "&jndiURL=tcp://localhost:61616");
+        assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
         assertEquals(endpoint.getParameters().size(), 0);
         assertEquals(endpoint.getDestinationName(), "Foo.Bar");
         assertEquals(endpoint.getJndiInitialContextFactory(),
@@ -88,19 +89,19 @@ public class JMSEndpointTest extends Ass
     
     @Test
     public void testReplyToNameParameters() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
         assertEquals("Foo.Bar", endpoint.getDestinationName());
         assertNull(endpoint.getTopicReplyToName());
         assertEquals("FOO.Tar", endpoint.getReplyToName());
         try {
-            resolveEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar&topicReplyToName=FOO.Zar");
+            new JMSEndpoint("jms:queue:Foo.Bar?replyToName=FOO.Tar&topicReplyToName=FOO.Zar");
             fail("Expecting exception here");
         } catch (IllegalArgumentException ex) {
             // expect the exception
         }
         
-        endpoint = resolveEndpoint("jms:queue:Foo.Bar?topicReplyToName=FOO.Zar");
+        endpoint = new JMSEndpoint("jms:queue:Foo.Bar?topicReplyToName=FOO.Zar");
         assertEquals("Foo.Bar", endpoint.getDestinationName());
         assertNull(endpoint.getReplyToName());
         assertEquals("FOO.Zar", endpoint.getTopicReplyToName());
@@ -108,12 +109,12 @@ public class JMSEndpointTest extends Ass
     
     @Test
     public void testJNDIWithAdditionalParameters() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
-                                               + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
-                                               + "&jndiConnectionFactoryName=ConnectionFactory"
-                                               + "&jndiURL=tcp://localhost:61616"
-                                               + "&jndi-com.sun.jndi.someParameter=someValue");
-        assertEquals(JMSURIConstants.JNDI, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
+            + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+            + "&jndiConnectionFactoryName=ConnectionFactory"
+            + "&jndiURL=tcp://localhost:61616"
+            + "&jndi-com.sun.jndi.someParameter=someValue");
+        assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
         assertEquals(endpoint.getParameters().size(), 0);
         assertEquals(endpoint.getJndiInitialContextFactory(),
                      "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
@@ -126,12 +127,12 @@ public class JMSEndpointTest extends Ass
 
     @Test
     public void testSharedParameters() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar?" + "deliveryMode=NON_PERSISTENT"
-                                               + "&timeToLive=100" + "&priority=5" + "&replyToName=foo.bar2");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?" + "deliveryMode=NON_PERSISTENT"
+            + "&timeToLive=100" + "&priority=5" + "&replyToName=foo.bar2");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
         assertEquals(endpoint.getParameters().size(), 0);
-        assertEquals(endpoint.getDeliveryMode().toString(),
-                     JMSURIConstants.DELIVERYMODE_NON_PERSISTENT.toString());
+        assertEquals(endpoint.getDeliveryMode(),
+                     DeliveryModeType.NON_PERSISTENT);
         assertEquals(endpoint.getTimeToLive(), 100);
         assertEquals(endpoint.getPriority(), 5);
         assertEquals(endpoint.getReplyToName(), "foo.bar2");
@@ -139,15 +140,15 @@ public class JMSEndpointTest extends Ass
 
     @Test
     public void testRequestUri() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
-                                               + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
-                                               + "&targetService=greetMe"
-                                               + "&replyToName=replyQueue"
-                                               + "&timeToLive=1000"
-                                               + "&priority=3"
-                                               + "&foo=bar"
-                                               + "&foo2=bar2");
-        assertEquals(JMSURIConstants.JNDI, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:jndi:Foo.Bar?" + "jndiInitialContextFactory"
+            + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+            + "&targetService=greetMe"
+            + "&replyToName=replyQueue"
+            + "&timeToLive=1000"
+            + "&priority=3"
+            + "&foo=bar"
+            + "&foo2=bar2");
+        assertEquals(JMSEndpoint.JNDI, endpoint.getJmsVariant());
         assertEquals(endpoint.getParameters().size(), 3);
         String requestUri = endpoint.getRequestURI();
         // Checking what's the request uri should have
@@ -163,21 +164,24 @@ public class JMSEndpointTest extends Ass
     
     @Test
     public void testRequestUriWithMessageType() throws Exception {
-        JMSEndpoint endpoint = resolveEndpoint("jms:queue:Foo.Bar?messageType=text");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
+        JMSEndpoint endpoint = new JMSEndpoint("jms:queue:Foo.Bar?messageType=text");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
         assertEquals("text", endpoint.getMessageType().value());
         
-        endpoint = resolveEndpoint("jms:queue:Foo.Bar");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
+        endpoint = new JMSEndpoint("jms:queue:Foo.Bar");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
         assertEquals("byte", endpoint.getMessageType().value());
         
-        endpoint = resolveEndpoint("jms:queue:Foo.Bar?messageType=binary");
-        assertEquals(JMSURIConstants.QUEUE, endpoint.getJmsVariant());
+        endpoint = new JMSEndpoint("jms:queue:Foo.Bar?messageType=binary");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
         assertEquals("binary", endpoint.getMessageType().value());
         
     }
-    
-    private JMSEndpoint resolveEndpoint(String uri) throws Exception {
-        return JMSEndpointParser.createEndpoint(uri);
+
+    @Test
+    public void nonSoapJMS() throws Exception {
+        JMSEndpoint endpoint = new JMSEndpoint("jms://");
+        assertEquals(JMSEndpoint.QUEUE, endpoint.getJmsVariant());
     }
+    
 }

Added: cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/URIConfiguredConduitTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/URIConfiguredConduitTest.java?rev=1568249&view=auto
==============================================================================
--- cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/URIConfiguredConduitTest.java (added)
+++ cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/URIConfiguredConduitTest.java Fri Feb 14 11:44:09 2014
@@ -0,0 +1,101 @@
+/**
+ * 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.transport.jms.uri;
+
+import javax.jms.ConnectionFactory;
+
+import org.apache.activemq.pool.PooledConnectionFactory;
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
+import org.apache.cxf.message.Exchange;
+import org.apache.cxf.message.ExchangeImpl;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.message.MessageImpl;
+import org.apache.cxf.service.model.EndpointInfo;
+import org.apache.cxf.transport.jms.JMSConduit;
+import org.apache.cxf.transport.jms.JMSConfiguration;
+import org.apache.cxf.transport.jms.JMSConstants;
+import org.apache.cxf.transport.jms.JMSMessageHeadersType;
+import org.apache.cxf.transport.jms.JMSOldConfigHolder;
+import org.apache.cxf.transport.jms.util.TestReceiver;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Checks if a CXF client works correlates requests and responses correctly if the server sets the message id
+ * as correlation id on the response message
+ */
+public class URIConfiguredConduitTest {
+    private static final String SERVICE_QUEUE = "test";
+    private static final String BROKER_URI = "vm://localhost?broker.persistent=false";
+    private ConnectionFactory connectionFactory;
+
+    @Test
+    public void testSendReceive() throws Exception {
+        sendAndReceive(true, "testreply");
+    }
+    
+    public void sendAndReceive(boolean synchronous, String replyDestination) throws Exception {
+        BusFactory bf = BusFactory.newInstance();
+        Bus bus = bf.createBus();
+        BusFactory.setDefaultBus(bus);
+        EndpointReferenceType target = new EndpointReferenceType();
+
+        connectionFactory = new PooledConnectionFactory(BROKER_URI);
+        TestReceiver receiver = new TestReceiver(connectionFactory, SERVICE_QUEUE, true);
+        receiver.runAsync();
+
+        JMSOldConfigHolder holder = new JMSOldConfigHolder();
+        EndpointInfo ei = new EndpointInfo();
+        String address = "jms:jndi:dynamicQueues/" + SERVICE_QUEUE
+            + "?jndiInitialContextFactory=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+            + "&replyToName=dynamicQueues/" + replyDestination
+            + "&messageType=text"
+            + "&jndiConnectionFactoryName=ConnectionFactory"
+            + "&jndiURL=" + BROKER_URI;
+        ei.setAddress(address);
+        JMSConfiguration jmsConfig = holder.createJMSConfigurationFromEndpointInfo(bus, ei , null, true);
+        JMSConduit conduit = new JMSConduit(target, jmsConfig, bus);
+        Exchange exchange = new ExchangeImpl();
+        exchange.setSynchronous(synchronous);
+        Message message = new MessageImpl();
+        exchange.setOutMessage(message);
+        conduit.sendExchange(exchange, "Request");
+        waitForAsyncReply(exchange);
+        receiver.close();
+        if (exchange.getInMessage() == null) {
+            throw new RuntimeException("No reply received within 2 seconds");
+        }
+        JMSMessageHeadersType inHeaders = (JMSMessageHeadersType)exchange.getInMessage()
+            .get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
+        Assert.assertEquals(receiver.getRequestMessageId(), inHeaders.getJMSCorrelationID());
+        conduit.close();
+        bus.shutdown(true);
+    }
+
+    private void waitForAsyncReply(Exchange exchange) throws InterruptedException {
+        int count = 0;
+        while (exchange.getInMessage() == null && count <= 20) {
+            Thread.sleep(100);
+            count++;
+        }
+    }
+
+}

Propchange: cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/URIConfiguredConduitTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SOAPJMSTestSuiteTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SOAPJMSTestSuiteTest.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SOAPJMSTestSuiteTest.java (original)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SOAPJMSTestSuiteTest.java Fri Feb 14 11:44:09 2014
@@ -57,6 +57,7 @@ import org.apache.cxf.jms_simple.JMSSimp
 import org.apache.cxf.jms_simple.JMSSimpleService1101;
 import org.apache.cxf.jms_simple.JMSSimpleService1105;
 import org.apache.cxf.jms_simple.JMSSimpleService1109;
+import org.apache.cxf.service.model.EndpointInfo;
 import org.apache.cxf.testsuite.testcase.MessagePropertiesType;
 import org.apache.cxf.testsuite.testcase.TestCaseType;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
@@ -65,6 +66,7 @@ import org.apache.cxf.transport.jms.JMSC
 import org.apache.cxf.transport.jms.JMSConstants;
 import org.apache.cxf.transport.jms.JMSFactory;
 import org.apache.cxf.transport.jms.JMSMessageHeadersType;
+import org.apache.cxf.transport.jms.JMSOldConfigHolder;
 import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
 import org.apache.cxf.transport.jms.util.JMSSender;
 import org.apache.cxf.transport.jms.util.JMSUtil;
@@ -83,8 +85,9 @@ public class SOAPJMSTestSuiteTest extend
     
     @BeforeClass
     public static void startServers() throws Exception {
-        broker = new EmbeddedJMSBrokerLauncher("vm://SOAPJMSTestSuiteTest?broker.persistent=false");
+        broker = new EmbeddedJMSBrokerLauncher();
         launchServer(broker);
+        JMSTestUtil.setJndiUrl(broker.getEncodedBrokerURL());
         assertTrue("server did not launch correctly", launchServer(Server.class, true));
         createStaticBus();
     }
@@ -592,25 +595,11 @@ public class SOAPJMSTestSuiteTest extend
             if (header.isSetJMSDeliveryMode()) {
                 dm = header.getJMSDeliveryMode();
             }
-            assertEquals(dm, 
-                         messageProperties.getDeliveryMode().intValue());
+            assertEquals(dm, messageProperties.getDeliveryMode().intValue());
         }
         if (messageProperties.isSetPriority()) {
             assertEquals(header.getJMSPriority(), messageProperties.getPriority().intValue());
         }
-        /*
-         * if (messageProperties.isSetExpiration()) { assertEquals(header.getJMSExpiration(),
-         * messageProperties.getExpiration().intValue()); }
-         */
-        /*
-         * if (messageProperties.isSetReplyTo() && !messageProperties.getReplyTo().trim().equals("")) {
-         * assertEquals(header.getJMSReplyTo().toString(), messageProperties.getReplyTo()); }
-         */
-        // correlationid
-        /*
-         * if (messageProperties.isSetDestination() && !messageProperties.getDestination().trim().equals(""))
-         * { assertEquals(header.get.toString(), messageProperties.getDestination()); }
-         */
         if (messageProperties.isSetBindingVersion()
             && !messageProperties.getBindingVersion().trim().equals("")) {
             assertEquals(header.getSOAPJMSBindingVersion(), messageProperties.getBindingVersion());
@@ -639,7 +628,12 @@ public class SOAPJMSTestSuiteTest extend
     
     public void twoWayTestWithCreateMessage(final TestCaseType testcase) throws Exception {
         String address = testcase.getAddress();
-        JMSConfiguration jmsConfig = JMSTestUtil.getInitJMSConfiguration(address);
+        
+        EndpointInfo endpointInfo = new EndpointInfo();
+        endpointInfo.setAddress(address);
+        JMSOldConfigHolder oldConfig = new JMSOldConfigHolder();
+        JMSConfiguration jmsConfig = oldConfig
+            .createJMSConfigurationFromEndpointInfo(staticBus, endpointInfo , null, true);
         
         ResourceCloser closer = new ResourceCloser();
         try {

Added: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SoapJmsSpecTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SoapJmsSpecTest.java?rev=1568249&view=auto
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SoapJmsSpecTest.java (added)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SoapJmsSpecTest.java Fri Feb 14 11:44:09 2014
@@ -0,0 +1,253 @@
+/**
+ * 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.jms.testsuite.testcases;
+
+import java.lang.reflect.UndeclaredThrowableException;
+import java.net.URL;
+import java.util.Map;
+
+import javax.jms.DeliveryMode;
+import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.soap.SOAPFaultException;
+
+import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
+import org.apache.cxf.jms_greeter.JMSGreeterPortType;
+import org.apache.cxf.jms_greeter.JMSGreeterService;
+import org.apache.cxf.jms_greeter.JMSGreeterService2;
+import org.apache.cxf.systest.jms.Hello;
+import org.apache.cxf.systest.jms.Server;
+import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
+import org.apache.cxf.testutil.common.EmbeddedJMSBrokerLauncher;
+import org.apache.cxf.transport.jms.JMSConfiguration;
+import org.apache.cxf.transport.jms.JMSConstants;
+import org.apache.cxf.transport.jms.JMSMessageHeadersType;
+import org.apache.cxf.transport.jms.JMSOldConfigHolder;
+import org.apache.cxf.transport.jms.JNDIConfiguration;
+import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
+import org.apache.cxf.transport.jms.uri.JMSEndpoint;
+import org.apache.cxf.transport.jms.util.JndiHelper;
+import org.apache.cxf.transport.jms.util.TestReceiver;
+import org.apache.hello_world_doc_lit.Greeter;
+import org.apache.hello_world_doc_lit.SOAPService7;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class SoapJmsSpecTest extends AbstractBusClientServerTestBase {
+
+    private static EmbeddedJMSBrokerLauncher broker;
+    private String wsdlString;
+    
+    public URL getWSDLURL(String s) throws Exception {
+        URL u = getClass().getResource(s);
+        if (u == null) {
+            throw new IllegalArgumentException("WSDL classpath resource not found " + s);
+        }
+        wsdlString = u.toString().intern();
+        broker.updateWsdl(getBus(), wsdlString);
+        return u;
+    }
+
+
+    @BeforeClass
+    public static void startServers() throws Exception {
+        broker = new EmbeddedJMSBrokerLauncher();
+        launchServer(broker);
+        launchServer(new Server(broker));
+        createStaticBus();
+    }
+    
+    @Test
+    public void testSpecJMS() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/jms_greeter", "JMSGreeterService");
+        QName portName = new QName("http://cxf.apache.org/jms_greeter", "GreeterPort");
+        URL wsdl = getWSDLURL("/wsdl/jms_spec_test.wsdl");
+        JMSGreeterService service = new JMSGreeterService(wsdl, serviceName);
+
+        String response1 = new String("Hello Milestone-");
+        String response2 = new String("Bonjour");
+        JMSGreeterPortType greeter = service.getPort(portName, JMSGreeterPortType.class);
+        for (int idx = 0; idx < 5; idx++) {
+
+            greeter.greetMeOneWay("test String");
+
+            String greeting = greeter.greetMe("Milestone-" + idx);
+            assertNotNull("no response received from service", greeting);
+            String exResponse = response1 + idx;
+            assertEquals(exResponse, greeting);
+
+            String reply = greeter.sayHi();
+            assertNotNull("no response received from service", reply);
+            assertEquals(response2, reply);
+        }
+    }
+    
+    @Test
+    public void testWsdlExtensionSpecJMS() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/jms_greeter", "JMSGreeterService");
+        QName portName = new QName("http://cxf.apache.org/jms_greeter", "GreeterPort");
+        URL wsdl = getWSDLURL("/wsdl/jms_spec_test.wsdl");
+        assertNotNull(wsdl);
+
+        JMSGreeterService service = new JMSGreeterService(wsdl, serviceName);
+        assertNotNull(service);
+
+        String response = new String("Bonjour");
+        try {
+            JMSGreeterPortType greeter = service.getPort(portName, JMSGreeterPortType.class);
+            Map<String, Object> requestContext = ((BindingProvider)greeter).getRequestContext();
+            JMSMessageHeadersType requestHeader = new JMSMessageHeadersType();
+            requestContext.put(JMSConstants.JMS_CLIENT_REQUEST_HEADERS, requestHeader);
+            
+            String reply = greeter.sayHi();
+            assertNotNull("no response received from service", reply);
+            assertEquals(response, reply);
+            
+            requestContext = ((BindingProvider)greeter).getRequestContext();
+            requestHeader = (JMSMessageHeadersType)requestContext
+                .get(JMSConstants.JMS_CLIENT_REQUEST_HEADERS);
+            assertEquals(requestHeader.getSOAPJMSBindingVersion(), "1.0");
+            assertEquals(requestHeader.getSOAPJMSSOAPAction(), "\"test\"");
+            assertEquals(requestHeader.getTimeToLive(), 3000);
+            assertEquals(requestHeader.getJMSDeliveryMode(), DeliveryMode.PERSISTENT);
+            assertEquals(requestHeader.getJMSPriority(), 7);
+            
+            Map<String, Object> responseContext = ((BindingProvider)greeter).getResponseContext();
+            JMSMessageHeadersType responseHeader = (JMSMessageHeadersType)responseContext
+                .get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
+            assertEquals(responseHeader.getSOAPJMSBindingVersion(), "1.0");
+            assertEquals(responseHeader.getSOAPJMSSOAPAction(), null);
+            assertEquals(responseHeader.getJMSDeliveryMode(), DeliveryMode.PERSISTENT);
+            assertEquals(responseHeader.getJMSPriority(), 7);
+            
+        } catch (UndeclaredThrowableException ex) {
+            throw (Exception)ex.getCause();
+        }
+    }
+
+    @Test
+    public void testWsdlExtensionSpecJMSPortError() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/jms_greeter", "JMSGreeterService2");
+        QName portName = new QName("http://cxf.apache.org/jms_greeter", "GreeterPort2");
+        URL wsdl = getWSDLURL("/wsdl/jms_spec_test.wsdl");
+        assertNotNull(wsdl);
+
+        JMSGreeterService2 service = new JMSGreeterService2(wsdl, serviceName);
+        assertNotNull(service);
+
+        String response = new String("Bonjour");
+        JMSGreeterPortType greeter = service.getPort(portName, JMSGreeterPortType.class);    
+        String reply = greeter.sayHi();
+        assertNotNull("no response received from service", reply);
+        assertEquals(response, reply); 
+    }
+    
+    @Test 
+    public void testSpecNoWsdlService() throws Exception {
+        specNoWsdlService(null);
+    }
+    
+    @Test
+    public void testSpecNoWsdlServiceWithDifferentMessageType() throws Exception {
+        specNoWsdlService("text");
+        specNoWsdlService("byte");
+        specNoWsdlService("binary");
+    }
+    
+    private void specNoWsdlService(String messageType) throws Exception {
+        String address = "jms:jndi:dynamicQueues/test.cxf.jmstransport.queue3"
+            + "?jndiInitialContextFactory"
+            + "=org.apache.activemq.jndi.ActiveMQInitialContextFactory"
+            + "&jndiConnectionFactoryName=ConnectionFactory&jndiURL=" 
+            + broker.getEncodedBrokerURL();
+        if (messageType != null) {
+            address = address + "&messageType=" + messageType;
+        }
+
+        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
+        factory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICATION_TRANSPORTID);
+        factory.setServiceClass(Hello.class);
+        factory.setAddress(address);
+        Hello client = (Hello)factory.create();
+        String reply = client.sayHi(" HI");
+        assertEquals(reply, "get HI");
+    }
+    
+    @Test
+    public void testBindingVersionError() throws Exception {
+        QName serviceName = new QName("http://cxf.apache.org/jms_greeter", "JMSGreeterService");
+        QName portName = new QName("http://cxf.apache.org/jms_greeter", "GreeterPort");
+        URL wsdl = getWSDLURL("/wsdl/jms_spec_test.wsdl");
+
+        JMSGreeterService service = new JMSGreeterService(wsdl, serviceName);
+
+        JMSGreeterPortType greeter = service.getPort(portName, JMSGreeterPortType.class);
+        BindingProvider  bp = (BindingProvider)greeter;
+        
+        Map<String, Object> requestContext = bp.getRequestContext();
+        JMSMessageHeadersType requestHeader = new JMSMessageHeadersType();
+        requestHeader.setSOAPJMSBindingVersion("0.3");
+        requestContext.put(JMSConstants.JMS_CLIENT_REQUEST_HEADERS, requestHeader);
+ 
+        try {
+            greeter.greetMe("Milestone-");
+            fail("Should have thrown a fault");
+        } catch (SOAPFaultException ex) {
+            assertTrue(ex.getMessage().contains("0.3"));
+            Map<String, Object> responseContext = bp.getResponseContext();
+            JMSMessageHeadersType responseHdr = 
+                 (JMSMessageHeadersType)responseContext.get(JMSConstants.JMS_CLIENT_RESPONSE_HEADERS);
+            if (responseHdr == null) {
+                fail("response Header should not be null");
+            }
+            assertTrue(responseHdr.isSOAPJMSIsFault());
+        }
+
+    }
+    
+    @Test
+    public void testReplyToConfig() throws Exception {
+        JMSEndpoint endpoint = new JMSEndpoint();
+        endpoint.setJndiInitialContextFactory("org.apache.activemq.jndi.ActiveMQInitialContextFactory");
+        endpoint.setJndiURL(broker.getBrokerURL());
+        endpoint.setJndiConnectionFactoryName("ConnectionFactory");
+
+        final JMSConfiguration jmsConfig = new JMSConfiguration();        
+        JndiHelper jt = new JndiHelper(JMSOldConfigHolder.getInitialContextEnv(endpoint));
+        
+        JNDIConfiguration jndiConfig = new JNDIConfiguration();
+        jndiConfig.setJndiConnectionFactoryName(endpoint.getJndiConnectionFactoryName());
+        jmsConfig.setJndiTemplate(jt);
+        jmsConfig.setJndiConfig(jndiConfig);
+        
+        TestReceiver receiver = new TestReceiver(jmsConfig.getConnectionFactory(), 
+                                                 "dynamicQueues/SoapService7.replyto.queue", false);
+        receiver.setStaticReplyQueue("dynamicQueues/SoapService7.reply.queue");
+        receiver.runAsync();
+        
+        QName serviceName = new QName("http://apache.org/hello_world_doc_lit", "SOAPService7");
+        QName portName = new QName("http://apache.org/hello_world_doc_lit", "SoapPort7");
+        URL wsdl = getWSDLURL("/wsdl/hello_world_doc_lit.wsdl");
+        SOAPService7 service = new SOAPService7(wsdl, serviceName);        
+        Greeter greeter = service.getPort(portName, Greeter.class);
+        String name = "FooBar";
+        String reply = greeter.greetMe(name);
+        assertEquals(reply, "Hello " + name);
+    }
+}

Propchange: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/testcases/SoapJmsSpecTest.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java (original)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/jms/testsuite/util/JMSTestUtil.java Fri Feb 14 11:44:09 2014
@@ -23,7 +23,6 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 
-import javax.jms.DeliveryMode;
 import javax.jms.Destination;
 import javax.jms.JMSException;
 import javax.jms.Message;
@@ -37,15 +36,7 @@ import javax.xml.bind.Unmarshaller;
 import org.apache.cxf.testsuite.testcase.MessagePropertiesType;
 import org.apache.cxf.testsuite.testcase.TestCaseType;
 import org.apache.cxf.testsuite.testcase.TestCasesType;
-import org.apache.cxf.transport.jms.JMSConfiguration;
-import org.apache.cxf.transport.jms.JMSOldConfigHolder;
-import org.apache.cxf.transport.jms.JNDIConfiguration;
 import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
-import org.apache.cxf.transport.jms.uri.JMSEndpoint;
-import org.apache.cxf.transport.jms.uri.JMSEndpointParser;
-import org.apache.cxf.transport.jms.uri.JMSURIConstants;
-import org.apache.cxf.transport.jms.util.JMSDestinationResolver;
-import org.apache.cxf.transport.jms.util.JndiHelper;
 
 /**
  * 
@@ -53,10 +44,15 @@ import org.apache.cxf.transport.jms.util
 public final class JMSTestUtil {
 
     private static TestCasesType testcases;
+    private static String jndiUrl;
 
     private JMSTestUtil() {
     }
     
+    public static void setJndiUrl(String jndiUrl) {
+        JMSTestUtil.jndiUrl = jndiUrl;
+    }
+
     public static List<TestCaseType> getTestCases() {
         try {
             if (testcases == null) {
@@ -96,7 +92,7 @@ public final class JMSTestUtil {
                 if (idx != -1) {
                     int idx2 = add.indexOf("&", idx);
                     add = add.substring(0, idx)
-                        + "jndiURL=vm://SOAPJMSTestSuiteTest"
+                        + "jndiURL=" + jndiUrl
                         + (idx2 == -1 ? "" : add.substring(idx2));
                     tct.setAddress(add);
                 }
@@ -104,56 +100,6 @@ public final class JMSTestUtil {
         }
     }
 
-    public static JMSConfiguration getInitJMSConfiguration(String address) throws Exception {
-        JMSEndpoint endpoint = JMSEndpointParser.createEndpoint(address);
-
-        JMSConfiguration jmsConfig = new JMSConfiguration();
-
-        if (endpoint.isSetDeliveryMode()) {
-            int deliveryMode = endpoint.getDeliveryMode()
-                .equals(JMSURIConstants.DELIVERYMODE_PERSISTENT)
-                ? DeliveryMode.PERSISTENT : DeliveryMode.NON_PERSISTENT;
-            jmsConfig.setDeliveryMode(deliveryMode);
-        }
-
-        if (endpoint.isSetPriority()) {
-            int priority = endpoint.getPriority();
-            jmsConfig.setPriority(priority);
-        }
-
-        if (endpoint.isSetTimeToLive()) {
-            long timeToLive = endpoint.getTimeToLive();
-            jmsConfig.setTimeToLive(timeToLive);
-        }
-
-        if (jmsConfig.isUsingEndpointInfo()) {
-            JndiHelper jt = new JndiHelper(JMSOldConfigHolder.getInitialContextEnv(endpoint));
-            boolean pubSubDomain = false;
-            pubSubDomain = endpoint.getJmsVariant().equals(JMSURIConstants.TOPIC);
-            JNDIConfiguration jndiConfig = new JNDIConfiguration();
-            jndiConfig.setJndiConnectionFactoryName(endpoint.getJndiConnectionFactoryName());
-            jmsConfig.setJndiTemplate(jt);
-            jmsConfig.setJndiConfig(jndiConfig);
-            jmsConfig.setExplicitQosEnabled(true);
-            jmsConfig.setPubSubDomain(pubSubDomain);
-            jmsConfig.setPubSubNoLocal(true);
-            boolean useJndi = endpoint.getJmsVariant().equals(JMSURIConstants.JNDI);
-            if (useJndi) {
-                // Setup Destination jndi destination resolver
-                final JMSDestinationResolver jndiDestinationResolver = new JMSDestinationResolver();
-                jndiDestinationResolver.setJndiTemplate(jt);
-                jmsConfig.setDestinationResolver(jndiDestinationResolver);
-                jmsConfig.setTargetDestination(endpoint.getDestinationName());
-                jmsConfig.setReplyDestination(endpoint.getReplyToName());
-            } else {
-                // Use the default dynamic destination resolver
-                jmsConfig.setTargetDestination(endpoint.getDestinationName());
-                jmsConfig.setReplyDestination(endpoint.getReplyToName());
-            }
-        }
-        return jmsConfig;
-    }
-
     /**
      * @param testcase
      * @param session

Modified: cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerGzipTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerGzipTest.java?rev=1568249&r1=1568248&r2=1568249&view=diff
==============================================================================
--- cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerGzipTest.java (original)
+++ cxf/trunk/systests/transport-jms/src/test/java/org/apache/cxf/systest/jms/JMSClientServerGzipTest.java Fri Feb 14 11:44:09 2014
@@ -42,8 +42,6 @@ import org.junit.BeforeClass;
 import org.junit.Test;
 
 public class JMSClientServerGzipTest extends AbstractBusClientServerTestBase {
-    private static final String BROKER_URI = "vm://" + JMSClientServerGzipTest.class.getSimpleName() 
-        + "?broker.persistent=false";
     private static EmbeddedJMSBrokerLauncher broker;
     private String wsdlString;
     
@@ -65,7 +63,7 @@ public class JMSClientServerGzipTest ext
     }
     @BeforeClass
     public static void startServers() throws Exception {
-        broker = new EmbeddedJMSBrokerLauncher(BROKER_URI);
+        broker = new EmbeddedJMSBrokerLauncher();
         launchServer(broker);
         assertTrue("server did not launch correctly", 
                    launchServer(GzipServer.class, true));