You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2009/06/28 15:18:36 UTC

svn commit: r789096 [1/2] - in /cxf/trunk: rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/ rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/ rt/bindin...

Author: ningjiang
Date: Sun Jun 28 13:18:35 2009
New Revision: 789096

URL: http://svn.apache.org/viewvc?rev=789096&view=rev
Log:
CXF-2253 applied patch with thanks to CongLiu

Added:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java   (with props)
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java   (with props)
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java   (with props)
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties   (with props)
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java   (with props)
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java   (with props)
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java   (with props)
    cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/
    cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/
    cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpointParser.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSJNDIEndpoint.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSQueueEndpoint.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSTopicEndpoint.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSURIConstants.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/ResolveEndpointFailedException.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/URISupport.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/UnsafeUriCharactersEncoder.java   (with props)
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-spec.xjb   (with props)
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-spec.xsd   (with props)
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xjb   (with props)
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms-uri.xsd   (with props)
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/uri/JMSEndpointTest.java   (with props)
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/GreeterSpecImpl.java   (with props)
    cxf/trunk/testutils/src/main/resources/wsdl/jms_spec_test.wsdl   (with props)
Modified:
    cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
    cxf/trunk/rt/transports/jms/pom.xml
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
    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/JMSDestination.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/JMSOldConfigHolder.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java
    cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSUtils.java
    cxf/trunk/rt/transports/jms/src/main/resources/META-INF/cxf/bus-extensions.xml
    cxf/trunk/rt/transports/jms/src/main/resources/META-INF/cxf/cxf-extension-jms.xml
    cxf/trunk/rt/transports/jms/src/main/resources/schemas/wsdl/jms.xsd
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/AbstractJMSTester.java
    cxf/trunk/rt/transports/jms/src/test/java/org/apache/cxf/transport/jms/JMSDestinationTest.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/JMSClientServerTest.java
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jms/Server.java

Modified: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java?rev=789096&r1=789095&r2=789096&view=diff
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java (original)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/SoapBindingFactory.java Sun Jun 28 13:18:35 2009
@@ -54,6 +54,7 @@
 import org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapPreProtocolOutInterceptor;
 import org.apache.cxf.binding.soap.interceptor.StartBodyInterceptor;
+import org.apache.cxf.binding.soap.jms.interceptor.SoapJMSInInterceptor;
 import org.apache.cxf.binding.soap.model.SoapBindingInfo;
 import org.apache.cxf.binding.soap.model.SoapBodyInfo;
 import org.apache.cxf.binding.soap.model.SoapHeaderInfo;
@@ -349,6 +350,11 @@
                 throw new RuntimeException("WSI-BP prohibits RPC and Document style "
                                            + "operations in same service.");
             }
+            
+            //jms
+            if (sbi.getTransportURI().equals("http://www.w3.org/2008/07/soap/bindings/JMS/")) {
+                sb.getInInterceptors().add(new SoapJMSInInterceptor());
+            }
         } else {
             throw new RuntimeException("Can not initialize SoapBinding, BindingInfo is not SoapBindingInfo");
         }

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,90 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import javax.xml.namespace.QName;
+
+/**
+ * 
+ */
+public class JMSFault extends Exception {
+
+    private JMSFaultType jmsFaultType;
+    private boolean sender;
+    private Object detail;
+
+    public JMSFault(String message) {
+        super(message);
+    }
+
+    public JMSFault(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    /**
+     * * @return Returns the jmsFaultType.
+     */
+    public JMSFaultType getJmsFaultType() {
+        return jmsFaultType;
+    }
+
+    /**
+     * @param jmsFaultType The jmsFaultType to set.
+     */
+    public void setJmsFaultType(JMSFaultType jmsFaultType) {
+        this.jmsFaultType = jmsFaultType;
+    }
+
+    /**
+     * * @return Returns the sender.
+     */
+    public boolean isSender() {
+        return sender;
+    }
+
+    /**
+     * @param sender The sender to set.
+     */
+    public void setSender(boolean sender) {
+        this.sender = sender;
+    }
+
+    /**
+     * * @return Returns the detail.
+     */
+    public Object getDetail() {
+        return detail;
+    }
+
+    /**
+     * @param detail The detail to set.
+     */
+    public void setDetail(Object detail) {
+        this.detail = detail;
+    }
+
+    public QName getSubCode() {
+        return jmsFaultType.faultCode;
+    }
+
+    public String getReason() {
+        return getMessage();
+    }
+}

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFault.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,49 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import java.util.logging.Logger;
+
+import org.apache.cxf.common.logging.LogUtils;
+
+/**
+ * 
+ */
+public final class JMSFaultFactory {
+
+    static final Logger LOG = LogUtils.getL7dLogger(JMSFaultFactory.class);
+
+    private JMSFaultFactory() {
+    }
+
+    public static JMSFault createUnrecognizedBindingVerionFault(String bindingVersion) {
+        JMSFaultType jmsFaultType = new JMSFaultType();
+        jmsFaultType.setFaultCode(SoapJMSConstants.getUnrecognizedBindingVersionQName());
+
+        String m = new org.apache.cxf.common.i18n.Message("UNRECOGNIZED_BINDINGVERSION", LOG,
+                                                          new Object[] {
+                                                              bindingVersion
+                                                          }).toString();
+        JMSFault jmsFault = new JMSFault(m);
+        jmsFault.setJmsFaultType(jmsFaultType);
+        jmsFault.setSender(true);
+        return jmsFault;
+    }
+}

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,106 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.annotation.XmlAnyAttribute;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlElement;
+import javax.xml.namespace.QName;
+
+public class JMSFaultType {
+
+    @XmlElement(name = "FaultCode", required = true)
+    protected QName faultCode;
+    @XmlAnyElement(lax = true)
+    protected List<Object> any;
+    @XmlAnyAttribute
+    private Map<QName, String> otherAttributes = new HashMap<QName, String>();
+
+    /**
+     * Gets the value of the faultCode property.
+     * 
+     * @return possible object is {@link QName }
+     */
+    public QName getFaultCode() {
+        return faultCode;
+    }
+
+    /**
+     * Sets the value of the faultCode property.
+     * 
+     * @param value allowed object is {@link QName }
+     */
+    public void setFaultCode(QName value) {
+        this.faultCode = value;
+    }
+
+    public boolean isSetFaultCode() {
+        return this.faultCode != null;
+    }
+
+    /**
+     * Gets the value of the any property.
+     * <p>
+     * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification
+     * you make to the returned list will be present inside the JAXB object. This is why there is not a
+     * <CODE>set</CODE> method for the any property.
+     * <p>
+     * For example, to add a new item, do as follows:
+     * 
+     * <pre>
+     * getAny().add(newItem);
+     * </pre>
+     * <p>
+     * Objects of the following type(s) are allowed in the list {@link Object } {@link Element }
+     */
+    public List<Object> getAny() {
+        if (any == null) {
+            any = new ArrayList<Object>();
+        }
+        return this.any;
+    }
+
+    public boolean isSetAny() {
+        return (this.any != null) && (!this.any.isEmpty());
+    }
+
+    public void unsetAny() {
+        this.any = null;
+    }
+
+    /**
+     * Gets a map that contains attributes that aren't bound to any typed property on this class.
+     * <p>
+     * the map is keyed by the name of the attribute and the value is the string value of the attribute. the
+     * map returned by this method is live, and you can add new attribute by updating the map directly.
+     * Because of this design, there's no setter.
+     * 
+     * @return always non-null
+     */
+    public Map<QName, String> getOtherAttributes() {
+        return otherAttributes;
+    }
+
+}

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/JMSFaultType.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties Sun Jun 28 13:18:35 2009
@@ -0,0 +1,21 @@
+#
+#
+#    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.
+#
+#
+UNRECOGNIZED_BINDINGVERSION = Unrecognized BindingVersion: {0}.

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/Messages.properties
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,102 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+import javax.xml.parsers.DocumentBuilderFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+
+import org.apache.cxf.binding.Binding;
+import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.SoapBinding;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.apache.cxf.binding.soap.SoapVersion;
+import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.interceptor.Fault;
+
+/**
+ * 
+ */
+public class SoapFaultFactory  {
+
+    private static final Logger LOG = LogUtils.getL7dLogger(SoapFaultFactory.class); 
+    
+    private SoapVersion version;
+    
+    public SoapFaultFactory(Binding binding) {
+        version = ((SoapBinding)binding).getSoapVersion();
+    }
+    
+    public Fault createFault(JMSFault jmsFault) {
+        Fault f = null;
+        if (version == Soap11.getInstance()) {
+            f = createSoap11Fault(jmsFault);
+            // so we can encode the SequenceFault as header   
+            f.initCause(jmsFault);
+        } else {
+            f = createSoap12Fault(jmsFault);
+        }
+        return f;
+    }
+    
+    Fault createSoap11Fault(JMSFault jmsFault) {
+        SoapFault fault = new SoapFault(jmsFault.getReason(),
+            jmsFault.isSender() ? version.getSender() : version.getReceiver());
+        fault.setSubCode(jmsFault.getSubCode());
+        return fault;
+    }
+    
+    Fault createSoap12Fault(JMSFault jmsFault) {
+        SoapFault fault = (SoapFault)createSoap11Fault(jmsFault);
+        Object detail = jmsFault.getDetail();
+        if (null == detail) {
+            return fault;
+        }
+
+        try {
+            setDetail(fault, detail);
+        } catch (Exception ex) {
+            LogUtils.log(LOG, Level.SEVERE, "MARSHAL_FAULT_DETAIL_EXC", ex); 
+            ex.printStackTrace();
+        }
+        return fault;
+    }
+    
+    void setDetail(SoapFault fault, Object detail) throws Exception {
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        Document doc = factory.newDocumentBuilder().newDocument();
+        Element elem = null;
+        
+        elem =  (Element)doc.getFirstChild();
+        fault.setDetail(elem);
+    }
+    
+    public String toString(Fault f) {
+        SoapFault sf = (SoapFault)f;
+        return sf.toString();
+    }
+        
+
+}

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,80 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import javax.xml.namespace.QName;
+
+/**
+ * 
+ */
+public final class SoapJMSConstants {
+
+    public static final Object BINDINGVERSION = "SOAPJMS_bindingVersion";
+
+    public static final String SOAP_JMS_SPECIFICIATION_TRANSPORTID = "http://www.w3.org/2008/07/"
+                                                                     + "soap/bindings/JMS/";
+    public static final String SOAP_JMS_NAMESPACE = SOAP_JMS_SPECIFICIATION_TRANSPORTID;
+    
+    // fault codes
+    private static final String JMS_CONTENTTYPEMISMATCH_FAULT_CODE = "contentTypeMismatch";
+    private static final String JMS_MALFORMEDREQUESTURI_FAULT_CODE = "malformedRequestURI";
+    private static final String JMS_MISMATCHEDSOAPACTION_FAULT_CODE = "mismatchedSoapAction";
+    private static final String JMS_MISSINGCONTENTTYPE_FAULT_CODE = "missingContentType";
+    private static final String JMS_MISSINGREQUESTURI_FAULT_CODE = "missingRequestURI";
+    private static final String JMS_TARGETSERVICENOTALLOWEDINREQUESTURI_FAULT_CODE = 
+        "targetServiceNotAllowedInRequestURI";
+    private static final String JMS_UNRECOGNIZEDBINDINGVERSION_FAULT_CODE = "unrecognizedBindingVersion";
+    private static final String JMS_UNSUPPORTEDJMSMESSAGEFORMAT_FAULT_CODE = "unsupportedJMSMessageFormat";
+
+    private SoapJMSConstants() {
+    }
+    
+    public static QName getContentTypeMismatchQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_CONTENTTYPEMISMATCH_FAULT_CODE);
+    }
+
+    public static QName getMalformedRequestURIQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_MALFORMEDREQUESTURI_FAULT_CODE);
+    }
+
+    public static QName getMismatchedSoapActionQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_MISMATCHEDSOAPACTION_FAULT_CODE);
+    }
+
+    public static QName getMissingContentTypeQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_MISSINGCONTENTTYPE_FAULT_CODE);
+    }
+
+    public static QName getMissingRequestURIQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_MISSINGREQUESTURI_FAULT_CODE);
+    }
+
+    public static QName getTargetServiceNotAllowedInRequestURIQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_TARGETSERVICENOTALLOWEDINREQUESTURI_FAULT_CODE);
+    }
+
+    public static QName getUnrecognizedBindingVersionQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_UNRECOGNIZEDBINDINGVERSION_FAULT_CODE);
+    }
+
+    public static QName getUnsupportedJMSMessageFormatQName() {
+        return new QName(SOAP_JMS_NAMESPACE, JMS_UNSUPPORTEDJMSMESSAGEFORMAT_FAULT_CODE);
+    }
+}

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSConstants.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java (added)
+++ cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,77 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import java.util.List;
+import java.util.Map;
+
+import org.apache.cxf.binding.Binding;
+import org.apache.cxf.binding.soap.SoapMessage;
+import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
+import org.apache.cxf.endpoint.Endpoint;
+import org.apache.cxf.helpers.CastUtils;
+import org.apache.cxf.interceptor.AttachmentInInterceptor;
+import org.apache.cxf.interceptor.Fault;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.phase.Phase;
+
+/**
+ * 
+ */
+public class SoapJMSInInterceptor extends AbstractSoapInterceptor {
+
+    public SoapJMSInInterceptor() {
+        super(Phase.RECEIVE);
+        addAfter(AttachmentInInterceptor.class.getName());
+    }
+
+    public void handleMessage(SoapMessage message) throws Fault {
+        Map<String, List<String>> headers = CastUtils.cast((Map)message
+            .get(Message.PROTOCOL_HEADERS));
+        if (headers != null) {
+            checkBindingVersion(message, headers);
+        }
+    }
+
+    /**
+     * @param message 
+     * @param headers
+     */
+    private void checkBindingVersion(SoapMessage message, Map<String, List<String>> headers) {
+        List<String> bv = headers.get(SoapJMSConstants.BINDINGVERSION);
+        if (bv != null && bv.size() > 0) {
+            String bindingVersion = bv.get(0);
+            if (!"1.0".equals(bindingVersion)) {
+                JMSFault jmsFault = JMSFaultFactory
+                    .createUnrecognizedBindingVerionFault(bindingVersion);
+                Endpoint e = message.getExchange().get(Endpoint.class);
+                Binding b = null;
+                if (null != e) {
+                    b = e.getBinding();
+                }
+                if (null != b) {
+                    SoapFaultFactory sff = new SoapFaultFactory(b);
+                    Fault f = sff.createFault(jmsFault);
+                    throw f;
+                }
+            }
+        }
+    }
+}

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/main/java/org/apache/cxf/binding/soap/jms/interceptor/SoapJMSInInterceptor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java (added)
+++ cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,92 @@
+/**
+ * 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.binding.soap.jms.interceptor;
+
+import javax.xml.namespace.QName;
+
+import org.apache.cxf.binding.soap.Soap11;
+import org.apache.cxf.binding.soap.Soap12;
+import org.apache.cxf.binding.soap.SoapBinding;
+import org.apache.cxf.binding.soap.SoapFault;
+import org.easymock.classextension.EasyMock;
+import org.easymock.classextension.IMocksControl;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * 
+ */
+public class SoapFaultFactoryTest extends Assert {
+
+    private IMocksControl control;
+    private JMSFault jmsFault;
+    
+    @Before
+    public void setUp() {
+        control = EasyMock.createNiceControl(); 
+    }
+    
+    JMSFault setupJMSFault(boolean isSender, QName code, Object detail) {
+        jmsFault = control.createMock(JMSFault.class);
+        EasyMock.expect(jmsFault.getReason()).andReturn("reason");
+        EasyMock.expect(jmsFault.isSender()).andReturn(isSender);
+        EasyMock.expect(jmsFault.getSubCode()).andReturn(code);
+        if (null != detail) {
+            EasyMock.expect(jmsFault.getDetail()).andReturn(detail);
+            JMSFaultType sft = new JMSFaultType();
+            sft.setFaultCode(SoapJMSConstants.getContentTypeMismatchQName());
+        }
+        return jmsFault;
+    }
+    
+    @Test 
+    public void createSoap11Fault() {
+        SoapBinding sb = control.createMock(SoapBinding.class);
+        EasyMock.expect(sb.getSoapVersion()).andReturn(Soap11.getInstance());        
+        setupJMSFault(true, SoapJMSConstants.getContentTypeMismatchQName(), null);
+        control.replay();
+        SoapFaultFactory factory = new SoapFaultFactory(sb);
+        SoapFault fault = (SoapFault)factory.createFault(jmsFault);
+        assertEquals("reason", fault.getReason());
+        assertEquals(Soap11.getInstance().getSender(), fault.getFaultCode());
+        assertEquals(SoapJMSConstants.getContentTypeMismatchQName(), fault.getSubCode());
+        assertNull(fault.getDetail());
+        assertSame(jmsFault, fault.getCause());
+        control.verify();        
+    }
+    
+    @Test 
+    public void createSoap12Fault() {
+        SoapBinding sb = control.createMock(SoapBinding.class);
+        EasyMock.expect(sb.getSoapVersion()).andReturn(Soap12.getInstance());        
+        setupJMSFault(true, SoapJMSConstants.getMismatchedSoapActionQName(), null);        
+        control.replay();
+        SoapFaultFactory factory = new SoapFaultFactory(sb);
+        SoapFault fault = (SoapFault)factory.createFault(jmsFault);
+        assertEquals("reason", fault.getReason());
+        assertEquals(Soap12.getInstance().getSender(), fault.getFaultCode());
+        assertEquals(SoapJMSConstants.getMismatchedSoapActionQName(), fault.getSubCode());
+        assertNull(fault.getDetail());
+        assertNull(fault.getCause());
+        control.verify();        
+    }
+}

Propchange: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/bindings/soap/src/test/java/org/apache/cxf/binding/soap/jms/interceptor/SoapFaultFactoryTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/transports/jms/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/pom.xml?rev=789096&r1=789095&r2=789096&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/pom.xml (original)
+++ cxf/trunk/rt/transports/jms/pom.xml Sun Jun 28 13:18:35 2009
@@ -22,7 +22,7 @@
     <artifactId>cxf-rt-transports-jms</artifactId>
     <packaging>jar</packaging>
     <version>2.3.0-SNAPSHOT</version>
-    <name>Apache CXF Runtime JMS Transport</name>
+    <name>Apache CXF Runtime JMS Transport for SOAP/JMS Specification</name>
     <url>http://cxf.apache.org</url>
 
     <parent>
@@ -114,6 +114,22 @@
                                         <deleteDir>${basedir}/target/generated/src/main/java/org/apache/cxf/wsdl</deleteDir>
                                     </deleteDirs>
                                 </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/jms-spec.xsd</xsd>
+                                    <bindingFile>${basedir}/src/main/resources/schemas/wsdl/jms-spec.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>
                             </xsdOptions>
                         </configuration>
                         <goals>

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java?rev=789096&r1=789095&r2=789096&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSConduit.java Sun Jun 28 13:18:35 2009
@@ -162,8 +162,8 @@
             public javax.jms.Message createMessage(Session session) throws JMSException {
                 String messageType = jmsConfig.getMessageType();
                 final javax.jms.Message jmsMessage;
-                jmsMessage = JMSUtils.buildJMSMessageFromCXFMessage(outMessage, request, messageType,
-                                                                    session, replyTo,
+                jmsMessage = JMSUtils.buildJMSMessageFromCXFMessage(jmsConfig, outMessage, request,
+                                                                    messageType, session, replyTo,
                                                                     correlationId);
                 LOG.log(Level.FINE, "client sending request: ", jmsMessage);
                 return jmsMessage;

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=789096&r1=789095&r2=789096&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 Sun Jun 28 13:18:35 2009
@@ -81,12 +81,17 @@
     private int cacheLevel = DEFAULT_VALUE;
     private String cacheLevelName;
     
+    //For jms spec.
+    private String targetService;
+    private String requestURI;
+    
     private ConnectionFactory wrappedConnectionFactory;
     
     private JNDIConfiguration jndiConfig;
     
     public void ensureProperlyConfigured(org.apache.cxf.common.i18n.Message msg) {
-        if (targetDestination == null || getOrCreateWrappedConnectionFactory() == null) {
+        if (targetDestination == null ||  getOrCreateWrappedConnectionFactory() == null) {
+            System.out.println("targetDestination " + targetDestination);
             throw new ConfigurationException(msg);
         }
     }
@@ -437,4 +442,20 @@
         this.durableSubscriptionClientId = durableSubscriptionClientId;
     }
 
+    public void setTargetService(String targetService) {
+        this.targetService = targetService;
+    }
+
+    public String getTargetService() {
+        return targetService;
+    }
+
+    public void setRequestURI(String requestURI) {
+        this.requestURI = requestURI;
+    }
+
+    public String getRequestURI() {
+        return requestURI;
+    }
+
 }

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java?rev=789096&r1=789095&r2=789096&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSDestination.java Sun Jun 28 13:18:35 2009
@@ -27,8 +27,6 @@
 import java.util.Calendar;
 import java.util.Collection;
 import java.util.GregorianCalendar;
-import java.util.List;
-import java.util.Map;
 import java.util.SimpleTimeZone;
 import java.util.TimeZone;
 import java.util.concurrent.ConcurrentLinkedQueue;
@@ -47,7 +45,6 @@
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.continuations.ContinuationProvider;
 import org.apache.cxf.continuations.SuspendedInvocationException;
-import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.interceptor.OneWayProcessorInterceptor;
 import org.apache.cxf.message.Exchange;
 import org.apache.cxf.message.Message;
@@ -218,11 +215,12 @@
             return;
         }
         try {
-            final JMSMessageHeadersType headers = (JMSMessageHeadersType)outMessage
+            final JMSMessageHeadersType messageProperties = (JMSMessageHeadersType)outMessage
                 .get(JMSConstants.JMS_SERVER_RESPONSE_HEADERS);
-            JMSMessageHeadersType inHeaders = (JMSMessageHeadersType)inMessage
+            JMSMessageHeadersType inMessageProperties = (JMSMessageHeadersType)inMessage
                 .get(JMSConstants.JMS_SERVER_REQUEST_HEADERS);
-            JmsTemplate jmsTemplate = JMSFactory.createJmsTemplate(jmsConfig, inHeaders);
+            JMSUtils.initResponseMessageProperties(messageProperties, inMessageProperties);
+            JmsTemplate jmsTemplate = JMSFactory.createJmsTemplate(jmsConfig, messageProperties);
 
             // setup the reply message
             final javax.jms.Message request = (javax.jms.Message)inMessage
@@ -256,12 +254,8 @@
 
                     reply.setJMSCorrelationID(determineCorrelationID(request));
 
-                    JMSUtils.setMessageProperties(headers, reply);
-                    // ensure that the contentType is set to the out jms message header
-                    JMSUtils.addContentTypeToProtocolHeader(outMessage);
-                    Map<String, List<String>> protHeaders = CastUtils.cast((Map<?, ?>)outMessage
-                        .get(Message.PROTOCOL_HEADERS));
-                    JMSUtils.addProtocolHeaders(reply, protHeaders);
+                    JMSUtils.prepareJMSProperties(messageProperties, outMessage, jmsConfig);
+                    JMSUtils.setJMSProperties(reply, messageProperties);
 
                     LOG.log(Level.FINE, "server sending reply: ", reply);
                     return reply;

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=789096&r1=789095&r2=789096&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 Sun Jun 28 13:18:35 2009
@@ -85,22 +85,25 @@
      * settings in headers override the settings from jmsConfig
      * 
      * @param jmsConfig configuration information
-     * @param headers context headers
+     * @param messageProperties context headers
      * @return
      */
-    public static JmsTemplate createJmsTemplate(JMSConfiguration jmsConfig, JMSMessageHeadersType headers) {
+    public static JmsTemplate createJmsTemplate(JMSConfiguration jmsConfig,
+                                                JMSMessageHeadersType messageProperties) {
         JmsTemplate jmsTemplate = jmsConfig.isUseJms11() ? new JmsTemplate() : new JmsTemplate102();
         jmsTemplate.setConnectionFactory(jmsConfig.getOrCreateWrappedConnectionFactory());
         jmsTemplate.setPubSubDomain(jmsConfig.isPubSubDomain());
         if (jmsConfig.getReceiveTimeout() != null) {
             jmsTemplate.setReceiveTimeout(jmsConfig.getReceiveTimeout());
         }
-        jmsTemplate.setTimeToLive(jmsConfig.getTimeToLive());
-        int priority = (headers != null && headers.isSetJMSPriority())
-            ? headers.getJMSPriority() : jmsConfig.getPriority();
+        long timeToLive = (messageProperties != null && messageProperties.isSetTimeToLive())
+            ? messageProperties.getTimeToLive() : jmsConfig.getTimeToLive();
+        jmsTemplate.setTimeToLive(timeToLive);
+        int priority = (messageProperties != null && messageProperties.isSetJMSPriority())
+            ? messageProperties.getJMSPriority() : jmsConfig.getPriority();
         jmsTemplate.setPriority(priority);
-        int deliveryMode = (headers != null && headers.isSetJMSDeliveryMode()) ? headers
-            .getJMSDeliveryMode() : jmsConfig.getDeliveryMode();
+        int deliveryMode = (messageProperties != null && messageProperties.isSetJMSDeliveryMode())
+            ? messageProperties.getJMSDeliveryMode() : jmsConfig.getDeliveryMode();
         jmsTemplate.setDeliveryMode(deliveryMode);
         jmsTemplate.setExplicitQosEnabled(jmsConfig.isExplicitQosEnabled());
         jmsTemplate.setSessionTransacted(jmsConfig.isSessionTransacted());

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=789096&r1=789095&r2=789096&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 Sun Jun 28 13:18:35 2009
@@ -18,15 +18,25 @@
  */
 package org.apache.cxf.transport.jms;
 
+import java.io.IOException;
 import java.util.Enumeration;
+import java.util.Iterator;
+import java.util.Map;
 import java.util.Properties;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 
+import javax.jms.DeliveryMode;
+import javax.naming.Context;
+
 import org.apache.cxf.Bus;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.configuration.Configurer;
 import org.apache.cxf.service.model.EndpointInfo;
+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.springframework.jms.support.destination.JndiDestinationResolver;
 import org.springframework.jndi.JndiTemplate;
 
@@ -43,6 +53,20 @@
 
     public JMSConfiguration createJMSConfigurationFromEndpointInfo(Bus bus,
                                                                    EndpointInfo endpointInfo,
+                                                                   boolean isConduit) 
+        throws IOException {
+        String transportId = endpointInfo.getTransportId();
+        if (transportId.equals(JMSSpecConstants.SOAP_JMS_SPECIFICIATION_TRANSPORTID)) {
+            return createJMSConfigurationFromEndpointInfoForSpecification(bus, endpointInfo,
+                                                                          isConduit);
+        } else {
+            return createJMSConfigurationFromEndpointInfoForOldJMS(bus, endpointInfo, isConduit);
+        }
+
+    }
+    
+    public JMSConfiguration createJMSConfigurationFromEndpointInfoForOldJMS(Bus bus,
+                                                                   EndpointInfo endpointInfo,
                                                                    boolean isConduit) {
 
         // Retrieve configuration information that was extracted from the WSDL
@@ -211,4 +235,157 @@
         }
         return env;
     }
+
+    /**
+     * @param bus
+     * @param endpointInfo
+     * @param isConduit
+     * @return
+     */
+    private JMSConfiguration createJMSConfigurationFromEndpointInfoForSpecification(
+                                                                                    Bus bus,
+                                                                                    EndpointInfo endpointInfo,
+                                                                                    boolean isConduit) 
+        throws IOException {
+        JMSEndpoint endpoint = null;
+        try {
+            endpoint = JMSEndpointParser.createEndpoint(endpointInfo.getAddress());
+        } catch (Exception e) {
+            throw new IOException(e.getMessage());
+        }
+        // TODO Need to check if we need to retrieve configuration information that 
+        // was extracted from the WSDL
+        //address = endpointInfo.getTraversedExtensor(new AddressType(), AddressType.class); 
+        clientConfig = endpointInfo.getTraversedExtensor(new ClientConfig(), ClientConfig.class);
+        runtimePolicy = endpointInfo.getTraversedExtensor(new ClientBehaviorPolicyType(),
+                                                          ClientBehaviorPolicyType.class);
+        serverConfig = endpointInfo.getTraversedExtensor(new ServerConfig(), ServerConfig.class);
+        sessionPool = endpointInfo.getTraversedExtensor(new SessionPoolType(),
+                                                        SessionPoolType.class);
+        serverBehavior = endpointInfo.getTraversedExtensor(new ServerBehaviorPolicyType(),
+                                                           ServerBehaviorPolicyType.class);
+        String name = endpointInfo.getName().toString()
+                      + (isConduit ? ".jms-conduit" : ".jms-destination");
+
+        // Try to retrieve configuration information from the spring
+        // config. Search for a conduit or destination with name=endpoint name + ".jms-conduit"
+        // or ".jms-destination"
+
+        Configurer configurer = bus.getExtension(Configurer.class);
+        if (null != configurer) {
+            configurer.configureBean(name, this);
+        }
+
+        if (jmsConfig == null) {
+            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 (jmsConfig.isUsingEndpointInfo()) {
+            JndiTemplate jt = new JndiTemplate();
+            jt.setEnvironment(JMSOldConfigHolder.getInitialContextEnv(endpoint));
+            boolean pubSubDomain = false;
+            pubSubDomain = endpoint.getJmsVariant().equals(JMSURIConstants.TOPIC);
+            JNDIConfiguration jndiConfig = new JNDIConfiguration();
+            jndiConfig.setJndiConnectionFactoryName(endpoint.getJndiConnectionFactoryName());
+            jmsConfig.setJndiTemplate(jt);
+            // TODO need to check the userName and Password setting the specification
+            /*
+             * jndiConfig.setConnectionUserName(address.getConnectionUserName());
+             * jndiConfig.setConnectionPassword(address.getConnectionPassword());
+             */
+            jmsConfig.setJndiConfig(jndiConfig);
+            /*
+             * if (address.isSetReconnectOnException()) {
+             * jmsConfig.setReconnectOnException(address.isReconnectOnException()); }
+             */
+            jmsConfig.setDurableSubscriptionName(serverBehavior.getDurableSubscriberName());
+            jmsConfig.setExplicitQosEnabled(true);
+            if (jmsConfig.getMessageSelector() == null) {
+                jmsConfig.setMessageSelector(serverBehavior.getMessageSelector());
+            }
+            if (isConduit && runtimePolicy.isSetMessageType()) {
+                jmsConfig.setMessageType(runtimePolicy.getMessageType().value());
+            }
+            jmsConfig.setPubSubDomain(pubSubDomain);
+            jmsConfig.setPubSubNoLocal(true);
+            if (clientConfig.isSetClientReceiveTimeout()) {
+                jmsConfig.setReceiveTimeout(clientConfig.getClientReceiveTimeout());
+            }
+            if (clientConfig.isSetUseConduitIdSelector()) {
+                jmsConfig.setUseConduitIdSelector(clientConfig.isUseConduitIdSelector());
+            }
+            if (clientConfig.isSetConduitSelectorPrefix()) {
+                jmsConfig.setConduitSelectorPrefix(clientConfig.getConduitSelectorPrefix());
+            }
+            jmsConfig.setSubscriptionDurable(serverBehavior.isSetDurableSubscriberName());
+            jmsConfig.setDurableSubscriptionName(serverBehavior.getDurableSubscriberName());
+            jmsConfig.setDurableSubscriptionClientId(serverConfig.getDurableSubscriptionClientId());
+            if (sessionPool.isSetHighWaterMark()) {
+                jmsConfig.setMaxConcurrentTasks(sessionPool.getHighWaterMark());
+            }
+            if (endpoint.isSetTimeToLive()) {
+                long timeToLive = endpoint.getTimeToLive();
+                jmsConfig.setTimeToLive(timeToLive);
+            }
+            /*
+             * if (address.isSetUseJms11()) { jmsConfig.setUseJms11(address.isUseJms11()); }
+             */
+            if (serverBehavior.isSetTransactional()) {
+                jmsConfig.setSessionTransacted(serverBehavior.isTransactional());
+            }
+            boolean useJndi = endpoint.getJmsVariant().equals(JMSURIConstants.JNDI);
+            if (useJndi) {
+                // Setup Destination jndi destination resolver
+                final JndiDestinationResolver jndiDestinationResolver = new JndiDestinationResolver();
+                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());
+            }
+        }
+        
+        String requestURI = endpoint.getRequestURI();
+        jmsConfig.setRequestURI(requestURI);
+
+        String targetService = endpoint.getParameter(JMSSpecConstants.TARGETSERVICE_PARAMETER_NAME);
+        jmsConfig.setTargetService(targetService);
+        return jmsConfig;
+    }
+
+    private static Properties getInitialContextEnv(JMSEndpoint endpoint) {
+        Properties env = new Properties();
+        env.put(Context.INITIAL_CONTEXT_FACTORY, endpoint.getJndiInitialContextFactory());
+        env.put(Context.PROVIDER_URL, endpoint.getJndiURL());
+        Map addParas = endpoint.getJndiParameters();
+        Iterator keyIter = addParas.keySet().iterator();
+        while (keyIter.hasNext()) {
+            String key = (String)keyIter.next();
+            env.put(key, addParas.get(key));
+        }
+        if (LOG.isLoggable(Level.FINE)) {
+            Enumeration props = env.propertyNames();
+            while (props.hasMoreElements()) {
+                String name = (String)props.nextElement();
+                String value = env.getProperty(name);
+                LOG.log(Level.FINE, "Context property: " + name + " | " + value);
+            }
+        }
+        return env;
+    }
 }

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java?rev=789096&r1=789095&r2=789096&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSTransportFactory.java Sun Jun 28 13:18:35 2009
@@ -40,6 +40,7 @@
     private static final Set<String> URI_PREFIXES = new HashSet<String>();
     static {
         URI_PREFIXES.add("jms://");
+        URI_PREFIXES.add("jms:");
     }
 
     private Bus bus;

Modified: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSUtils.java?rev=789096&r1=789095&r2=789096&view=diff
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSUtils.java (original)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSUtils.java Sun Jun 28 13:18:35 2009
@@ -38,9 +38,11 @@
 import javax.jms.Session;
 
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.common.util.SOAPConstants;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.helpers.HttpHeaderHelper;
 import org.apache.cxf.security.SecurityContext;
+import org.apache.cxf.transport.jms.spec.JMSSpecConstants;
 import org.springframework.jms.support.JmsUtils;
 import org.springframework.jms.support.converter.MessageConversionException;
 import org.springframework.jms.support.converter.SimpleMessageConverter102;
@@ -132,26 +134,26 @@
     }
 
     public static void populateIncomingContext(javax.jms.Message message,
-                                               org.apache.cxf.message.Message inMessage, String headerType)
+                                               org.apache.cxf.message.Message inMessage, String messageType)
         throws UnsupportedEncodingException {
         try {
-            JMSMessageHeadersType headers = null;
-            headers = (JMSMessageHeadersType)inMessage.get(headerType);
-            if (headers == null) {
-                headers = new JMSMessageHeadersType();
-                inMessage.put(headerType, headers);
-            }
-            headers.setJMSCorrelationID(message.getJMSCorrelationID());
-            headers.setJMSDeliveryMode(new Integer(message.getJMSDeliveryMode()));
-            headers.setJMSExpiration(new Long(message.getJMSExpiration()));
-            headers.setJMSMessageID(message.getJMSMessageID());
-            headers.setJMSPriority(new Integer(message.getJMSPriority()));
-            headers.setJMSRedelivered(Boolean.valueOf(message.getJMSRedelivered()));
-            headers.setJMSTimeStamp(new Long(message.getJMSTimestamp()));
-            headers.setJMSType(message.getJMSType());
+            JMSMessageHeadersType messageProperties = null;
+            messageProperties = (JMSMessageHeadersType)inMessage.get(messageType);
+            if (messageProperties == null) {
+                messageProperties = new JMSMessageHeadersType();
+                inMessage.put(messageType, messageProperties);
+            }
+            messageProperties.setJMSCorrelationID(message.getJMSCorrelationID());
+            messageProperties.setJMSDeliveryMode(new Integer(message.getJMSDeliveryMode()));
+            messageProperties.setJMSExpiration(new Long(message.getJMSExpiration()));
+            messageProperties.setJMSMessageID(message.getJMSMessageID());
+            messageProperties.setJMSPriority(new Integer(message.getJMSPriority()));
+            messageProperties.setJMSRedelivered(Boolean.valueOf(message.getJMSRedelivered()));
+            messageProperties.setJMSTimeStamp(new Long(message.getJMSTimestamp()));
+            messageProperties.setJMSType(message.getJMSType());
 
             Map<String, List<String>> protHeaders = new HashMap<String, List<String>>();
-            List<JMSPropertyType> props = headers.getProperty();
+            List<JMSPropertyType> props = messageProperties.getProperty();
             Enumeration enm = message.getPropertyNames();
             while (enm.hasMoreElements()) {
                 String name = (String)enm.nextElement();
@@ -174,6 +176,54 @@
 
             SecurityContext securityContext = buildSecurityContext(message);
             inMessage.put(SecurityContext.class, securityContext);
+
+            populateIncomingMessageProperties(message, inMessage, messageProperties);
+        } catch (JMSException ex) {
+            throw JmsUtils.convertJmsAccessException(ex);
+        }
+    }
+
+    /**
+     * @param jmsMessage
+     * @param inMessage
+     * @param messagePropertiesType
+     */
+    private static void populateIncomingMessageProperties(Message jmsMessage,
+                                                          org.apache.cxf.message.Message inMessage,
+                                                          JMSMessageHeadersType messageProperties)
+        throws UnsupportedEncodingException {
+        try {
+            if (jmsMessage.propertyExists(JMSSpecConstants.TARGETSERVICE_FIELD)) {
+                messageProperties.setSOAPJMSTargetService(jmsMessage
+                    .getStringProperty(JMSSpecConstants.TARGETSERVICE_FIELD));
+            }
+            if (jmsMessage.propertyExists(JMSSpecConstants.BINDINGVERSION_FIELD)) {
+                messageProperties.setSOAPJMSBindingVersion(jmsMessage
+                    .getStringProperty(JMSSpecConstants.BINDINGVERSION_FIELD));
+            }
+            if (jmsMessage.propertyExists(JMSSpecConstants.CONTENTTYPE_FIELD)) {
+                messageProperties.setSOAPJMSContentType(jmsMessage
+                    .getStringProperty(JMSSpecConstants.CONTENTTYPE_FIELD));
+            }
+            if (jmsMessage.propertyExists(JMSSpecConstants.SOAPACTION_FIELD)) {
+                messageProperties.setSOAPJMSSOAPAction(jmsMessage
+                    .getStringProperty(JMSSpecConstants.SOAPACTION_FIELD));
+            }
+            if (jmsMessage.propertyExists(JMSSpecConstants.ISFAULT_FIELD)) {
+                messageProperties.setSOAPJMSIsFault(jmsMessage
+                    .getBooleanProperty(JMSSpecConstants.ISFAULT_FIELD));
+            }
+            if (jmsMessage.propertyExists(JMSSpecConstants.REQUESTURI_FIELD)) {
+                messageProperties.setSOAPJMSRequestURI(jmsMessage
+                    .getStringProperty(JMSSpecConstants.REQUESTURI_FIELD));
+            }
+
+            if (messageProperties.isSetSOAPJMSContentType()) {
+                String contentType = messageProperties.getSOAPJMSContentType();
+                inMessage.put(org.apache.cxf.message.Message.CONTENT_TYPE, contentType);
+                // set the message encoding
+                inMessage.put(org.apache.cxf.message.Message.ENCODING, getEncoding(contentType));
+            }
         } catch (JMSException ex) {
             throw JmsUtils.convertJmsAccessException(ex);
         }
@@ -299,34 +349,217 @@
         }
         ct.add(contentType);
     }
+    
+    public static String getContentType(org.apache.cxf.message.Message message) {
+        String contentType = (String)message.get(org.apache.cxf.message.Message.CONTENT_TYPE);
+        String enc = (String)message.get(org.apache.cxf.message.Message.ENCODING);
+        // add the encoding information
+        if (null != contentType) {
+            if (enc != null && contentType.indexOf("charset=") == -1) {
+                contentType = contentType + "; charset=" + enc;
+            }
+        } else if (enc != null) {
+            contentType = "text/xml; charset=" + enc;
+        } else {
+            contentType = "text/xml";
+        }
 
-    public static Message buildJMSMessageFromCXFMessage(org.apache.cxf.message.Message outMessage,
-                                                        Object payload, String messageType, Session session,
-                                                        Destination replyTo, String correlationId)
-        throws JMSException {
+        // Retrieve or create protocol headers
+        Map<String, List<String>> headers = CastUtils.cast((Map<?, ?>)message
+            .get(org.apache.cxf.message.Message.PROTOCOL_HEADERS));
+        if (null == headers) {
+            headers = new HashMap<String, List<String>>();
+            message.put(org.apache.cxf.message.Message.PROTOCOL_HEADERS, headers);
+        }
+        return contentType;
+    }
+
+    public static Message buildJMSMessageFromCXFMessage(JMSConfiguration jmsConfig,
+                                                        org.apache.cxf.message.Message outMessage,
+                                                        Object payload, String messageType,
+                                                        Session session, Destination replyTo,
+                                                        String correlationId) throws JMSException {
         Message jmsMessage = JMSUtils.createAndSetPayload(payload, session, messageType);
 
         if (replyTo != null) {
             jmsMessage.setJMSReplyTo(replyTo);
         }
 
-        JMSMessageHeadersType headers = (JMSMessageHeadersType)outMessage
+        JMSMessageHeadersType messageProperties = (JMSMessageHeadersType)outMessage
             .get(JMSConstants.JMS_CLIENT_REQUEST_HEADERS);
-
-        if (headers == null) {
-            headers = new JMSMessageHeadersType();
+        if (messageProperties == null) {
+            messageProperties = new JMSMessageHeadersType();
         }
+        JMSUtils.prepareJMSProperties(messageProperties, outMessage, jmsConfig);
+        JMSUtils.setJMSProperties(jmsMessage, messageProperties);
 
-        JMSUtils.setMessageProperties(headers, jmsMessage);
-        // ensure that the contentType is set to the out jms message header
-        JMSUtils.addContentTypeToProtocolHeader(outMessage);
-        Map<String, List<String>> protHeaders = CastUtils.cast((Map<?, ?>)outMessage
-            .get(org.apache.cxf.message.Message.PROTOCOL_HEADERS));
-        JMSUtils.addProtocolHeaders(jmsMessage, protHeaders);
         jmsMessage.setJMSCorrelationID(correlationId);
         return jmsMessage;
     }
 
+    /**
+     * @param messageProperties
+     * @param jmsMessage
+     */
+    static void setJMSProperties(Message jmsMessage, JMSMessageHeadersType messageProperties)
+        throws JMSException {
+
+        setJMSMessageHeaderProperties(jmsMessage, messageProperties);
+        setJMSMessageProperties(jmsMessage, messageProperties);
+    }
+
+    /**
+     * @param jmsMessage
+     * @param messageProperties
+     */
+    private static void setJMSMessageHeaderProperties(Message jmsMessage,
+                                                      JMSMessageHeadersType messageProperties)
+        throws JMSException {
+        if (messageProperties.isSetJMSDeliveryMode()) {
+            jmsMessage.setJMSDeliveryMode(messageProperties.getJMSDeliveryMode());
+        }
+        // if (messageProperties.isSetTimeToLive()) {
+        // jmsMessage.setJMSExpiration(expiration);
+        // }
+        if (messageProperties.isSetJMSPriority()) {
+            jmsMessage.setJMSPriority(messageProperties.getJMSPriority());
+        }
+    }
+
+    /**
+     * @param jmsMessage
+     * @param messageProperties
+     */
+    private static void setJMSMessageProperties(Message jmsMessage, JMSMessageHeadersType messageProperties)
+        throws JMSException {
+
+        if (messageProperties.isSetSOAPJMSTargetService()) {
+            jmsMessage.setStringProperty(JMSSpecConstants.TARGETSERVICE_FIELD, messageProperties
+                .getSOAPJMSTargetService());
+        }
+
+        jmsMessage.setStringProperty(JMSSpecConstants.BINDINGVERSION_FIELD, messageProperties
+            .getSOAPJMSBindingVersion());
+
+        if (messageProperties.isSetSOAPJMSContentType()) {
+            jmsMessage.setStringProperty(JMSSpecConstants.CONTENTTYPE_FIELD, messageProperties
+                .getSOAPJMSContentType());
+        }
+
+        if (messageProperties.isSetSOAPJMSSOAPAction()) {
+            jmsMessage.setStringProperty(JMSSpecConstants.SOAPACTION_FIELD, messageProperties
+                .getSOAPJMSSOAPAction());
+        }
+
+        if (messageProperties.isSetSOAPJMSIsFault()) {
+            jmsMessage.setBooleanProperty(JMSSpecConstants.ISFAULT_FIELD, messageProperties
+                .isSOAPJMSIsFault());
+        }
+
+        if (messageProperties.isSetSOAPJMSRequestURI()) {
+            jmsMessage.setStringProperty(JMSSpecConstants.REQUESTURI_FIELD, messageProperties
+                .getSOAPJMSRequestURI());
+        }
+
+        if (messageProperties != null && messageProperties.isSetProperty()) {
+            List<JMSPropertyType> props = messageProperties.getProperty();
+            for (int x = 0; x < props.size(); x++) {
+                jmsMessage.setStringProperty(props.get(x).getName(), props.get(x).getValue());
+            }
+        }
+    }
+
+    /**
+     * @param messageProperteis
+     * @param outMessage
+     * @param jmsConfig
+     */
+    static void prepareJMSProperties(JMSMessageHeadersType messageProperteis,
+                                     org.apache.cxf.message.Message outMessage,
+                                     JMSConfiguration jmsConfig) {
+        prepareJMSMessageHeaderProperties(messageProperteis, outMessage, jmsConfig);
+
+        prepareJMSMessageProperties(messageProperteis, outMessage, jmsConfig);
+
+    }
+
+    /**
+     * @param messageProperteis
+     * @param outMessage
+     * @param jmsConfig
+     */
+    private static void prepareJMSMessageHeaderProperties(
+                                                          JMSMessageHeadersType messageProperteis,
+                                                          org.apache.cxf.message.Message outMessage,
+                                                          JMSConfiguration jmsConfig) {
+        if (!messageProperteis.isSetJMSDeliveryMode()) {
+            messageProperteis.setJMSDeliveryMode(jmsConfig.getDeliveryMode());
+        }
+        if (!messageProperteis.isSetTimeToLive()) {
+            messageProperteis.setTimeToLive(jmsConfig.getTimeToLive());
+        }
+        if (!messageProperteis.isSetJMSPriority()) {
+            messageProperteis.setJMSPriority(jmsConfig.getPriority());
+        }
+    }
+
+    /**
+     * @param messageProperties
+     * @param outMessage
+     * @param jmsConfig
+     */
+    private static void prepareJMSMessageProperties(JMSMessageHeadersType messageProperties,
+                                                    org.apache.cxf.message.Message outMessage,
+                                                    JMSConfiguration jmsConfig) {
+        if (!messageProperties.isSetSOAPJMSTargetService()) {
+            messageProperties.setSOAPJMSTargetService(jmsConfig.getTargetService());
+        }
+        if (!messageProperties.isSetSOAPJMSBindingVersion()) {
+            messageProperties.setSOAPJMSBindingVersion("1.0");
+        }
+        messageProperties.setSOAPJMSContentType(getContentType(outMessage));
+        String soapAction = null;
+        // Retrieve or create protocol headers
+        Map<String, List<String>> headers = CastUtils.cast((Map<?, ?>)outMessage
+            .get(org.apache.cxf.message.Message.PROTOCOL_HEADERS));
+        if (headers != null) {
+            List<String> action = headers.get(SOAPConstants.SOAP_ACTION);
+            if (action != null && action.size() > 0) {
+                soapAction = action.get(0);
+            }
+        }
+        if (soapAction != null) {
+            messageProperties.setSOAPJMSSOAPAction(soapAction);
+        }
+        if (!messageProperties.isSetSOAPJMSIsFault()) {
+            if (outMessage.getContent(Exception.class) != null) {
+                messageProperties.setSOAPJMSIsFault(true);
+            } else {
+                messageProperties.setSOAPJMSIsFault(false);
+            }
+        }
+        if (!messageProperties.isSetSOAPJMSRequestURI()) {
+            messageProperties.setSOAPJMSRequestURI(jmsConfig.getRequestURI());
+        }
+    }
+
+    /**
+     * @param messageProperties
+     * @param inMessageProperties
+     */
+    public static void initResponseMessageProperties(JMSMessageHeadersType messageProperties,
+                                                     JMSMessageHeadersType inMessageProperties) {
+        messageProperties.setJMSDeliveryMode(inMessageProperties.getJMSDeliveryMode());
+        // messageProperties.setJMSExpiration(inMessageProperties.getJMSExpiration());
+        messageProperties.setJMSPriority(inMessageProperties.getJMSPriority());
+        //messageProperties.setJMSCorrelationID(inMessageProperties.getJMSMessageID());
+        // JMSDestination
+
+        messageProperties.setSOAPJMSRequestURI(inMessageProperties.getSOAPJMSRequestURI());
+        messageProperties.setSOAPJMSBindingVersion(inMessageProperties.getSOAPJMSBindingVersion());
+        // contenttype.
+    }
+
     public static String createCorrelationId(final String prefix, long i) {
         String index = Long.toHexString(i);
         StringBuffer id = new StringBuffer(prefix);

Added: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java?rev=789096&view=auto
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java (added)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,71 @@
+/**
+ * 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.spec;
+
+
+/**
+ * 
+ */
+public final class JMSSpecConstants {
+
+    public static final String SOAP_JMS_SPECIFICIATION_TRANSPORTID = "http://www.w3.org/2008/07/"
+                                                                     + "soap/bindings/JMS/";
+    public static final String SOAP_JMS_NAMESPACE = SOAP_JMS_SPECIFICIATION_TRANSPORTID;
+
+    public static final String SOAP_JMS_PREFIX = "SOAPJMS_";
+
+    // Connection to a destination properties
+    // just for jms uri
+    public static final String LOOKUPVARIANT_PARAMETER_NAME = "lookupVariant";
+    public static final String DESTINATIONNAME_PARAMETER_NAME = "destinationName";
+    // other connection destination properties
+    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 JNDICONTEXTPARAMETER_PARAMETER_NAME = "jndiContextParameter";
+
+    // JMS Message Header properties
+    public static final String DELIVERYMODE_PARAMETER_NAME = "deliveryMode";
+    // Expiration Time
+    public static final String TIMETOLIVE_PARAMETER_NAME = "timeToLive";
+    public static final String PRIORITY_PARAMETER_NAME = "priority";
+    // Destination
+    public static final String REPLYTONAME_PARAMETER_NAME = "replyToName";
+
+    // JMS Message properties' names.
+    public static final String REQUESTURI_PARAMETER_NAME = "requestURI";
+    public static final String BINDINGVERSION_PARAMETER_NAME = "bindingVersion";
+    public static final String SOAPACTION_PARAMETER_NAME = "soapAction";
+    public static final String TARGETSERVICE_PARAMETER_NAME = "targetService";
+    public static final String CONTENTTYPE_PARAMETER_NAME = "contentType";
+    public static final String ISFAULT_PARAMETER_NAME = "isFault";
+
+    // JMS Field name
+    public static final String REQUESTURI_FIELD = SOAP_JMS_PREFIX + REQUESTURI_PARAMETER_NAME;
+    public static final String BINDINGVERSION_FIELD = SOAP_JMS_PREFIX
+                                                      + BINDINGVERSION_PARAMETER_NAME;
+    public static final String SOAPACTION_FIELD = SOAP_JMS_PREFIX + SOAPACTION_PARAMETER_NAME;
+    public static final String TARGETSERVICE_FIELD = SOAP_JMS_PREFIX + TARGETSERVICE_PARAMETER_NAME;
+    public static final String CONTENTTYPE_FIELD = SOAP_JMS_PREFIX + CONTENTTYPE_PARAMETER_NAME;
+    public static final String ISFAULT_FIELD = SOAP_JMS_PREFIX + ISFAULT_PARAMETER_NAME;
+    
+    private JMSSpecConstants() {
+    }
+}

Propchange: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/spec/JMSSpecConstants.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: 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=789096&view=auto
==============================================================================
--- cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java (added)
+++ cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java Sun Jun 28 13:18:35 2009
@@ -0,0 +1,90 @@
+/**
+ * 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 java.util.HashMap;
+import java.util.Iterator;
+import java.util.Map;
+
+/**
+ * 
+ */
+public class JMSEndpoint extends JMSEndpointType {
+    Map jndiParameters = new HashMap();
+    Map parameters = new HashMap();
+
+    /**
+     * @param uri
+     * @param subject
+     */
+    public JMSEndpoint(String endpointUri, String jmsVariant, String destinationName) {
+        this.endpointUri = endpointUri;
+        this.jmsVariant = jmsVariant;
+        this.destinationName = destinationName;
+    }
+
+    public String getRequestURI() {
+        String requestUri = "jms:" + jmsVariant + ":" + destinationName;
+        boolean first = true;
+        Iterator iter = parameters.keySet().iterator();
+        while (iter.hasNext()) {
+            String key = (String)iter.next();
+            String value = (String)parameters.get(key);
+            if (first) {
+                requestUri += "?" + key + "=" + value;
+                first = false;
+            } else {
+                requestUri += "&" + key + "=" + value;
+            }
+        }
+        return requestUri;
+    }
+
+    /**
+     * @param key
+     * @param value
+     */
+    public void putJndiParameter(String key, String value) {
+        jndiParameters.put(key, value);
+    }
+
+    public void putParameter(String key, String value) {
+        parameters.put(key, value);
+    }
+
+    /**
+     * @param targetserviceParameterName
+     * @return
+     */
+    public String getParameter(String key) {
+        return (String)parameters.get(key);
+    }
+
+    public Map getJndiParameters() {
+        return jndiParameters;
+    }
+
+    /**
+     * @return
+     */
+    public Map getParameters() {
+        return parameters;
+    }
+}

Propchange: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/uri/JMSEndpoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date