You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/03/07 15:20:06 UTC

svn commit: r515579 - /incubator/servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java

Author: gnodet
Date: Wed Mar  7 06:20:05 2007
New Revision: 515579

URL: http://svn.apache.org/viewvc?view=rev&rev=515579
Log:
SM-869: Avoid creating xml factories in jsr181

Modified:
    incubator/servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java

Modified: incubator/servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java?view=diff&rev=515579&r1=515578&r2=515579
==============================================================================
--- incubator/servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java (original)
+++ incubator/servicemix/trunk/deployables/serviceengines/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiChannel.java Wed Mar  7 06:20:05 2007
@@ -28,7 +28,6 @@
 import javax.jbi.messaging.NormalizedMessage;
 import javax.jbi.servicedesc.ServiceEndpoint;
 import javax.xml.namespace.QName;
-import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.Source;
@@ -56,15 +55,21 @@
     public static final String JBI_INTERFACE_NAME = "jbi.interface";
     public static final String JBI_SERVICE_NAME = "jbi.service";
     public static final String JBI_ENDPOINT = "jbi.endpoint";
-    
-    private StAXSourceTransformer sourceTransformer;
-    private XMLOutputFactory outputFactory;
-    
+
+    private static ThreadLocal transformer = new ThreadLocal();
+
+    protected static StAXSourceTransformer getTransformer() {
+        StAXSourceTransformer t = (StAXSourceTransformer) transformer.get();
+        if (t == null) {
+            t = new StAXSourceTransformer();
+            transformer.set(t);
+        }
+        return t;
+    }
+
     public JbiChannel(String uri, JbiTransport transport) {
         setTransport(transport);
         setUri(uri);
-        this.sourceTransformer = new StAXSourceTransformer();
-        this.outputFactory = XMLOutputFactory.newInstance();
     }
 
     public void open() throws Exception {
@@ -75,7 +80,7 @@
             final OutputStream out = (OutputStream) context.getProperty(Channel.BACKCHANNEL_URI);
             if (out != null) {
                 try {
-                    final XMLStreamWriter writer = outputFactory.createXMLStreamWriter(out, message.getEncoding());
+                    final XMLStreamWriter writer = getTransformer().getOutputFactory().createXMLStreamWriter(out, message.getEncoding());
                     message.getSerializer().writeMessage(message, writer, context);
                     writer.close();
                 } catch (XMLStreamException e) {
@@ -109,8 +114,8 @@
                         }
                     } else if (me.getFault() != null){
                         JDOMResult result = new JDOMResult();
-                        String str = sourceTransformer.contentToString(me.getFault());
-                        sourceTransformer.toResult(new StringSource(str), result);
+                        String str = getTransformer().contentToString(me.getFault());
+                        getTransformer().toResult(new StringSource(str), result);
                         Element e = result.getDocument().getRootElement();
                         e = (Element) e.clone();
                         XFireFault xfireFault = new XFireFault(str, XFireFault.RECEIVER);
@@ -119,7 +124,7 @@
                     }
                     Source outSrc = me.getOutMessage().getContent();
 
-                    InMessage inMessage = new InMessage(sourceTransformer.toXMLStreamReader(outSrc), getUri());
+                    InMessage inMessage = new InMessage(getTransformer().toXMLStreamReader(outSrc), getUri());
                     getEndpoint().onReceive(context, inMessage);
 
                     me.setStatus(ExchangeStatus.DONE);
@@ -137,7 +142,7 @@
 
     protected Source getContent(MessageContext context, OutMessage message) throws XMLStreamException, IOException, XFireException {
         ByteArrayOutputStream outStream = new ByteArrayOutputStream();
-        XMLStreamWriter writer = outputFactory.createXMLStreamWriter(outStream, message.getEncoding());
+        XMLStreamWriter writer = getTransformer().getOutputFactory().createXMLStreamWriter(outStream, message.getEncoding());
         MessageSerializer serializer = context.getOutMessage().getSerializer();
         if (serializer == null)
         {