You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by an...@apache.org on 2006/12/21 16:02:28 UTC

svn commit: r489381 - in /incubator/tuscany/java/sca/services/bindings/binding.jms/src: main/java/org/apache/tuscany/binding/jms/ main/java/org/apache/tuscany/binding/jms/databinding/ test/java/org/apache/tuscany/binding/jms/

Author: antelder
Date: Thu Dec 21 07:02:27 2006
New Revision: 489381

URL: http://svn.apache.org/viewvc?view=rev&rev=489381
Log:
Change to use OperationAndDataBinding as described in the spec

Added:
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java   (with props)
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java   (with props)
Removed:
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationSelector.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationSelector.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java
Modified:
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java

Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java?view=auto&rev=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java Thu Dec 21 07:02:27 2006
@@ -0,0 +1,162 @@
+/*
+ * 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.tuscany.binding.jms;
+
+import java.io.Serializable;
+import java.io.StringReader;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+import javax.jms.TextMessage;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+
+public class DefaultOperationAndDataBinding implements OperationAndDataBinding {
+
+    protected String operationPropertyName;
+
+    private boolean xmlFormat;
+
+    public DefaultOperationAndDataBinding(JMSBinding jmsBinding) {
+        this.operationPropertyName = jmsBinding.getOperationSelectorPropertyName();
+        this.xmlFormat = jmsBinding.isXMLFormat();
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#getOperationName(javax.jms.Message)
+     */
+    public String getOperationName(Message message) {
+        try {
+
+            return message.getStringProperty(operationPropertyName);
+
+        } catch (JMSException e) {
+            throw new JMSBindingRuntimeException("Exception retreiving operation name from message", e);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#setOperationName(javax.jms.Message,
+     *      java.lang.String)
+     */
+    public void setOperationName(String operationName, Message message) {
+        try {
+
+            message.setStringProperty(operationPropertyName, operationName);
+
+        } catch (JMSException e) {
+            throw new JMSBindingRuntimeException("Exception setting the operation name on message", e);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#extractPayload(javax.jms.Session,
+     *      java.lang.Object)
+     */
+    public Message createJMSMessage(Session session, Object o) {
+        if (xmlFormat) {
+            return createXMLJMSMessage(session, o);
+        } else {
+            return createObjectJMSMessage(session, o);
+        }
+    }
+
+    /*
+     * (non-Javadoc)
+     * 
+     * @see org.apache.tuscany.binding.jms.OperationAndDataBinding#extractPayload(javax.jms.Message)
+     */
+    public Object extractPayload(Message msg) {
+        if (xmlFormat) {
+            return extractXMLPayload(msg);
+        } else {
+            return extractObjectPayload(msg);
+        }
+    }
+
+    protected Object extractXMLPayload(Message msg) {
+        try {
+
+            String xml = ((TextMessage)msg).getText();
+
+            XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(xml));
+            StAXOMBuilder builder = new StAXOMBuilder(reader);
+            OMElement omElement = builder.getDocumentElement();
+
+            return new Object[] {omElement};
+
+        } catch (XMLStreamException e) {
+            throw new JMSBindingRuntimeException(e);
+        } catch (JMSException e) {
+            throw new JMSBindingRuntimeException(e);
+        }
+    }
+
+    protected Message createXMLJMSMessage(Session session, Object o) {
+        try {
+
+            TextMessage message = session.createTextMessage();
+
+            if (o instanceof OMElement) {
+                message.setText(o.toString());
+            } else {
+                message.setText(((Object[])o)[0].toString());
+            }
+
+            return message;
+
+        } catch (JMSException e) {
+            throw new JMSBindingRuntimeException(e);
+        }
+    }
+
+    protected Object extractObjectPayload(Message msg) {
+        try {
+
+            return ((ObjectMessage)msg).getObject();
+
+        } catch (JMSException e) {
+            throw new JMSBindingRuntimeException(e);
+        }
+    }
+
+    protected Message createObjectJMSMessage(Session session, Object o) {
+        try {
+
+            ObjectMessage message = session.createObjectMessage(); // default
+            message.setObject((Serializable)o);
+            return message;
+
+        } catch (JMSException e) {
+            throw new JMSBindingRuntimeException(e);
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/DefaultOperationAndDataBinding.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBinding.java Thu Dec 21 07:02:27 2006
@@ -57,11 +57,19 @@
 	
 	private String operationSelectorName;
 	
-	private String operationSelectorPropertyName = "OpName";
+	private String operationSelectorPropertyName = DEFAULT_OPERATION_PROP_NAME;
 
         private String correlationScheme;
         private String responseDestinationName;
 
+        private String requestOperationAndDatabindingName = DEFAULT_ODB_CLASSNAME;
+        private String responseOperationAndDatabindingName = DEFAULT_ODB_CLASSNAME;
+
+        private boolean xmlFormat;
+        
+        public static final String DEFAULT_ODB_CLASSNAME = DefaultOperationAndDataBinding.class.getName();
+        public static final String DEFAULT_OPERATION_PROP_NAME = "scaOperationName";
+
 	public JMSBinding(int destinationType, String destinationName, String connectionFactoryName, String activationSpecName, String initialContextFactoryName, String providerURL, int deliveryMode, int timeToLive, int priority, String replyTo) {
 		super();
 		this.destinationType = destinationType;
@@ -211,6 +219,30 @@
     public void setCreateResponseDestination(String create) {
         // TODO Auto-generated method stub
         
+    }
+
+    public void setRequestOperationAndDatabindingName(String name) {
+        this.requestOperationAndDatabindingName = name;
+    }
+
+    public String getRequestOperationAndDatabindingName() {
+        return requestOperationAndDatabindingName;
+    }
+
+    public void setResponseOperationAndDatabindingName(String name) {
+        this.responseOperationAndDatabindingName = name;
+    }
+
+    public String getResponseOperationAndDatabindingName() {
+        return responseOperationAndDatabindingName;
+    }
+
+    public boolean isXMLFormat() {
+        return xmlFormat;
+    }
+    
+    public void setXMLFormat(boolean b) {
+        this.xmlFormat = b;
     }
 
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingBuilder.java Thu Dec 21 07:02:27 2006
@@ -23,7 +23,6 @@
 import javax.naming.NamingException;
 
 import org.apache.axiom.om.OMElement;
-import org.apache.tuscany.binding.jms.databinding.XMLTextMsgDataBinding;
 import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.component.Reference;
@@ -59,22 +58,19 @@
         JMSBinding jmsBinding = serviceDefinition.getBinding();
         Class<?> interfaze = serviceDefinition.getServiceContract().getInterfaceClass();
         
-        JMSResourceFactory jmsResourceFactory;
-        OperationSelector opSec;
-		try {
-			jmsResourceFactory = getJMSResourceFactory(jmsBinding);
-			opSec = getOperationSelector(jmsBinding);
-		} catch (JMSBindingException e) {
-			throw new JMSBindingRuntimeException("Error building JMS Service",e);
-		}
-                
         ServiceContract serviceContract = serviceDefinition.getServiceContract();
+        jmsBinding.setXMLFormat(serviceContract instanceof WSDLServiceContract);
+
+        JMSResourceFactory jmsResourceFactory = getJMSResourceFactory(jmsBinding);
+
         if (serviceContract instanceof WSDLServiceContract) {
             serviceContract.setDataBinding(OM_DATA_BINDING);
-            jmsResourceFactory.setDataBinding(new XMLTextMsgDataBinding());
         }
         
-        Service service = new JMSService(serviceDefinition.getName(),parent, wireService, jmsBinding, jmsResourceFactory,opSec,interfaze);
+        OperationAndDataBinding requestODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+        OperationAndDataBinding responseODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+        
+        Service service = new JMSService(serviceDefinition.getName(),parent, wireService, jmsBinding, jmsResourceFactory, requestODB, responseODB, interfaze);
         service.setBindingServiceContract(serviceContract);
         
         return service;
@@ -96,14 +92,8 @@
         serviceContract.setDataBinding(OM_DATA_BINDING);
         
         JMSBinding jmsBinding = referenceDefinition.getBinding();
-        JMSResourceFactory jmsResourceFactory;
-		OperationSelector opSec;
-		try {
-			jmsResourceFactory = getJMSResourceFactory(jmsBinding);
-			opSec = getOperationSelector(jmsBinding);
-		} catch (JMSBindingException e) {
-			throw new JMSBindingRuntimeException("Error building JMS reference",e);
-		}
+        JMSResourceFactory jmsResourceFactory = getJMSResourceFactory(jmsBinding);
+
                 Destination requestDest;
                 Destination replyDest = null;
                 try {
@@ -115,13 +105,16 @@
                     throw new JMSBindingRuntimeException(e);
                 }
         
-        Reference reference = new JMSReference(name,parent,wireService, jmsBinding, jmsResourceFactory,opSec,interfaze, requestDest, replyDest);
+        OperationAndDataBinding requestODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+        OperationAndDataBinding responseODB = getRequestOperationAndDatabinding(jmsBinding, deploymentContext.getClassLoader());
+                
+        Reference reference = new JMSReference(name,parent,wireService, jmsBinding, jmsResourceFactory, requestODB, responseODB, interfaze, requestDest, replyDest);
         reference.setBindingServiceContract(serviceContract);
         return reference;
 
     }
         
-    private JMSResourceFactory getJMSResourceFactory(JMSBinding jmsBinding) throws JMSBindingException {
+    private JMSResourceFactory getJMSResourceFactory(JMSBinding jmsBinding) {
     	String className = jmsBinding.getJmsResourceFactoryName();   
     	if (className != null && !className.equals("")){
 			try {
@@ -129,52 +122,56 @@
 				Constructor constructor = factoryClass.getDeclaredConstructor(new Class[]{JMSBinding.class});
 				return (JMSResourceFactory) constructor.newInstance(jmsBinding);
 			} catch (ClassNotFoundException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			} catch (SecurityException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			} catch (NoSuchMethodException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			} catch (IllegalArgumentException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			} catch (InstantiationException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			} catch (IllegalAccessException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			} catch (InvocationTargetException e) {
-				throw new JMSBindingException("Error loading the JMSResourceFactory",e);
+				throw new JMSBindingRuntimeException("Error loading the JMSResourceFactory",e);
 			}
     	}else{
     		return new SimpleJMSResourceFactory(jmsBinding);
     	}	
 		
 	}
-    
 
-	private OperationSelector getOperationSelector(JMSBinding jmsBinding) throws JMSBindingException {
-		String className = jmsBinding.getOperationSelectorName();    	
-		
-		if (className != null && !className.equals("")){
-			try {
-	    		Class factoryClass = Class.forName(className != null ? className : DEFAULT_OPERATION_SELECTOR);
-				Constructor constructor = factoryClass.getDeclaredConstructor(new Class[]{JMSBinding.class});
-				return (OperationSelector) constructor.newInstance(jmsBinding);
-			} catch (ClassNotFoundException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			} catch (SecurityException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			} catch (NoSuchMethodException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			} catch (IllegalArgumentException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			} catch (InstantiationException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			} catch (IllegalAccessException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			} catch (InvocationTargetException e) {
-				throw new JMSBindingException("Error loading the OperationSelector",e);
-			}
-		}else{
-			return new DefaultOperationSelector(jmsBinding);
-		}
-	}
+    protected OperationAndDataBinding getRequestOperationAndDatabinding(JMSBinding jmsBinding, ClassLoader cl) {
+        String className = jmsBinding.getRequestOperationAndDatabindingName();
+        OperationAndDataBinding operationAndDataBinding = instantiateClass(jmsBinding, cl, className);
+        return operationAndDataBinding;
+    }
+
+    protected OperationAndDataBinding getResponseOperationAndDatabinding(JMSBinding jmsBinding, ClassLoader cl) {
+        String className = jmsBinding.getResponseOperationAndDatabindingName();
+        OperationAndDataBinding operationAndDataBinding = instantiateClass(jmsBinding, cl, className);
+        return operationAndDataBinding;
+    }
+
+    protected OperationAndDataBinding instantiateClass(JMSBinding jmsBinding, ClassLoader cl, String className) {
+        OperationAndDataBinding operationAndDataBinding;
+        if (cl == null) {
+            cl = this.getClass().getClassLoader();
+        }
+        try {
+            Class clazz;
+            try {
+                clazz = cl.loadClass(className);
+            } catch (ClassNotFoundException e) {
+                clazz = this.getClass().getClassLoader().loadClass(className);
+            }
+            Constructor constructor = clazz.getDeclaredConstructor(new Class[] {JMSBinding.class});
+            operationAndDataBinding = (OperationAndDataBinding)constructor.newInstance(jmsBinding);
+
+        } catch (Throwable e) {
+            throw new JMSBindingRuntimeException("Exception instantiating OperationAndDataBinding class", e);
+        }
+        return operationAndDataBinding;
+    }
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader.java Thu Dec 21 07:02:27 2006
@@ -102,7 +102,6 @@
         binding.setReplyTo(replyTo);
         binding.setJmsResourceFactoryName(jmsResourceFactoryName);
         binding.setOperationSelectorName(operationSelector);
-        binding.setOperationSelectorPropertyName(jmsOpSecPropertyName);
         
         if (deliveryMode != null && deliveryMode.trim().equals("")){
         	try{

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSBindingLoader0961.java Thu Dec 21 07:02:27 2006
@@ -140,7 +140,18 @@
     }
 
     protected void parseOperationAndDataBinding(XMLStreamReader reader, JMSBinding jmsBinding) throws XMLStreamException {
-        // TODO Auto-generated method stub
+        String name = reader.getAttributeValue(null, "name");
+        String use = reader.getAttributeValue(null, "use");
+        if (name != null && name.length() > 0) {
+            if ("request".equalsIgnoreCase(use)) {
+                jmsBinding.setRequestOperationAndDatabindingName(name);
+            } else if ("response".equalsIgnoreCase(use)) {
+                jmsBinding.setResponseOperationAndDatabindingName(name);
+            } else {
+                jmsBinding.setRequestOperationAndDatabindingName(name);
+                jmsBinding.setResponseOperationAndDatabindingName(name);
+            }
+        }
     }
 
     protected void parseHeaders(XMLStreamReader reader, JMSBinding jmsBinding) throws XMLStreamException {

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSProxy.java Thu Dec 21 07:02:27 2006
@@ -38,17 +38,20 @@
 
     protected Method operationMethod;
     protected JMSResourceFactory jmsResourceFactory;
-    protected OperationSelector operationSelector;
+    protected OperationAndDataBinding requestOperationAndDataBinding;
+    protected OperationAndDataBinding responseOperationAndDataBinding;
     protected InboundWire inboundWire;
     protected String correlationScheme;
 
     public JMSProxy(InboundWire inboundWire,
                     JMSResourceFactory jmsResourceFactory,
-                    OperationSelector operationSelector,
+                    OperationAndDataBinding requestOperationAndDataBinding,
+                    OperationAndDataBinding responseOperationAndDataBinding,
                     String correlationScheme) throws NamingException {
 
         this.jmsResourceFactory = jmsResourceFactory;
-        this.operationSelector = operationSelector;
+        this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+        this.responseOperationAndDataBinding = responseOperationAndDataBinding;
         this.inboundWire = inboundWire;
         this.correlationScheme = correlationScheme;
     }
@@ -64,8 +67,8 @@
 
     protected Object invokeService(Message requestJMSMsg) throws JMSBindingException, JMSException {
 
-        String operationName = operationSelector.getOperationName(requestJMSMsg);
-        Object requestPayload = jmsResourceFactory.getMessagePayload(requestJMSMsg);
+        String operationName = requestOperationAndDataBinding.getOperationName(requestJMSMsg);
+        Object requestPayload = requestOperationAndDataBinding.extractPayload(requestJMSMsg);
 
         Operation op = (Operation)inboundWire.getServiceContract().getOperations().get(operationName);
         InvocationChain chain = inboundWire.getInvocationChains().get(op);
@@ -95,7 +98,11 @@
             }
 
             Session session = jmsResourceFactory.createSession();
-            Message replyJMSMsg = jmsResourceFactory.createMessage(session, responsePayload);
+            Message replyJMSMsg = responseOperationAndDataBinding.createJMSMessage(session, responsePayload);
+
+            replyJMSMsg.setJMSDeliveryMode(requestJMSMsg.getJMSDeliveryMode());
+            replyJMSMsg.setJMSExpiration(requestJMSMsg.getJMSExpiration());
+            replyJMSMsg.setJMSPriority(requestJMSMsg.getJMSPriority());
 
             if (correlationScheme == null || "RequestMsgIDToCorrelID".equalsIgnoreCase(correlationScheme)) {
                 replyJMSMsg.setJMSCorrelationID(requestJMSMsg.getJMSMessageID());

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSReference.java Thu Dec 21 07:02:27 2006
@@ -34,7 +34,8 @@
 
     protected JMSBinding jmsBinding;
     protected JMSResourceFactory jmsResourceFactory;
-    protected OperationSelector operationSelector;
+    protected OperationAndDataBinding requestOperationAndDataBinding;
+    protected OperationAndDataBinding responseOperationAndDataBinding;
     protected Destination requestDest;
     protected Destination replyDest;
 
@@ -43,7 +44,8 @@
                         WireService wireService,
                         JMSBinding jmsBinding,
                         JMSResourceFactory jmsResourceFactory,
-                        OperationSelector operationSelector,
+                        OperationAndDataBinding requestOperationAndDataBinding,
+                        OperationAndDataBinding responseOperationAndDataBinding,
                         Class<?> service,
                         Destination requestDest,
                         Destination replyDest) {
@@ -52,14 +54,16 @@
 
         this.jmsBinding = jmsBinding;
         this.jmsResourceFactory = jmsResourceFactory;
-        this.operationSelector = operationSelector;
+        this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+        this.responseOperationAndDataBinding = responseOperationAndDataBinding;
         this.requestDest = requestDest;
         this.replyDest = replyDest;
     }
 
     public TargetInvoker createTargetInvoker(ServiceContract contract, Operation operation) {
-        return new JMSTargetInvoker(jmsResourceFactory, jmsBinding, operation.getName(), operationSelector,
-                                    requestDest, replyDest);
+        return new JMSTargetInvoker(jmsResourceFactory, jmsBinding, operation.getName(),
+                                    requestOperationAndDataBinding, responseOperationAndDataBinding, requestDest,
+                                    replyDest);
     }
 
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSResourceFactory.java Thu Dec 21 07:02:27 2006
@@ -21,7 +21,6 @@
 import javax.jms.Connection;
 import javax.jms.Destination;
 import javax.jms.JMSException;
-import javax.jms.Message;
 import javax.jms.Session;
 import javax.naming.NamingException;
 
@@ -37,13 +36,5 @@
 
 	public abstract void closeConnection() throws JMSException, NamingException;
 
-	public abstract Message createMessage(Session session, Object payload)
-			throws JMSException;
-
-        public abstract Object getMessagePayload(Message jmsMessage)
-            throws JMSException;
-
         public abstract Destination lookupDestination(String jndiName) throws NamingException;
-
-    public abstract void setDataBinding(JMSDataBinding jmsDataBinding);
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSService.java Thu Dec 21 07:02:27 2006
@@ -18,7 +18,6 @@
  */
 package org.apache.tuscany.binding.jms;
 
-
 import javax.jms.Destination;
 import javax.jms.JMSException;
 import javax.jms.MessageConsumer;
@@ -34,55 +33,59 @@
  */
 public class JMSService extends ServiceExtension {
 
-	private JMSBinding jmsBinding;
-	private JMSResourceFactory jmsResourceFactory;
+    private JMSBinding jmsBinding;
+    private JMSResourceFactory jmsResourceFactory;
     private MessageConsumer consumer;
-	private OperationSelector operationSelector;
-    
+    protected OperationAndDataBinding requestOperationAndDataBinding;
+    protected OperationAndDataBinding responseOperationAndDataBinding;
+
     public JMSService(String name,
                       CompositeComponent parent,
                       WireService wireService,
                       JMSBinding jmsBinding,
                       JMSResourceFactory jmsResourceFactory,
-                      OperationSelector operationSelector,
+                      OperationAndDataBinding requestOperationAndDataBinding,
+                      OperationAndDataBinding responseOperationAndDataBinding,
                       Class<?> service) {
         super(name, service, parent, wireService);
 
         this.jmsBinding = jmsBinding;
         this.jmsResourceFactory = jmsResourceFactory;
-        this.operationSelector = operationSelector;
+        this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+        this.responseOperationAndDataBinding = responseOperationAndDataBinding;
     }
 
     public void start() {
         super.start();
         try {
-			registerListerner();
-		} catch (Exception e) {
-			throw new JMSBindingRuntimeException("Error starting JMSService",e);
-		}
+            registerListerner();
+        } catch (Exception e) {
+            throw new JMSBindingRuntimeException("Error starting JMSService", e);
+        }
     }
 
     public void stop() {
-            	
-    	try {
-    		consumer.close();
-    		jmsResourceFactory.closeConnection();
-		} catch (Exception e) {
-			throw new JMSBindingRuntimeException("Error stopping JMSService",e);
-		}
-    	
-    	super.stop();
+
+        try {
+            consumer.close();
+            jmsResourceFactory.closeConnection();
+        } catch (Exception e) {
+            throw new JMSBindingRuntimeException("Error stopping JMSService", e);
+        }
+
+        super.stop();
     }
-    
-    private void registerListerner() throws NamingException, JMSException{
-    	    	
-    	Session session = jmsResourceFactory.createSession();
+
+    private void registerListerner() throws NamingException, JMSException {
+
+        Session session = jmsResourceFactory.createSession();
         Destination destination = session.createQueue(jmsBinding.getDestinationName());
-        
+
         consumer = session.createConsumer(destination);
-        consumer.setMessageListener(new JMSProxy(getInboundWire(),jmsResourceFactory,operationSelector, jmsBinding.getCorrelationScheme()));
-        
+        consumer.setMessageListener(new JMSProxy(getInboundWire(), jmsResourceFactory, requestOperationAndDataBinding,
+                                                 responseOperationAndDataBinding, jmsBinding.getCorrelationScheme()));
+
         jmsResourceFactory.startConnection();
-        
-    }    
+
+    }
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSTargetInvoker.java Thu Dec 21 07:02:27 2006
@@ -39,7 +39,8 @@
     protected JMSResourceFactory jmsResourceFactory;
 
     protected String operationName;
-    protected OperationSelector operationSelector;
+    protected OperationAndDataBinding requestOperationAndDataBinding;
+    protected OperationAndDataBinding responseOperationAndDataBinding;
 
     protected Destination requestDest;
     protected Destination replyDest;
@@ -47,14 +48,16 @@
     public JMSTargetInvoker(JMSResourceFactory jmsResourceFactory,
                             JMSBinding jmsBinding,
                             String operationName,
-                            OperationSelector operationSelector,
+                            OperationAndDataBinding requestOperationAndDataBinding,
+                            OperationAndDataBinding responseOperationAndDataBinding,
                             Destination requestDest,
                             Destination replyDest) {
         super(null, null, null);
         this.jmsBinding = jmsBinding;
         this.jmsResourceFactory = jmsResourceFactory;
         this.operationName = operationName;
-        this.operationSelector = operationSelector;
+        this.requestOperationAndDataBinding = requestOperationAndDataBinding;
+        this.responseOperationAndDataBinding = responseOperationAndDataBinding;
         this.requestDest = requestDest;
         this.replyDest = replyDest;
     }
@@ -68,7 +71,7 @@
                 Message requestMsg = sendRequest((Object[])payload, session, replyToDest);
                 Message replyMsg = receiveReply(session, replyToDest, requestMsg.getJMSMessageID());
 
-                return jmsResourceFactory.getMessagePayload(replyMsg);
+                return responseOperationAndDataBinding.extractPayload(replyMsg);
 
             } finally {
                 session.close();
@@ -84,8 +87,13 @@
 
     protected Message sendRequest(Object[] payload, Session session, Destination replyToDest) throws JMSException,
         JMSBindingException {
-        Message requestMsg = jmsResourceFactory.createMessage(session, payload);
-        operationSelector.setOperationName(operationName, requestMsg);
+
+        Message requestMsg = requestOperationAndDataBinding.createJMSMessage(session, payload);
+
+        requestMsg.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
+        requestMsg.setJMSPriority(jmsBinding.getPriority());
+        
+        requestOperationAndDataBinding.setOperationName(operationName, requestMsg);
         requestMsg.setJMSReplyTo(replyToDest);
 
         MessageProducer producer = session.createProducer(requestDest);

Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java?view=auto&rev=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java Thu Dec 21 07:02:27 2006
@@ -0,0 +1,48 @@
+/*
+ * 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.tuscany.binding.jms;
+
+import javax.jms.Message;
+import javax.jms.Session;
+
+/**
+ * Interface for a component that does operation selection and message payload databinding
+ */
+public interface OperationAndDataBinding {
+
+    /**
+     * Get the operation name from a JMS Message
+     */
+    public abstract String getOperationName(Message message);
+
+    /**
+     * Set the operation name on a JMS Message
+     */
+    public abstract void setOperationName(String operationName, Message message);
+
+    /**
+     * Extracts the payload from a JMS Message
+     */
+    public abstract Object extractPayload(Message msg);
+
+    /**
+     * Create a JMS Message containing the payload
+     */
+    public abstract Message createJMSMessage(Session session, Object payload);
+}

Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/OperationAndDataBinding.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/SimpleJMSResourceFactory.java Thu Dec 21 07:02:27 2006
@@ -24,25 +24,20 @@
 import javax.jms.ConnectionFactory;
 import javax.jms.Destination;
 import javax.jms.JMSException;
-import javax.jms.Message;
 import javax.jms.Session;
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
 
-import org.apache.tuscany.binding.jms.databinding.ObjectMsgDataBinding;
-
 public class SimpleJMSResourceFactory implements JMSResourceFactory {
 		
 	private JMSBinding jmsBinding;
 	private Connection con;
 	private Context context;
 	private boolean isConnectionStarted;
-        private JMSDataBinding jmsDataBinding;
 
 	public  SimpleJMSResourceFactory(JMSBinding jmsBinding){
 		this.jmsBinding = jmsBinding;
-                this.jmsDataBinding = new ObjectMsgDataBinding();
 	}
 	
 	/* 
@@ -88,16 +83,6 @@
 		}
 	}
 	
-	/* (non-Javadoc)
-	 * @see org.apache.tuscany.binding.jms.JMSResourceFactory#createTextMessage(javax.jms.Session)
-	 */
-	public Message createMessage(Session session, Object payload) throws JMSException {
-            Message message = jmsDataBinding.toJMSMessage(session, payload);
-            message.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
-            message.setJMSPriority(jmsBinding.getPriority());
-            return message;
-        }
-
 	private void createConnection() throws NamingException, JMSException {
 		if(context == null){
 			createInitialContext();
@@ -120,13 +105,5 @@
                 }
 		return (Destination)context.lookup(jndiName);
 	}
-
-    public void setDataBinding(JMSDataBinding jmsDataBinding) {
-        this.jmsDataBinding = jmsDataBinding;
-    }
-
-    public Object getMessagePayload(Message jmsMessage) throws JMSException {
-        return jmsDataBinding.fromJMSMessage(jmsMessage);
-    }
 
 }

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSBindingTestCaseX.java Thu Dec 21 07:02:27 2006
@@ -29,7 +29,6 @@
 import org.activemq.broker.BrokerContainer;
 import org.activemq.broker.impl.BrokerContainerImpl;
 import org.activemq.store.vm.VMPersistenceAdapter;
-import org.apache.tuscany.binding.jms.databinding.XMLTextMsgDataBinding;
 import org.apache.tuscany.test.SCATestCase;
 import org.custommonkey.xmlunit.Diff;
 import org.custommonkey.xmlunit.XMLUnit;
@@ -65,11 +64,11 @@
         binding.setJNDIProviderURL("tcp://localhost:61616");
         binding.setDestinationName("dynamicQueues/HelloworldServiceQueue");
         binding.setTimeToLive(3000);
-        binding.setOperationSelectorPropertyName("scaOperationName");
+        binding.setXMLFormat(true);
         JMSResourceFactory rf = new SimpleJMSResourceFactory(binding);
-        rf.setDataBinding(new XMLTextMsgDataBinding());
         Destination requestDest = rf.lookupDestination(binding.getDestinationName());
-        JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", new DefaultOperationSelector(binding), requestDest, null);
+        DefaultOperationAndDataBinding odb = new DefaultOperationAndDataBinding(binding);
+        JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", odb, odb, requestDest, null);
         return invoker;
     }
 

Modified: incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java?view=diff&rev=489381&r1=489380&r2=489381
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java (original)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/test/java/org/apache/tuscany/binding/jms/JMSProxyTestCase.java Thu Dec 21 07:02:27 2006
@@ -46,18 +46,28 @@
         EasyMock.replay(session);
 
         ObjectMessage responseJMSMsg = EasyMock.createMock(ObjectMessage.class);
+        responseJMSMsg.setJMSDeliveryMode(1);
+        responseJMSMsg.setJMSExpiration(1);
+        responseJMSMsg.setJMSPriority(1);
         responseJMSMsg.setJMSCorrelationID(id);
         EasyMock.replay(responseJMSMsg);
 
-
         JMSResourceFactory jmsResourceFactory = EasyMock.createMock(JMSResourceFactory.class);
         EasyMock.expect(jmsResourceFactory.createSession()).andReturn(session);
-        EasyMock.expect(jmsResourceFactory.createMessage(EasyMock.eq(session), EasyMock.isA(Exception.class))).andReturn(responseJMSMsg);
 
-        JMSProxy jmsProxy = new JMSProxy(null, jmsResourceFactory, null, null);
+        OperationAndDataBinding odb = EasyMock.createMock(OperationAndDataBinding.class);
+        EasyMock.expect(odb.createJMSMessage(EasyMock.eq(session), EasyMock.isA(Exception.class))).andReturn(responseJMSMsg);
+        EasyMock.replay(odb);
+
+        JMSProxy jmsProxy = new JMSProxy(null, jmsResourceFactory, null, odb, null);
 
         Message requestJMSMsg = EasyMock.createMock(Message.class);
         EasyMock.expect(requestJMSMsg.getJMSReplyTo()).andReturn(new Destination(){});
+        
+        EasyMock.expect(requestJMSMsg.getJMSDeliveryMode()).andReturn(1);
+        EasyMock.expect(requestJMSMsg.getJMSExpiration()).andReturn(1L);
+        EasyMock.expect(requestJMSMsg.getJMSPriority()).andReturn(1);
+
         EasyMock.expect(requestJMSMsg.getJMSReplyTo()).andReturn(new Destination(){});
         EasyMock.expect(requestJMSMsg.getJMSMessageID()).andReturn(id);
         



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org