cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dk...@apache.org
Subject svn commit: r608997 - in /incubator/cxf/branches/2.0.x-fixes: ./ common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
Date Fri, 04 Jan 2008 20:46:58 GMT
Author: dkulp
Date: Fri Jan  4 12:46:57 2008
New Revision: 608997

URL: http://svn.apache.org/viewvc?rev=608997&view=rev
Log:
Merged revisions 608954 via svnmerge from 
https://svn.apache.org/repos/asf/incubator/cxf/trunk

........
  r608954 | dkulp | 2008-01-04 13:29:03 -0500 (Fri, 04 Jan 2008) | 2 lines
  
  Fix issues with grabbing doc factories that cannot work with the current classloaders
........

Modified:
    incubator/cxf/branches/2.0.x-fixes/   (props changed)
    incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java
    incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java

Propchange: incubator/cxf/branches/2.0.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.

Modified: incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java?rev=608997&r1=608996&r2=608997&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/helpers/XMLUtils.java
Fri Jan  4 12:46:57 2008
@@ -26,9 +26,11 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.Writer;
+import java.util.Collections;
 import java.util.Map;
 import java.util.Properties;
 import java.util.StringTokenizer;
+import java.util.WeakHashMap;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.wsdl.Definition;
@@ -66,38 +68,53 @@
 public final class XMLUtils {
 
     private static final Logger LOG = LogUtils.getL7dLogger(XMLUtils.class);
-    private static DocumentBuilderFactory parserFactory;
-    private static TransformerFactory transformerFactory;
-    private static String omitXmlDecl = "no";
-    private static String charset = "utf-8";
-    private static int indent = -1;
-
-    static {
-        parserFactory = DocumentBuilderFactory.newInstance();
-        parserFactory.setNamespaceAware(true);
-
-        transformerFactory = TransformerFactory.newInstance();
-    }
+    
+    private static final Map<ClassLoader, DocumentBuilderFactory> DOCUMENT_BUILDER_FACTORIES
+        = Collections.synchronizedMap(new WeakHashMap<ClassLoader, DocumentBuilderFactory>());
+    
+    private static final Map<ClassLoader, TransformerFactory> TRANSFORMER_FACTORIES
+        = Collections.synchronizedMap(new WeakHashMap<ClassLoader, TransformerFactory>());
 
     private XMLUtils() {
-
     }
 
+    private static TransformerFactory getTransformerFactory() {
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = XMLUtils.class.getClassLoader();
+        }
+        if (loader == null) {
+            return TransformerFactory.newInstance();
+        }
+        TransformerFactory factory = TRANSFORMER_FACTORIES.get(loader);
+        if (factory == null) {
+            factory = TransformerFactory.newInstance();
+            TRANSFORMER_FACTORIES.put(loader, factory);
+        }
+        return factory;
+    }
+    private static DocumentBuilderFactory getDocumentBuilderFactory() {
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = XMLUtils.class.getClassLoader();
+        }
+        if (loader == null) {
+            return DocumentBuilderFactory.newInstance();
+        }
+        DocumentBuilderFactory factory = DOCUMENT_BUILDER_FACTORIES.get(loader);
+        if (factory == null) {
+            factory = DocumentBuilderFactory.newInstance();
+            factory.setNamespaceAware(true);
+            DOCUMENT_BUILDER_FACTORIES.put(loader, factory);
+        }
+        return factory;
+    }
     public static Transformer newTransformer() throws TransformerConfigurationException {
-        return transformerFactory.newTransformer();
+        return getTransformerFactory().newTransformer();
     }
 
     public static DocumentBuilder getParser() throws ParserConfigurationException {
-        if (parserFactory.getClass().getClassLoader() != null 
-            && !parserFactory.getClass().getClassLoader().equals(
-                    Thread.currentThread().getContextClassLoader().getParent())    
-            && !parserFactory.getClass().getClassLoader().equals(
-                Thread.currentThread().getContextClassLoader())) {
-            //not the same classloader which init parserFactory, so create parserFactory
with new classLoader
-            parserFactory = DocumentBuilderFactory.newInstance();
-            parserFactory.setNamespaceAware(true);
-        }
-        return parserFactory.newDocumentBuilder();
+        return getDocumentBuilderFactory().newDocumentBuilder();
     }
 
     public static Document parse(InputSource is) throws ParserConfigurationException, SAXException,
@@ -133,33 +150,28 @@
         return getParser().newDocument();
     }
 
-    public static void setOmitXmlDecl(String value) {
-        omitXmlDecl = value;
-    }
-
-    public static void setCharsetEncoding(String value) {
-        charset = value;
-    }
-
-    public static void setIndention(int i) {
-        indent = i;
-    }
-
-    private static boolean indent() {
-        return indent != -1;
-    }
-
     public static void writeTo(Node node, OutputStream os) {
         writeTo(new DOMSource(node), os);
     }
+    public static void writeTo(Node node, OutputStream os, int indent) {
+        writeTo(new DOMSource(node), os, indent, "utf-8", "no");
+    }
     public static void writeTo(Source src, OutputStream os) {
+        writeTo(src, os, -1, "utf-8", "no");
+    }
+    public static void writeTo(Source src,
+                               OutputStream os,
+                               int indent,
+                               String charset,
+                               String omitXmlDecl) {
         Transformer it;
         try {
             it = newTransformer();
             it.setOutputProperty(OutputKeys.METHOD, "xml");
-            if (indent()) {
+            if (indent > -1) {
                 it.setOutputProperty(OutputKeys.INDENT, "yes");
-                it.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", Integer.toString(indent));
+                it.setOutputProperty("{http://xml.apache.org/xslt}indent-amount",
+                                     Integer.toString(indent));
             }
             it.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, omitXmlDecl);
             it.setOutputProperty(OutputKeys.ENCODING, charset);
@@ -187,6 +199,11 @@
         return bos.toString();
     }
 
+    public static String toString(Node node, int indent) {
+        ByteArrayOutputStream out = new ByteArrayOutputStream();
+        writeTo(node, out, indent);
+        return out.toString();
+    }
     public static String toString(Node node) {
         ByteArrayOutputStream out = new ByteArrayOutputStream();
         writeTo(node, out);

Modified: incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
URL: http://svn.apache.org/viewvc/incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java?rev=608997&r1=608996&r2=608997&view=diff
==============================================================================
--- incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
(original)
+++ incubator/cxf/branches/2.0.x-fixes/common/common/src/main/java/org/apache/cxf/staxutils/StaxUtils.java
Fri Jan  4 12:46:57 2008
@@ -826,9 +826,8 @@
     
 
     public static void printXmlFragment(XMLStreamReader reader) {
-        XMLUtils.setIndention(4);
         try {
-            LOG.info(XMLUtils.toString(StaxUtils.read(reader)));
+            LOG.info(XMLUtils.toString(StaxUtils.read(reader), 4));
         } catch (XMLStreamException e) {
             LOG.severe(e.getMessage());
         }



Mime
View raw message