summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider
diff options
context:
space:
mode:
authorantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-11-09 15:31:53 +0000
committerantelder <antelder@13f79535-47bb-0310-9956-ffa450edef68>2011-11-09 15:31:53 +0000
commitd888428d9fc7e9a9be609dd2d0b8576004af93ad (patch)
treef46b90b8f951a12a0f1bfb0e17aa540fb066b388 /sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider
parent348fc05ecdb5eaff4035ac8d41b8373ff41d0fa9 (diff)
Update the JMS binding so that the message format may be either AXIOM or DOM. The default is still DOM as that minimizes the required dependencies but you can now configure it to use AXIOM OMElements which are optimized in some runtime environments
git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1199797 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to '')
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/DefaultMessageProcessor.java105
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java23
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLTextMessageProcessor.java26
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/AXIOMXMLHelper.java102
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/DOMXMLHelper.java102
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelper.java37
-rw-r--r--sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelperFactory.java48
7 files changed, 342 insertions, 101 deletions
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/DefaultMessageProcessor.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/DefaultMessageProcessor.java
index c538dd01da..0288ecb5ba 100644
--- a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/DefaultMessageProcessor.java
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/DefaultMessageProcessor.java
@@ -26,18 +26,14 @@ import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.Session;
import javax.jms.TextMessage;
-import javax.xml.namespace.QName;
import org.apache.tuscany.sca.binding.jms.JMSBinding;
import org.apache.tuscany.sca.binding.jms.JMSBindingConstants;
import org.apache.tuscany.sca.binding.jms.JMSBindingException;
-import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.binding.jms.provider.xml.XMLHelper;
+import org.apache.tuscany.sca.binding.jms.provider.xml.XMLHelperFactory;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.util.FaultException;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
/**
* MessageProcessor for sending/receiving XML over javax.jms.TextMessage or javax.jms.BytesMessage
@@ -50,11 +46,11 @@ import org.xml.sax.SAXException;
public class DefaultMessageProcessor extends AbstractMessageProcessor {
private static final Logger logger = Logger.getLogger(DefaultMessageProcessor.class.getName());
- private DOMHelper domHelper;
+ private XMLHelper xmlHelper;
public DefaultMessageProcessor(JMSBinding jmsBinding, ExtensionPointRegistry registry) {
super(jmsBinding);
- this.domHelper = DOMHelper.getInstance(registry);
+ this.xmlHelper = XMLHelperFactory.createXMLHelper(registry);
}
// inherited methods that don't do anything useful
@@ -79,31 +75,20 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
// handle text messages
- public Object extractPayloadFromJMSTextMessage(Message msg, Node wrapper) {
+ public Object extractPayloadFromJMSTextMessage(Message msg, Object wrapper) {
if (msg instanceof TextMessage) {
try {
String xml = ((TextMessage) msg).getText();
Object os;
if (xml != null && xml.length() > 0) {
- os = domHelper.load(xml);
+ os = xmlHelper.load(xml);
} else {
os = null;
}
if (wrapper != null){
- //don't modify the original wrapper since it will be reused
- //clone the wrapper
- Node node = ((Node)os);
- if (node == null) {
- node = domHelper.newDocument();
- }
- Element newWrapper = DOMHelper.createElement((Document)node, new QName(wrapper.getNamespaceURI(), wrapper.getLocalName()));
- if (os != null){
- Node child = node.getFirstChild();
- newWrapper.appendChild(child);
- }
- return newWrapper;
+ return xmlHelper.wrap(wrapper, os);
}
return os;
@@ -112,8 +97,6 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
throw new JMSBindingException(e);
} catch (IOException e) {
throw new JMSBindingException(e);
- } catch (SAXException e) {
- throw new JMSBindingException(e);
}
} else {
// handle the non-text fault case
@@ -127,31 +110,28 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
TextMessage message = session.createTextMessage();
- if (o instanceof Node) {
-
+ if ((o instanceof Object[])) {
if (unwrap){
- Node firstElement = ((Node)o).getFirstChild();
+ Object firstElement = xmlHelper.getFirstChild(((Object[])o)[0]);
if (firstElement == null ) {
- message.setText("");
+ message.setText(null);
} else {
- message.setText(domHelper.saveAsString(firstElement));
+ message.setText(xmlHelper.saveAsString(firstElement));
}
}else {
- message.setText(domHelper.saveAsString((Node)o));
+ message.setText(xmlHelper.saveAsString(((Object[])o)[0]));
}
- } else if ((o instanceof Object[]) && ((Object[]) o)[0] instanceof Node) {
+ } else if (o != null) {
if (unwrap){
- Node firstElement = ((Node)((Object[]) o)[0]).getFirstChild();
+ Object firstElement = xmlHelper.getFirstChild(o);
if (firstElement == null ) {
- message.setText(null);
+ message.setText("");
} else {
- message.setText(domHelper.saveAsString(firstElement));
+ message.setText(xmlHelper.saveAsString(firstElement));
}
}else {
- message.setText(domHelper.saveAsString((Node)((Object[])o)[0]));
+ message.setText(xmlHelper.saveAsString(o));
}
- } else if (o != null) {
- throw new IllegalStateException("expecting Node payload: " + o);
}
return message;
@@ -171,7 +151,7 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
try {
TextMessage message = session.createTextMessage();
- message.setText(domHelper.saveAsString((Node)((FaultException)o).getFaultInfo()));
+ message.setText(xmlHelper.saveAsString(((FaultException)o).getFaultInfo()));
message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, true);
return message;
@@ -186,7 +166,7 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
// handle bytes messages
- public Object extractPayloadFromJMSBytesMessage(Message msg, Node wrapper) {
+ public Object extractPayloadFromJMSBytesMessage(Message msg, Object wrapper) {
if (msg instanceof BytesMessage) {
try {
@@ -198,24 +178,13 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
((BytesMessage)msg).reset();
if ((bytes != null) && (bytes.length > 0)) {
- os = domHelper.load(new String(bytes));
+ os = xmlHelper.load(new String(bytes));
} else {
os = null;
}
if (wrapper != null){
- //don't modify the original wrapper since it will be reused
- //clone the wrapper
- Node node = ((Node)os);
- if (node == null) {
- node = domHelper.newDocument();
- }
- Element newWrapper = DOMHelper.createElement((Document)node, new QName(wrapper.getNamespaceURI(), wrapper.getLocalName()));
- if (os != null){
- Node child = node.getFirstChild();
- newWrapper.appendChild(child);
- }
- return newWrapper;
+ return xmlHelper.wrap(wrapper, os);
}
return os;
@@ -224,8 +193,6 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
throw new JMSBindingException(e);
} catch (IOException e) {
throw new JMSBindingException(e);
- } catch (SAXException e) {
- throw new JMSBindingException(e);
}
} else {
// trap the non-bytes fault case
@@ -238,35 +205,31 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
try {
BytesMessage message = session.createBytesMessage();
-
- if (o instanceof Node) {
- if (unwrap) {
- Node firstElement = ((Node)o).getFirstChild();
+ if ((o instanceof Object[])) {
+ if (unwrap){
+ Object firstElement = xmlHelper.getFirstChild(((Object[])o)[0]);
if (firstElement == null ) {
//do nothing, the message will just be set with a byte[0]
} else {
- message.writeBytes(domHelper.saveAsString(firstElement).getBytes());
+ message.writeBytes(xmlHelper.saveAsString(firstElement).getBytes());
}
- } else {
- message.writeBytes(domHelper.saveAsString((Node)o).getBytes());
+ }else {
+ message.writeBytes(xmlHelper.saveAsString(((Object[]) o)[0]).getBytes());
}
-
- } else if ((o instanceof Object[]) && ((Object[]) o)[0] instanceof Node) {
- if (unwrap){
- Node firstElement = ((Node)((Object[]) o)[0]).getFirstChild();
+ } else if (o != null) {
+ if (unwrap) {
+ Object firstElement = xmlHelper.getFirstChild(o);
if (firstElement == null ) {
//do nothing, the message will just be set with a byte[0]
} else {
- message.writeBytes(domHelper.saveAsString(firstElement).getBytes());
+ message.writeBytes(xmlHelper.saveAsString(firstElement).getBytes());
}
- }else {
- message.writeBytes(domHelper.saveAsString((Node)((Object[]) o)[0]).getBytes());
+ } else {
+ message.writeBytes(xmlHelper.saveAsString(o).getBytes());
}
- } else if (o != null) {
- throw new IllegalStateException("expecting Node payload: " + o);
}
return message;
@@ -287,7 +250,7 @@ public class DefaultMessageProcessor extends AbstractMessageProcessor {
try {
BytesMessage message = session.createBytesMessage();
- String s = domHelper.saveAsString((Node)((FaultException)o).getFaultInfo());
+ String s = xmlHelper.saveAsString(((FaultException)o).getFaultInfo());
message.writeBytes(s.getBytes());
message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, true);
return message;
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java
index 69a69064d0..5ca47da2c5 100644
--- a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLBytesMessageProcessor.java
@@ -29,11 +29,10 @@ import javax.jms.Session;
import org.apache.tuscany.sca.binding.jms.JMSBinding;
import org.apache.tuscany.sca.binding.jms.JMSBindingConstants;
import org.apache.tuscany.sca.binding.jms.JMSBindingException;
-import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.binding.jms.provider.xml.XMLHelper;
+import org.apache.tuscany.sca.binding.jms.provider.xml.XMLHelperFactory;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.util.FaultException;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
/**
* MessageProcessor for sending/receiving XML javax.jms.BytesMessage with the JMSBinding.
@@ -41,11 +40,11 @@ import org.xml.sax.SAXException;
public class XMLBytesMessageProcessor extends AbstractMessageProcessor {
private static final Logger logger = Logger.getLogger(XMLBytesMessageProcessor.class.getName());
- private DOMHelper domHelper;
+ private XMLHelper xmlHelper;
public XMLBytesMessageProcessor(JMSBinding jmsBinding, ExtensionPointRegistry registry) {
super(jmsBinding);
- this.domHelper = DOMHelper.getInstance(registry);
+ this.xmlHelper = XMLHelperFactory.createXMLHelper(registry);
}
@Override
@@ -63,7 +62,7 @@ public class XMLBytesMessageProcessor extends AbstractMessageProcessor {
Object os;
if (noOfBytes > 0) {
- os = domHelper.load(new String(bytes));
+ os = xmlHelper.load(new String(bytes));
} else {
os = null;
}
@@ -72,8 +71,6 @@ public class XMLBytesMessageProcessor extends AbstractMessageProcessor {
throw new JMSBindingException(e);
} catch (IOException e) {
throw new JMSBindingException(e);
- } catch (SAXException e) {
- throw new JMSBindingException(e);
}
}
@@ -95,12 +92,10 @@ public class XMLBytesMessageProcessor extends AbstractMessageProcessor {
try {
BytesMessage message = session.createBytesMessage();
- if (o instanceof Node) {
- message.writeBytes(domHelper.saveAsString((Node)o).getBytes());
- } else if ((o instanceof Object[]) && ((Object[])o)[0] instanceof Node) {
- message.writeBytes(domHelper.saveAsString((Node)((Object[])o)[0]).getBytes());
+ if ((o instanceof Object[])) {
+ message.writeBytes(xmlHelper.saveAsString(((Object[])o)[0]).getBytes());
} else if (o != null) {
- throw new IllegalStateException("expecting Node payload: " + o);
+ message.writeBytes(xmlHelper.saveAsString(o).getBytes());
}
return message;
@@ -121,7 +116,7 @@ public class XMLBytesMessageProcessor extends AbstractMessageProcessor {
try {
BytesMessage message = session.createBytesMessage();
- message.writeBytes(domHelper.saveAsString((Node)((FaultException)o).getFaultInfo()).getBytes());
+ message.writeBytes(xmlHelper.saveAsString(((FaultException)o).getFaultInfo()).getBytes());
message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, true);
return message;
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLTextMessageProcessor.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLTextMessageProcessor.java
index 5031f55c6b..44588dfb7d 100644
--- a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLTextMessageProcessor.java
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/XMLTextMessageProcessor.java
@@ -29,12 +29,10 @@ import javax.jms.TextMessage;
import org.apache.tuscany.sca.binding.jms.JMSBinding;
import org.apache.tuscany.sca.binding.jms.JMSBindingConstants;
import org.apache.tuscany.sca.binding.jms.JMSBindingException;
-import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.binding.jms.provider.xml.XMLHelper;
+import org.apache.tuscany.sca.binding.jms.provider.xml.XMLHelperFactory;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.interfacedef.util.FaultException;
-import org.w3c.dom.Element;
-import org.w3c.dom.Node;
-import org.xml.sax.SAXException;
/**
* MessageProcessor for sending/receiving XML javax.jms.TextMessage with the JMSBinding.
@@ -44,11 +42,11 @@ import org.xml.sax.SAXException;
public class XMLTextMessageProcessor extends AbstractMessageProcessor {
private static final Logger logger = Logger.getLogger(XMLTextMessageProcessor.class.getName());
- private DOMHelper domHelper;
+ private XMLHelper xmlHelper;
public XMLTextMessageProcessor(JMSBinding jmsBinding, ExtensionPointRegistry registry) {
super(jmsBinding);
- this.domHelper = DOMHelper.getInstance(registry);
+ this.xmlHelper = XMLHelperFactory.createXMLHelper(registry);
}
@Override
@@ -58,7 +56,7 @@ public class XMLTextMessageProcessor extends AbstractMessageProcessor {
String xml = ((TextMessage)msg).getText();
Object os;
if (xml != null) {
- os = domHelper.load(xml);
+ os = xmlHelper.load(xml);
} else {
os = null;
}
@@ -68,8 +66,6 @@ public class XMLTextMessageProcessor extends AbstractMessageProcessor {
throw new JMSBindingException(e);
} catch (JMSException e) {
throw new JMSBindingException(e);
- } catch (SAXException e) {
- throw new JMSBindingException(e);
}
}
@@ -92,12 +88,10 @@ public class XMLTextMessageProcessor extends AbstractMessageProcessor {
TextMessage message = session.createTextMessage();
- if (o instanceof Element) {
- message.setText(domHelper.saveAsString((Node)o));
- } else if ((o instanceof Object[]) && ((Object[])o)[0] instanceof Node) {
- message.setText(domHelper.saveAsString((Node)((Object[])o)[0]));
- } else if (o != null) {
- throw new IllegalStateException("expecting Node payload: " + o);
+ if (o instanceof Object[]) {
+ message.setText(xmlHelper.saveAsString(((Object[])o)[0]));
+ } else {
+ message.setText(xmlHelper.saveAsString(o));
}
return message;
@@ -117,7 +111,7 @@ public class XMLTextMessageProcessor extends AbstractMessageProcessor {
try {
TextMessage message = session.createTextMessage();
- message.setText(domHelper.saveAsString((Node)((FaultException)o).getFaultInfo()));
+ message.setText(xmlHelper.saveAsString(((FaultException)o).getFaultInfo()));
message.setBooleanProperty(JMSBindingConstants.FAULT_PROPERTY, true);
return message;
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/AXIOMXMLHelper.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/AXIOMXMLHelper.java
new file mode 100644
index 0000000000..bdf2deb5a5
--- /dev/null
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/AXIOMXMLHelper.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.jms.provider.xml;
+
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.OMAbstractFactory;
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMFactory;
+import org.apache.axiom.om.OMNamespace;
+import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.tuscany.sca.common.xml.stax.StAXHelper;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
+
+public class AXIOMXMLHelper implements XMLHelper<OMElement> {
+
+ private OMFactory factory;
+ private StAXHelper staxhelper;
+
+ public AXIOMXMLHelper(ExtensionPointRegistry epr) {
+ this.staxhelper = StAXHelper.getInstance(epr);
+ this.factory = OMAbstractFactory.getOMFactory();
+ }
+
+ @Override
+ public OMElement load(String xml) throws IOException {
+ StAXOMBuilder builder;
+ try {
+ builder = new StAXOMBuilder(staxhelper.createXMLStreamReader(xml));
+ } catch (XMLStreamException e) {
+ throw new IOException(e);
+ }
+ return builder.getDocumentElement();
+ }
+
+ @Override
+ public String saveAsString(OMElement t) {
+ // TODO: The JMS compliance tests require the XML prefix but AXIOM doesn't include that
+ return "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" + t.toString();
+ }
+
+ @Override
+ public String getOperationName(OMElement t) {
+ return t.getLocalName();
+ }
+
+ @Override
+ public Object wrap(OMElement template, OMElement os) {
+ OMElement newWrapper = template.cloneOMElement();
+ if (os != null) {
+ os.declareDefaultNamespace(newWrapper.getNamespace().getNamespaceURI());
+ newWrapper.addChild(os);
+ }
+ return newWrapper;
+ }
+
+ @Override
+ public OMElement createWrapper(QName qname) {
+ // The OMElement2JAXB transformer wants the opName to be capitalized
+ String opName = Character.toUpperCase(qname.getLocalPart().charAt(0)) + qname.getLocalPart().substring(1);
+ OMElement om = factory.createOMElement(qname);
+ OMNamespace defaultNS = om.declareDefaultNamespace(qname.getNamespaceURI());
+ return factory.createOMElement(opName, defaultNS);
+ }
+
+ @Override
+ public String getDataBindingName() {
+ return OMElement.class.getName();
+ }
+
+ @Override
+ public OMElement getFirstChild(OMElement o) {
+ return o.getFirstElement();
+ }
+
+ @Override
+ public void setFaultName(FaultException e, Object o) {
+ OMElement om = (OMElement)o;
+ e.setFaultName(new QName(om.getNamespace().getNamespaceURI(), om.getLocalName()));
+ }
+}
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/DOMXMLHelper.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/DOMXMLHelper.java
new file mode 100644
index 0000000000..f0bed9833c
--- /dev/null
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/DOMXMLHelper.java
@@ -0,0 +1,102 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.tuscany.sca.binding.jms.provider.xml;
+
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.common.xml.dom.DOMHelper;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
+
+public class DOMXMLHelper implements XMLHelper<Node> {
+
+ private DOMHelper domHelper;
+
+ public DOMXMLHelper(ExtensionPointRegistry epr) {
+ this.domHelper = DOMHelper.getInstance(epr);
+ }
+
+ @Override
+ public Document load(String xml) throws IOException {
+ try {
+ return domHelper.load(xml);
+ } catch (SAXException e) {
+ throw new IOException(e);
+ }
+ }
+
+ @Override
+ public String saveAsString(Node t) {
+ return domHelper.saveAsString(t);
+ }
+
+ @Override
+ public String getOperationName(Node t) {
+ Node firstChild = t.getFirstChild();
+ if (firstChild != null) {
+ return firstChild.getLocalName();
+ }
+ return null;
+ }
+
+ @Override
+ public Object wrap(Node wrapper, Node os) {
+ //don't modify the original wrapper since it will be reused
+ //clone the wrapper
+ Node node = ((Node)os);
+ if (node == null) {
+ node = domHelper.newDocument();
+ }
+ Element newWrapper = DOMHelper.createElement((Document)node, new QName(wrapper.getNamespaceURI(), wrapper.getLocalName()));
+ if (os != null){
+ Node child = node.getFirstChild();
+ newWrapper.appendChild(child);
+ }
+ return newWrapper;
+ }
+
+ @Override
+ public Node createWrapper(QName qname) {
+ Document document = domHelper.newDocument();
+ Element wrapper = DOMHelper.createElement(document, qname);
+ return wrapper;
+ }
+
+ @Override
+ public String getDataBindingName() {
+ return Node.class.getName();
+ }
+
+ @Override
+ public Node getFirstChild(Node o) {
+ return o.getFirstChild();
+ }
+ @Override
+ public void setFaultName(FaultException e, Object response) {
+ Node n = ((Node)response).getFirstChild();
+ e.setFaultName(new QName(n.getNamespaceURI(), n.getLocalName()));
+ }
+}
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelper.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelper.java
new file mode 100644
index 0000000000..3fbe561c60
--- /dev/null
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelper.java
@@ -0,0 +1,37 @@
+/*
+ * 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.sca.binding.jms.provider.xml;
+
+import java.io.IOException;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.interfacedef.util.FaultException;
+
+public interface XMLHelper<T> {
+ T load(String xml) throws IOException;
+ String saveAsString(T t);
+ String getOperationName(T t);
+ Object wrap(T template, T t);
+ T createWrapper(QName qname);
+ String getDataBindingName();
+ T getFirstChild(T object);
+ void setFaultName(FaultException e, Object response);
+}
diff --git a/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelperFactory.java b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelperFactory.java
new file mode 100644
index 0000000000..3533e9182a
--- /dev/null
+++ b/sca-java-2.x/trunk/modules/binding-jms-runtime/src/main/java/org/apache/tuscany/sca/binding/jms/provider/xml/XMLHelperFactory.java
@@ -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.sca.binding.jms.provider.xml;
+
+import java.util.Properties;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.runtime.RuntimeProperties;
+
+public class XMLHelperFactory {
+
+ public static XMLHelper<?> createXMLHelper(ExtensionPointRegistry epr) {
+
+ XMLHelper<?> xmlHelper = epr.getExtensionPoint(UtilityExtensionPoint.class).getUtility(XMLHelper.class);
+ if (xmlHelper != null) {
+ return xmlHelper;
+ }
+ if (useAXIOM(epr)) {
+ return new AXIOMXMLHelper(epr);
+ } else {
+ return new DOMXMLHelper(epr);
+ }
+ }
+
+ private static boolean useAXIOM(ExtensionPointRegistry epr) {
+ Properties runtimeProps = epr.getExtensionPoint(UtilityExtensionPoint.class).getUtility(RuntimeProperties.class).getProperties();
+ return Boolean.parseBoolean(runtimeProps.getProperty(RuntimeProperties.USE_AXIOM));
+ }
+
+}