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/20 13:03:17 UTC

svn commit: r489063 - 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: Wed Dec 20 04:03:14 2006
New Revision: 489063

URL: http://svn.apache.org/viewvc?view=rev&rev=489063
Log:
Refactor the xml text msg / object msg code into individual jms databinding classes

Added:
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java   (with props)
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java   (with props)
    incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java   (with props)
Modified:
    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/JMSProxy.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

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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -20,6 +20,7 @@
 import java.lang.reflect.InvocationTargetException;
 
 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;
@@ -51,10 +52,6 @@
                            BoundServiceDefinition<JMSBinding> serviceDefinition,
                            DeploymentContext deploymentContext){
 
-        ServiceContract serviceContract = serviceDefinition.getServiceContract();
-        if (serviceContract instanceof WSDLServiceContract) {
-            serviceContract.setDataBinding(OM_DATA_BINDING);
-        }
 
         JMSBinding jmsBinding = serviceDefinition.getBinding();
         Class<?> interfaze = serviceDefinition.getServiceContract().getInterfaceClass();
@@ -67,7 +64,12 @@
 		} catch (JMSBindingException e) {
 			throw new JMSBindingRuntimeException("Error building JMS Service",e);
 		}
-        
+                
+        ServiceContract serviceContract = serviceDefinition.getServiceContract();
+        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);
         service.setBindingServiceContract(serviceContract);

Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java?view=auto&rev=489063
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/JMSDataBinding.java Wed Dec 20 04:03:14 2006
@@ -0,0 +1,31 @@
+/*
+ * 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.JMSException;
+import javax.jms.Message;
+import javax.jms.Session;
+
+public interface JMSDataBinding {
+
+    public abstract Object fromJMSMessage(Message msg) throws JMSException;
+
+    public abstract Message toJMSMessage(Session session, Object o);
+
+}

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

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

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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -18,8 +18,6 @@
  */
 package org.apache.tuscany.binding.jms;
 
-import java.io.Serializable;
-import java.io.StringReader;
 import java.lang.reflect.Method;
 
 import javax.jms.Destination;
@@ -27,16 +25,9 @@
 import javax.jms.Message;
 import javax.jms.MessageListener;
 import javax.jms.MessageProducer;
-import javax.jms.ObjectMessage;
 import javax.jms.Session;
-import javax.jms.TextMessage;
 import javax.naming.NamingException;
-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;
 import org.apache.tuscany.spi.model.Operation;
 import org.apache.tuscany.spi.wire.InboundWire;
 import org.apache.tuscany.spi.wire.Interceptor;
@@ -49,14 +40,12 @@
     private JMSResourceFactory jmsResourceFactory; 
 	private OperationSelector operationSelector;
 	private InboundWire inboundWire;
-        protected boolean xmlStyle;
     
-	public JMSProxy(InboundWire inboundWire,JMSResourceFactory jmsResourceFactory,OperationSelector operationSelector, boolean xmlStyle) throws NamingException{		
+	public JMSProxy(InboundWire inboundWire,JMSResourceFactory jmsResourceFactory,OperationSelector operationSelector) throws NamingException{		
 		
 		this.jmsResourceFactory = jmsResourceFactory;
 		this.operationSelector = operationSelector;
 		this.inboundWire = inboundWire;
-                this.xmlStyle = xmlStyle;
 	}   
 
 	public void onMessage(Message msg){
@@ -71,19 +60,19 @@
 		    Interceptor headInterceptor = chain.getHeadInterceptor();		    
 		    
 		    org.apache.tuscany.spi.wire.Message tuscanyMsg = new MessageImpl();
-		    tuscanyMsg.setBody(getPayload(msg));
+                    Object payload = jmsResourceFactory.getMessagePayload(msg);
+		    tuscanyMsg.setBody(payload);
 		    tuscanyMsg.setTargetInvoker(chain.getTargetInvoker());
 		    org.apache.tuscany.spi.wire.Message tuscanyResMsg = null;
 		    
-		    // again over here I expect the data binding interecptors to convert the 
-		    // XML string into objects
 		    if (headInterceptor != null){
 		    	tuscanyResMsg = headInterceptor.invoke(tuscanyMsg);
 		    }
 		    	        
 		    // if result is null then the method can be assumed as oneway
 		    if (tuscanyResMsg != null && tuscanyResMsg.getBody() != null){
-		    	sendReply(msg,operationName, fromPayload(tuscanyResMsg));
+                        
+		    	sendReply(msg,operationName, tuscanyResMsg);
 		    }
 
 		} catch (JMSBindingException e) {
@@ -100,49 +89,12 @@
                 
 	}
 
-    private Object fromPayload(org.apache.tuscany.spi.wire.Message tuscanyResMsg) {
-        if (xmlStyle) {
-            OMElement omElement = (OMElement) tuscanyResMsg.getBody();
-            omElement.build();
-            return (String)omElement.toString();
-        } else {
-            Object o = tuscanyResMsg.getBody();
-            return o;
-        }
-    }
-
-    private Object[] getPayload(Message msg) throws JMSException {
-        if (xmlStyle) {
-            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 RuntimeException(e);
-            }
-        } else {
-            Object o = ((ObjectMessage)msg).getObject();
-            return new Object[] {o};
-        }
-    }
 
-	private void sendReply(Message reqMsg,String operationName,Object payload) throws JMSException, NamingException{
+	private void sendReply(Message reqMsg,String operationName,org.apache.tuscany.spi.wire.Message tuscanyResMsg) throws JMSException, NamingException{
         
 		Session session = jmsResourceFactory.createSession();
 
-        Message message;
-        if (xmlStyle) {
-            message = jmsResourceFactory.createMessage(session);
-            ((TextMessage)message).setText((String)payload);
-        } else {
-            message = jmsResourceFactory.createObjectMessage(session);
-            ((ObjectMessage)message).setObject((Serializable)payload);
-        }
+        Message message = jmsResourceFactory.createMessage(session, tuscanyResMsg.getBody());
     	
     	Destination destination = reqMsg.getJMSReplyTo();
         

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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -37,10 +37,13 @@
 
 	public abstract void closeConnection() throws JMSException, NamingException;
 
-	public abstract Message createMessage(Session session)
+	public abstract Message createMessage(Session session, Object payload)
 			throws JMSException;
 
-        public abstract Message createObjectMessage(Session session) throws JMSException;
+        public abstract Object getMessagePayload(Message jmsMessage)
+            throws JMSException;
 
-	public abstract Destination lookupDestination(String jndiName) throws NamingException;
+        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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -25,10 +25,8 @@
 import javax.jms.Session;
 import javax.naming.NamingException;
 
-import org.apache.tuscany.idl.wsdl.WSDLServiceContract;
 import org.apache.tuscany.spi.component.CompositeComponent;
 import org.apache.tuscany.spi.extension.ServiceExtension;
-import org.apache.tuscany.spi.model.ServiceContract;
 import org.apache.tuscany.spi.wire.WireService;
 
 /**
@@ -82,9 +80,7 @@
         Destination destination = session.createQueue(jmsBinding.getDestinationName());
         
         consumer = session.createConsumer(destination);
-        ServiceContract sc = getBindingServiceContract();
-        boolean xmlStyle = sc instanceof WSDLServiceContract;
-        consumer.setMessageListener(new JMSProxy(getInboundWire(),jmsResourceFactory,operationSelector, xmlStyle));
+        consumer.setMessageListener(new JMSProxy(getInboundWire(),jmsResourceFactory,operationSelector));
         
         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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -19,7 +19,6 @@
 package org.apache.tuscany.binding.jms;
 
 
-import java.io.Serializable;
 import java.lang.reflect.InvocationTargetException;
 
 import javax.jms.Destination;
@@ -60,7 +59,7 @@
     public Message invoke(Message msg) throws InvocationRuntimeException {
         try {
         	Object[] args = (Object[])msg.getBody();
-            Object resp = invokeTarget(args[0],(short)0);
+            Object resp = invokeTarget(args,(short)0);
             msg.setBody(resp);
         } catch (Exception e) {
             msg.setBody(e.getCause());
@@ -71,7 +70,7 @@
     public Object invokeTarget(Object payload,final short sequence)throws InvocationTargetException {
         try {
             
-        	return sendReceiveMessage(payload);
+        	return sendReceiveMessage((Object[])payload);
         	
         } catch (Exception e) { // catch JMS specific error
                 e.printStackTrace();
@@ -99,18 +98,11 @@
     public void setCacheable(boolean cacheable) {
     }
     
-    private Object sendReceiveMessage(Object payload) throws JMSException, NamingException, JMSBindingException{
+    private Object sendReceiveMessage(Object[] payload) throws JMSException, NamingException, JMSBindingException{
     	
     	Session session = jmsResourceFactory.createSession();
 
-        javax.jms.Message message;
-        if (xmlStyle) {
-            message = jmsResourceFactory.createMessage(session);
-            ((javax.jms.TextMessage)message).setText((String)payload);
-        } else {
-            message = jmsResourceFactory.createObjectMessage(session);
-            ((javax.jms.ObjectMessage)message).setObject((Serializable)payload);
-        }
+        javax.jms.Message message = jmsResourceFactory.createMessage(session, payload);
     	
         operationSelector.setOperationName(operationName,message);  
         
@@ -132,6 +124,6 @@
         consumer.close();        
         session.close();
         
-        return reply instanceof ObjectMessage ? ((javax.jms.ObjectMessage)reply).getObject() : ((javax.jms.TextMessage)reply).getText();
+        return jmsResourceFactory.getMessagePayload(reply);
     }
 }

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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -30,15 +30,19 @@
 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();
 	}
 	
 	/* 
@@ -87,21 +91,13 @@
 	/* (non-Javadoc)
 	 * @see org.apache.tuscany.binding.jms.JMSResourceFactory#createTextMessage(javax.jms.Session)
 	 */
-	public Message createMessage(Session session) throws JMSException{
-		javax.jms.Message message = session.createTextMessage();  // default
-    	message.setJMSDeliveryMode(jmsBinding.getDeliveryMode());
-    	message.setJMSPriority(jmsBinding.getPriority());
-    	
-    	return message;
-	}
-
-        public Message createObjectMessage(Session session) throws JMSException{
-            Message message = session.createObjectMessage();  // default
+	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();
@@ -121,5 +117,13 @@
 	public Destination lookupDestination(String jndiName) throws NamingException {
 		return (Destination)context.lookup(jndiName);
 	}
+
+    public void setDataBinding(JMSDataBinding jmsDataBinding) {
+        this.jmsDataBinding = jmsDataBinding;
+    }
+
+    public Object getMessagePayload(Message jmsMessage) throws JMSException {
+        return jmsDataBinding.fromJMSMessage(jmsMessage);
+    }
 
 }

Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java?view=auto&rev=489063
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/ObjectMsgDataBinding.java Wed Dec 20 04:03:14 2006
@@ -0,0 +1,59 @@
+/*
+ * 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.databinding;
+
+import java.io.Serializable;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+import javax.jms.ObjectMessage;
+import javax.jms.Session;
+
+import org.apache.tuscany.binding.jms.JMSDataBinding;
+import org.apache.tuscany.binding.jms.JMSBindingRuntimeException;
+
+public class ObjectMsgDataBinding implements JMSDataBinding {
+
+    /* (non-Javadoc)
+     * @see org.apache.tuscany.binding.jms.databinding.DataBinding#fromJMSMessage(javax.jms.Message)
+     */
+    public Object fromJMSMessage(Message msg) throws JMSException {
+
+        Object o = ((ObjectMessage)msg).getObject();
+
+        return o;
+
+    }
+
+    /* (non-Javadoc)
+     * @see org.apache.tuscany.binding.jms.databinding.DataBinding#toJMSMessage(javax.jms.Session, java.lang.Object)
+     */
+    public Message toJMSMessage(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/databinding/ObjectMsgDataBinding.java
------------------------------------------------------------------------------
    svn:eol-style = native

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

Added: incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java?view=auto&rev=489063
==============================================================================
--- incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java (added)
+++ incubator/tuscany/java/sca/services/bindings/binding.jms/src/main/java/org/apache/tuscany/binding/jms/databinding/XMLTextMsgDataBinding.java Wed Dec 20 04:03:14 2006
@@ -0,0 +1,72 @@
+/*
+ * 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.databinding;
+
+import java.io.StringReader;
+
+import javax.jms.JMSException;
+import javax.jms.Message;
+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;
+import org.apache.tuscany.binding.jms.JMSDataBinding;
+import org.apache.tuscany.binding.jms.JMSBindingRuntimeException;
+
+public class XMLTextMsgDataBinding implements JMSDataBinding {
+
+    public Object fromJMSMessage(Message msg) throws JMSException {
+        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);
+        }
+    }
+
+    public Message toJMSMessage(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);
+        }
+    }
+
+}

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

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

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=489063&r1=489062&r2=489063
==============================================================================
--- 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 Wed Dec 20 04:03:14 2006
@@ -26,6 +26,7 @@
 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;
@@ -46,6 +47,15 @@
         assertEquals("Hello Rajith", reply);
 
         // TODO: the rest should be in a seperate test method but that doesn't work as you get broker conflicts
+        JMSTargetInvoker invoker = createJMSInvoker();
+        Object[] response = (Object[])invoker.invokeTarget(new Object[]{REQUEST_XML}, (short)0);
+
+        Diff diff = XMLUnit.compareXML(REPLY_XML, response[0].toString());
+        assertTrue(diff.toString(), diff.similar());
+    
+    }
+
+    private JMSTargetInvoker createJMSInvoker() {
         JMSBinding binding = new JMSBinding();
         binding.setInitialContextFactoryName("org.activemq.jndi.ActiveMQInitialContextFactory");
         binding.setConnectionFactoryName("ConnectionFactory");
@@ -53,13 +63,10 @@
         binding.setDestinationName("dynamicQueues/HelloworldServiceQueue");
         binding.setTimeToLive(3000);
         binding.setOperationSelectorPropertyName("scaOperationName");
-        JMSTargetInvoker invoker = new JMSTargetInvoker(new SimpleJMSResourceFactory(binding), binding, "getGreetings", new DefaultOperationSelector(binding), true);
-
-        String response = (String)invoker.invokeTarget(REQUEST_XML, (short)0);
-
-        Diff diff = XMLUnit.compareXML(REPLY_XML, response);
-        assertTrue(diff.toString(), diff.similar());
-    
+        JMSResourceFactory rf = new SimpleJMSResourceFactory(binding);
+        rf.setDataBinding(new XMLTextMsgDataBinding());
+        JMSTargetInvoker invoker = new JMSTargetInvoker(rf, binding, "getGreetings", new DefaultOperationSelector(binding), true);
+        return invoker;
     }
 
     protected void setUp() throws Exception {



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