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