You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2015/07/09 18:20:34 UTC

[1/9] cxf git commit: [CXF-6217] More updates to use secure processing

Repository: cxf
Updated Branches:
  refs/heads/3.0.x-fixes c780d3a6a -> 2d6414108


[CXF-6217] More updates to use secure processing

# Conflicts:
#	rt/rs/security/sso/saml/src/main/java/org/apache/cxf/rs/security/saml/sso/MetadataWriter.java


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/70591bf2
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/70591bf2
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/70591bf2

Branch: refs/heads/3.0.x-fixes
Commit: 70591bf2091e0406346f8afecb2f10f0e9168566
Parents: 8c898d6
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 1 12:44:55 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:26 2015 -0400

----------------------------------------------------------------------
 .../jaxrs/provider/atom/AtomPojoProvider.java   |  4 +-
 .../org/apache/cxf/wsn/jms/JmsPullPoint.java    |  7 ++-
 .../org/apache/cxf/wsn/jms/JmsSubscription.java | 12 ++--
 .../common/dom/ExtendedDocumentBuilder.java     | 43 +++++++------
 .../cxf/tools/common/toolspec/ToolSpec.java     |  6 +-
 .../toolspec/parser/CommandLineParserTest.java  |  8 ++-
 .../validator/internal/SchemaValidator.java     |  5 +-
 .../tools/validator/internal/ValidatorUtil.java |  2 +
 .../cxf/tools/wsdlto/core/PluginLoader.java     | 25 ++++++--
 .../databinding/jaxb/NamespaceContextImpl.java  | 65 --------------------
 10 files changed, 75 insertions(+), 102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java
index c1c7237..0a31633 100644
--- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java
+++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/atom/AtomPojoProvider.java
@@ -670,9 +670,7 @@ public class AtomPojoProvider extends AbstractConfigurableProvider
                 reportError("Object of type " + cls.getName() + " can not be deserialized from Entry", ex, 400);
             } finally {
                 try {
-                    if (xreader != null) {
-                        StaxUtils.close(xreader);
-                    }
+                    StaxUtils.close(xreader);
                 } catch (XMLStreamException e) {
                     //ignore
                 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java
----------------------------------------------------------------------
diff --git a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java
index 1ac5c00..92d50ae 100644
--- a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java
+++ b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsPullPoint.java
@@ -35,6 +35,7 @@ import javax.jms.Session;
 import javax.jms.TextMessage;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
 import org.apache.cxf.common.logging.LogUtils;
@@ -124,7 +125,11 @@ public class JmsPullPoint extends AbstractPullPoint {
                 StringReader reader = new StringReader(txtMsg.getText());
                 XMLStreamReader xreader = StaxUtils.createXMLStreamReader(reader);
                 Notify notify = (Notify) jaxbContext.createUnmarshaller().unmarshal(xreader);
-                reader.close();
+                try {
+                    xreader.close();
+                } catch (XMLStreamException e) {
+                    //ignoreable
+                }
                 messages.addAll(notify.getNotificationMessage());
             }
             return messages;

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java
----------------------------------------------------------------------
diff --git a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java
index a7e539e..6420400 100644
--- a/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java
+++ b/services/wsn/wsn-core/src/main/java/org/apache/cxf/wsn/jms/JmsSubscription.java
@@ -31,10 +31,10 @@ import javax.jms.MessageListener;
 import javax.jms.Session;
 import javax.jms.TextMessage;
 import javax.jms.Topic;
+import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.datatype.XMLGregorianCalendar;
-import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
@@ -46,6 +46,7 @@ import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.wsn.AbstractSubscription;
 import org.oasis_open.docs.wsn.b_2.InvalidTopicExpressionFaultType;
@@ -200,9 +201,7 @@ public abstract class JmsSubscription extends AbstractSubscription implements Me
                 NotificationMessageHolderType h = ith.next();
                 Object content = h.getMessage().getAny();
                 if (!(content instanceof Element)) {
-                    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
-                    factory.setNamespaceAware(true);
-                    Document doc = factory.newDocumentBuilder().newDocument();
+                    Document doc = DOMUtils.createDocument();
                     jaxbContext.createMarshaller().marshal(content, doc);
                     content = doc.getDocumentElement();
                 }
@@ -228,6 +227,11 @@ public abstract class JmsSubscription extends AbstractSubscription implements Me
             }
             try {
                 XPathFactory xpfactory = XPathFactory.newInstance();
+                try {
+                    xpfactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+                } catch (Throwable t) {
+                    //possibly old version, though doesn't really matter as content is already parsed as an Element
+                }
                 XPath xpath = xpfactory.newXPath();
                 XPathExpression exp = xpath.compile(contentFilter.getContent().get(0).toString());
                 Boolean ret = (Boolean) exp.evaluate(content, XPathConstants.BOOLEAN);

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/common/src/main/java/org/apache/cxf/tools/common/dom/ExtendedDocumentBuilder.java
----------------------------------------------------------------------
diff --git a/tools/common/src/main/java/org/apache/cxf/tools/common/dom/ExtendedDocumentBuilder.java b/tools/common/src/main/java/org/apache/cxf/tools/common/dom/ExtendedDocumentBuilder.java
index c3017b1..8551225 100644
--- a/tools/common/src/main/java/org/apache/cxf/tools/common/dom/ExtendedDocumentBuilder.java
+++ b/tools/common/src/main/java/org/apache/cxf/tools/common/dom/ExtendedDocumentBuilder.java
@@ -25,16 +25,22 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLStreamException;
 import javax.xml.transform.stream.StreamSource;
 import javax.xml.validation.Schema;
 import javax.xml.validation.SchemaFactory;
     
+
+
+
 import org.w3c.dom.Document;
+
 import org.xml.sax.SAXException;
 
 import org.apache.cxf.common.logging.LogUtils;
+import org.apache.cxf.staxutils.StaxUtils;
 
 /**
  * (not thread safe)
@@ -44,15 +50,11 @@ public class ExtendedDocumentBuilder {
 
     private static final Logger LOG = LogUtils.getL7dLogger(ExtendedDocumentBuilder.class);
 
-    private final DocumentBuilderFactory parserFactory;
-    private DocumentBuilder parser;
-
+    private DocumentBuilderFactory parserFactory;
     private SchemaFactory schemaFactory;
     private Schema schema;
 
     public ExtendedDocumentBuilder() {
-        parserFactory = DocumentBuilderFactory.newInstance();
-        parserFactory.setNamespaceAware(true);
     }
 
     private InputStream getSchemaLocation() {
@@ -69,30 +71,33 @@ public class ExtendedDocumentBuilder {
                 LOG.log(Level.SEVERE, "SCHEMA_FACTORY_EXCEPTION_MSG");
             }
             try {
-                this.parserFactory.setSchema(this.schema);                
+                parserFactory = DocumentBuilderFactory.newInstance();
+                try {
+                    parserFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+                } catch (ParserConfigurationException e) {
+                    //old version, not supported.
+                }
+                parserFactory.setNamespaceAware(true);
+                parserFactory.setSchema(this.schema);                
             } catch (UnsupportedOperationException e) {
                 LOG.log(Level.WARNING, "DOC_PARSER_NOT_SUPPORTED", e);
             }
         }
     }
 
-
-    private DocumentBuilder getParser() {
-        if (parser == null) {
+    public Document parse(InputStream in) throws SAXException, IOException, XMLStreamException {
+        if (in == null && LOG.isLoggable(Level.FINE)) {
+            LOG.fine("ExtendedDocumentBuilder trying to parse a null inputstream");
+        }
+        if (parserFactory != null) {
+            //validating, so need to use the validating parser factory
             try {
-                parser = parserFactory.newDocumentBuilder();
+                return parserFactory.newDocumentBuilder().parse(in);
             } catch (javax.xml.parsers.ParserConfigurationException e) {
                 LOG.log(Level.SEVERE, "NEW_DOCUMENT_BUILDER_EXCEPTION_MSG");
             }
         }
-        return parser;
-    }
-    
-    public Document parse(InputStream in) throws SAXException, IOException {
-        if (in == null && LOG.isLoggable(Level.FINE)) {
-            LOG.fine("ExtendedDocumentBuilder trying to parse a null inputstream");
-        }
-        return getParser().parse(in);
+        return StaxUtils.read(in);
     }
 
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/common/src/main/java/org/apache/cxf/tools/common/toolspec/ToolSpec.java
----------------------------------------------------------------------
diff --git a/tools/common/src/main/java/org/apache/cxf/tools/common/toolspec/ToolSpec.java b/tools/common/src/main/java/org/apache/cxf/tools/common/toolspec/ToolSpec.java
index 710e5cc..8bd9457 100644
--- a/tools/common/src/main/java/org/apache/cxf/tools/common/toolspec/ToolSpec.java
+++ b/tools/common/src/main/java/org/apache/cxf/tools/common/toolspec/ToolSpec.java
@@ -27,6 +27,8 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.logging.Level;
 import java.util.logging.Logger;
+
+import javax.xml.XMLConstants;
 import javax.xml.transform.Transformer;
 import javax.xml.transform.TransformerException;
 import javax.xml.transform.TransformerFactory;
@@ -210,7 +212,9 @@ public class ToolSpec {
     }
 
     public void transform(InputStream stylesheet, OutputStream out) throws TransformerException {
-        Transformer trans = TransformerFactory.newInstance().newTransformer(new StreamSource(stylesheet));
+        TransformerFactory factory = TransformerFactory.newInstance();
+        factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+        Transformer trans = factory.newTransformer(new StreamSource(stylesheet));
         trans.transform(new DOMSource(doc), new StreamResult(out));
     }
 

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/common/src/test/java/org/apache/cxf/tools/common/toolspec/parser/CommandLineParserTest.java
----------------------------------------------------------------------
diff --git a/tools/common/src/test/java/org/apache/cxf/tools/common/toolspec/parser/CommandLineParserTest.java b/tools/common/src/test/java/org/apache/cxf/tools/common/toolspec/parser/CommandLineParserTest.java
index 93253d0..9ca2489 100644
--- a/tools/common/src/test/java/org/apache/cxf/tools/common/toolspec/parser/CommandLineParserTest.java
+++ b/tools/common/src/test/java/org/apache/cxf/tools/common/toolspec/parser/CommandLineParserTest.java
@@ -247,8 +247,12 @@ public class CommandLineParserTest extends Assert {
             Class<?> c = Class.forName("org.apache.xerces.impl.Version");
             Object o = c.newInstance();
             String v =  (String) c.getMethod("getVersion").invoke(o);
-            float vn = Float.parseFloat(StringUtils.getFirstFound(v, "(\\d+.\\d+)"));
-            return vn >= 2.7;
+            v = StringUtils.getFirstFound(v, "(\\d+.\\d+)").trim();
+            if (v.charAt(0) >= '3') {
+                return true;
+            }
+            v = v.substring(2);
+            return Integer.parseInt(v) >= 7;
         } catch (Exception e) {
             // ignore
         }

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/SchemaValidator.java
----------------------------------------------------------------------
diff --git a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/SchemaValidator.java b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/SchemaValidator.java
index 09f65f0..8fde0b6 100644
--- a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/SchemaValidator.java
+++ b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/SchemaValidator.java
@@ -107,6 +107,7 @@ public class SchemaValidator extends AbstractDefinitionValidator {
         DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
         try {
             docFactory.setNamespaceAware(true);
+            docFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
             docBuilder = docFactory.newDocumentBuilder();
         } catch (ParserConfigurationException e) {
             throw new ToolException(e);
@@ -124,7 +125,7 @@ public class SchemaValidator extends AbstractDefinitionValidator {
         throws SAXException, IOException {
 
         SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
-
+        sf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
         SchemaResourceResolver resourceResolver = new SchemaResourceResolver();
 
         sf.setResourceResolver(resourceResolver);
@@ -156,6 +157,7 @@ public class SchemaValidator extends AbstractDefinitionValidator {
     private Schema createSchema(String[] schemas) throws SAXException, IOException {
 
         SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
+        sf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
 
         SchemaResourceResolver resourceResolver = new SchemaResourceResolver();
 
@@ -181,6 +183,7 @@ public class SchemaValidator extends AbstractDefinitionValidator {
         try {
             SAXParserFactory saxFactory = SAXParserFactory.newInstance();
             saxFactory.setFeature("http://xml.org/sax/features/namespaces", true);
+            saxFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
             saxParser = saxFactory.newSAXParser();
 
             if (defaultSchemas != null) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidatorUtil.java
----------------------------------------------------------------------
diff --git a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidatorUtil.java b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidatorUtil.java
index 305d370..bab3289 100644
--- a/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidatorUtil.java
+++ b/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/ValidatorUtil.java
@@ -32,6 +32,7 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.wsdl.Definition;
+import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
@@ -148,6 +149,7 @@ public final class ValidatorUtil {
         try {
             DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
             docFactory.setNamespaceAware(true);
+            docFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
             docBuilder = docFactory.newDocumentBuilder();
         } catch (ParserConfigurationException e) {
             throw new ToolException(e);

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/PluginLoader.java
----------------------------------------------------------------------
diff --git a/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/PluginLoader.java b/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/PluginLoader.java
index 8c36cb0..3a90451 100644
--- a/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/PluginLoader.java
+++ b/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/PluginLoader.java
@@ -35,14 +35,17 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
+import javax.xml.stream.XMLStreamException;
+
+import org.w3c.dom.Document;
 
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
+import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.tools.common.FrontEndGenerator;
 import org.apache.cxf.tools.common.Processor;
 import org.apache.cxf.tools.common.ToolException;
@@ -64,7 +67,7 @@ public final class PluginLoader {
 
     private Map<String, DataBinding> databindings = new TreeMap<String, DataBinding>();
 
-    private Unmarshaller unmarshaller;
+    private JAXBContext jaxbContext;
 
     private PluginLoader() {
         init();
@@ -72,8 +75,7 @@ public final class PluginLoader {
 
     private void init() {
         try {
-            JAXBContext jc = JAXBContext.newInstance("org.apache.cxf.tools.plugin");
-            unmarshaller = jc.createUnmarshaller();
+            jaxbContext = JAXBContext.newInstance("org.apache.cxf.tools.plugin");
             loadPlugins(ClassLoaderUtils.getResources(PLUGIN_FILE_NAME, getClass()));
         } catch (JAXBException e) {
             Message msg = new Message("JAXB_CONTEXT_INIT_FAIL", LOG);
@@ -230,7 +232,18 @@ public final class PluginLoader {
     }
 
     private Plugin getPlugin(InputStream is) throws JAXBException {
-        return (Plugin) ((JAXBElement<?>)unmarshaller.unmarshal(is)).getValue();
+        try {
+            Document doc = StaxUtils.read(is);
+            return JAXBUtils.unmarshall(jaxbContext, doc.getDocumentElement(), Plugin.class).getValue();
+        } catch (XMLStreamException xse) {
+            throw new JAXBException(xse);
+        } finally {
+            try {
+                is.close();
+            } catch (IOException e) {
+                //ignore
+            }
+        }
     }
 
     public FrontEnd getFrontEnd(String name) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/70591bf2/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/NamespaceContextImpl.java
----------------------------------------------------------------------
diff --git a/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/NamespaceContextImpl.java b/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/NamespaceContextImpl.java
deleted file mode 100644
index eff5759..0000000
--- a/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/NamespaceContextImpl.java
+++ /dev/null
@@ -1,65 +0,0 @@
-/**
- * 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.cxf.tools.wsdlto.databinding.jaxb;
-import java.io.File;
-import java.io.IOException;
-import java.util.Iterator;
-
-import javax.xml.namespace.NamespaceContext;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-import org.xml.sax.SAXException;
-
-public class NamespaceContextImpl implements NamespaceContext {
-    private Element element;
-
-    public NamespaceContextImpl(File file) {
-        Document document = null;
-        DocumentBuilderFactory docFact = DocumentBuilderFactory.newInstance();
-        docFact.setNamespaceAware(true);
-        try {
-            document = docFact.newDocumentBuilder().parse(file);
-            element = document.getDocumentElement();
-        } catch (SAXException e) {
-            e.printStackTrace();
-        } catch (IOException e) {
-            e.printStackTrace();
-        } catch (ParserConfigurationException e) {
-            e.printStackTrace();
-        }
-    }
-
-    public String getNamespaceURI(String prefix) {
-        return element.lookupNamespaceURI(prefix);
-
-    }
-
-    public String getPrefix(String namespaceURI) {
-        return element.lookupPrefix(namespaceURI);
-    }
-
-    public Iterator<?> getPrefixes(String namespaceURI) {
-        return null;
-    }
-
-}


[4/9] cxf git commit: [CXF-6458] Start work on trying to "close" the Unmarshallers that implement closeable.

Posted by dk...@apache.org.
[CXF-6458] Start work on trying to "close" the Unmarshallers that implement closeable.


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/37d49fb3
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/37d49fb3
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/37d49fb3

Branch: refs/heads/3.0.x-fixes
Commit: 37d49fb307cc83c72d2c06b9711b0d523c921d5a
Parents: c780d3a
Author: Daniel Kulp <dk...@apache.org>
Authored: Fri Jun 19 15:21:20 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:26 2015 -0400

----------------------------------------------------------------------
 .../org/apache/cxf/common/jaxb/JAXBUtils.java   | 50 ++++++++++++++++++++
 .../AbstractBPBeanDefinitionParser.java         |  7 ++-
 .../jsse/TLSClientParametersConfig.java         |  4 +-
 .../spring/AbstractBeanDefinitionParser.java    | 10 +++-
 .../configuration/spring/JAXBBeanFactory.java   |  4 +-
 .../cxf/ws/addressing/VersionTransformer.java   | 18 +++++--
 .../org/apache/cxf/jaxb/io/DataReaderImpl.java  | 31 ++++++++----
 .../org/apache/cxf/jaxrs/ext/xml/XMLSource.java | 13 +++--
 .../cxf/jaxrs/provider/JAXBElementProvider.java |  4 +-
 .../org/apache/cxf/jaxrs/utils/JAXBUtils.java   | 16 ++++++-
 .../handler/AnnotationHandlerChainBuilder.java  |  4 +-
 .../handler/logical/LogicalMessageImpl.java     |  5 +-
 .../handler/soap/SOAPMessageContextImpl.java    |  5 +-
 .../org/apache/cxf/jaxws/spi/ProviderImpl.java  | 18 +++++--
 .../cxf/jaxrs/provider/json/JSONProvider.java   |  4 +-
 .../apache/cxf/ws/addressing/soap/MAPCodec.java |  5 +-
 ...ndpointReferenceDomainExpressionBuilder.java | 38 ++++++---------
 .../builder/jaxb/JaxbAssertionBuilder.java      |  5 +-
 .../apache/cxf/wsdl/JAXBExtensionHelper.java    |  4 +-
 .../internal/WSDiscoveryServiceImpl.java        |  3 +-
 20 files changed, 182 insertions(+), 66 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
index d4b900e..fe3d2ed 100644
--- a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
+++ b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
@@ -21,6 +21,7 @@ package org.apache.cxf.common.jaxb;
 
 
 import java.io.BufferedReader;
+import java.io.Closeable;
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
@@ -48,10 +49,12 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.PropertyException;
 import javax.xml.bind.SchemaOutputResolver;
+import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.XmlElement;
 import javax.xml.bind.attachment.AttachmentMarshaller;
 import javax.xml.bind.attachment.AttachmentUnmarshaller;
@@ -59,6 +62,7 @@ import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.Result;
+import javax.xml.transform.Source;
 import javax.xml.transform.dom.DOMResult;
 import javax.xml.transform.stream.StreamResult;
 
@@ -164,6 +168,52 @@ public final class JAXBUtils {
     private JAXBUtils() {
     }
     
+    public static void closeUnmarshaller(Unmarshaller u) {
+        if (u instanceof Closeable) {
+            //need to do this to clear the ThreadLocal cache
+            //see https://java.net/jira/browse/JAXB-1000
+
+            try {
+                ((Closeable)u).close();
+            } catch (IOException e) {
+                //ignore
+            }
+        }
+    }
+    public static Object unmarshall(JAXBContext c, Element e) throws JAXBException {
+        Unmarshaller u = c.createUnmarshaller();
+        try {
+            return u.unmarshal(e);
+        } finally {
+            closeUnmarshaller(u);
+        }
+    }
+    public static <T> JAXBElement<T> unmarshall(JAXBContext c, Element e, Class<T> cls) throws JAXBException {
+        Unmarshaller u = c.createUnmarshaller();
+        try {
+            return u.unmarshal(e, cls);
+        } finally {
+            closeUnmarshaller(u);
+        }
+    }
+    public static Object unmarshall(JAXBContext c, Source s) throws JAXBException {
+        Unmarshaller u = c.createUnmarshaller();
+        try {
+            return u.unmarshal(s);
+        } finally {
+            closeUnmarshaller(u);
+        }
+    }
+    public static <T> JAXBElement<T> unmarshall(JAXBContext c, XMLStreamReader reader,
+                                                Class<T> cls) throws JAXBException {
+        Unmarshaller u = c.createUnmarshaller();
+        try {
+            return u.unmarshal(reader, cls);
+        } finally {
+            closeUnmarshaller(u);
+        }
+    }
+    
     public static String builtInTypeToJavaType(String type) {
         return BUILTIN_DATATYPES_MAP.get(type);
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java b/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
index c71601c..c211c8c 100644
--- a/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
+++ b/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
@@ -48,6 +48,7 @@ import org.apache.aries.blueprint.mutable.MutableValueMetadata;
 import org.apache.cxf.bus.blueprint.BlueprintBus;
 import org.apache.cxf.common.jaxb.JAXBContextCache;
 import org.apache.cxf.common.jaxb.JAXBContextCache.CachedContextAndSchemas;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.DOMUtils;
@@ -335,7 +336,7 @@ public abstract class AbstractBPBeanDefinitionParser {
         public Object createJAXBBean(String v) {
             XMLStreamReader reader = StaxUtils.createXMLStreamReader(new StringReader(v));
             try {
-                Object o = ctx.createUnmarshaller().unmarshal(reader, cls);
+                Object o = JAXBUtils.unmarshall(ctx, reader, cls);
                 if (o instanceof JAXBElement<?>) {
                     JAXBElement<?> el = (JAXBElement<?>)o;
                     o = el.getValue();
@@ -360,6 +361,7 @@ public abstract class AbstractBPBeanDefinitionParser {
                                             Class<?> c) {   
         try {
             XMLStreamWriter xmlWriter = null;
+            Unmarshaller u = null;
             try {
                 StringWriter writer = new StringWriter();
                 xmlWriter = StaxUtils.createXMLStreamWriter(writer);
@@ -375,7 +377,7 @@ public abstract class AbstractBPBeanDefinitionParser {
                 bean.addProperty(propertyName, factory);
 
             } catch (Exception ex) {                
-                Unmarshaller u = getContext(c).createUnmarshaller();
+                u = getContext(c).createUnmarshaller();
                 Object obj;
                 if (c != null) {
                     obj = u.unmarshal(data, c);
@@ -393,6 +395,7 @@ public abstract class AbstractBPBeanDefinitionParser {
                 }
             } finally {
                 StaxUtils.close(xmlWriter);
+                JAXBUtils.closeUnmarshaller(u);
             }
         } catch (JAXBException e) {
             throw new RuntimeException("Could not parse configuration.", e);

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java b/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
index 5677b9b..7df3e05 100644
--- a/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
+++ b/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
@@ -36,6 +36,7 @@ import javax.xml.stream.XMLStreamReader;
 import org.apache.cxf.common.injection.NoJSR250Annotations;
 import org.apache.cxf.common.jaxb.JAXBContextCache;
 import org.apache.cxf.common.jaxb.JAXBContextCache.CachedContextAndSchemas;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.configuration.security.TLSClientParametersType;
 import org.apache.cxf.staxutils.StaxUtils;
@@ -140,7 +141,7 @@ public final class TLSClientParametersConfig {
         
         StringReader reader = new StringReader(s);
         XMLStreamReader data = StaxUtils.createXMLStreamReader(reader);
-        Unmarshaller u;
+        Unmarshaller u = null;
         try {
             u = getContext().createUnmarshaller();
             JAXBElement<TLSClientParametersType> type = u.unmarshal(data, TLSClientParametersType.class);
@@ -156,6 +157,7 @@ public final class TLSClientParametersConfig {
             } catch (XMLStreamException ex) {
                 throw new RuntimeException(ex);
             }
+            JAXBUtils.closeUnmarshaller(u);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java b/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
index 7fcc99f..d28cbfb 100644
--- a/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
+++ b/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
@@ -38,8 +38,10 @@ import org.w3c.dom.Attr;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
+
 import org.apache.cxf.common.jaxb.JAXBContextCache;
 import org.apache.cxf.common.jaxb.JAXBContextCache.CachedContextAndSchemas;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.helpers.DOMUtils;
@@ -334,6 +336,7 @@ public abstract class AbstractBeanDefinitionParser
                                             Class<?> c) {
         try {
             XMLStreamWriter xmlWriter = null;
+            Unmarshaller u = null;
             try {
                 StringWriter writer = new StringWriter();
                 xmlWriter = StaxUtils.createXMLStreamWriter(writer);
@@ -348,7 +351,7 @@ public abstract class AbstractBeanDefinitionParser
                 jaxbbean.addConstructorArgValue(c);
                 bean.addPropertyValue(propertyName, jaxbbean.getBeanDefinition());
             } catch (Exception ex) {
-                Unmarshaller u = getContext(c).createUnmarshaller();
+                u = getContext(c).createUnmarshaller();
                 Object obj;
                 if (c != null) {
                     obj = u.unmarshal(data, c);
@@ -364,6 +367,7 @@ public abstract class AbstractBeanDefinitionParser
                 }
             } finally {
                 StaxUtils.close(xmlWriter);
+                JAXBUtils.closeUnmarshaller(u);
             }
         } catch (JAXBException e) {
             throw new RuntimeException("Could not parse configuration.", e);
@@ -426,8 +430,9 @@ public abstract class AbstractBeanDefinitionParser
     protected static <T> T unmarshalFactoryString(String s, JAXBContext ctx, Class<T> cls) {
         StringReader reader = new StringReader(s);
         XMLStreamReader data = StaxUtils.createXMLStreamReader(reader);
+        Unmarshaller u = null;
         try {
-            Unmarshaller u = ctx.createUnmarshaller();
+            u = ctx.createUnmarshaller();
             JAXBElement<?> obj = u.unmarshal(data, cls);
             return cls.cast(obj.getValue());
         } catch (RuntimeException e) {
@@ -440,6 +445,7 @@ public abstract class AbstractBeanDefinitionParser
             } catch (XMLStreamException ex) {
                 throw new RuntimeException(ex);
             }
+            JAXBUtils.closeUnmarshaller(u);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java b/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
index c542482..9e4efc9 100644
--- a/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
+++ b/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
@@ -28,6 +28,7 @@ import javax.xml.bind.Unmarshaller;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.staxutils.StaxUtils;
 
 /**
@@ -44,7 +45,7 @@ public final class JAXBBeanFactory {
         
         StringReader reader = new StringReader(s);
         XMLStreamReader data = StaxUtils.createXMLStreamReader(reader);
-        Unmarshaller u;
+        Unmarshaller u = null;
         try {
             Object obj;
             u = context.createUnmarshaller();
@@ -67,6 +68,7 @@ public final class JAXBBeanFactory {
             } catch (XMLStreamException ex) {
                 throw new RuntimeException(ex);
             }
+            JAXBUtils.closeUnmarshaller(u);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java b/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
index 588c83f..dec36de 100644
--- a/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
+++ b/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
@@ -26,12 +26,16 @@ import java.util.Map;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
+import javax.xml.bind.Unmarshaller;
 import javax.xml.namespace.QName;
 //import javax.xml.ws.EndpointReference;
 //import javax.xml.ws.wsaddressing.W3CEndpointReference;
 
+
+
 import org.w3c.dom.Element;
 
+import org.apache.cxf.common.jaxb.JAXBUtils;
 // importation convention: if the same class name is used for 
 // 2005/08 and 2004/08, then the former version is imported
 // and the latter is fully qualified when used
@@ -436,12 +440,16 @@ public class VersionTransformer {
             return null;
         }
         JAXBContext ctx = getExposedJAXBContext(tns);
-        JAXBElement<?> o = ctx.createUnmarshaller().unmarshal(ref, getExposedReferenceType(tns));
-        if (o != null) {
-            return convertToNative(o.getValue());
+        Unmarshaller um = ctx.createUnmarshaller();
+        try {
+            JAXBElement<?> o = um.unmarshal(ref, getExposedReferenceType(tns));
+            if (o != null) {
+                return convertToNative(o.getValue());
+            }
+            return convertToNative(null);
+        } finally {
+            JAXBUtils.closeUnmarshaller(um);
         }
-        return convertToNative(null);
-        
     }
     /**
      * Converts a version specific EndpointReferenceType to the native version

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
----------------------------------------------------------------------
diff --git a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
index de13029..374736f 100644
--- a/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
+++ b/rt/databinding/jaxb/src/main/java/org/apache/cxf/jaxb/io/DataReaderImpl.java
@@ -34,6 +34,7 @@ import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.namespace.QName;
 
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.databinding.DataReader;
 import org.apache.cxf.interceptor.Fault;
@@ -173,20 +174,32 @@ public class DataReaderImpl<T> extends JAXBDataBase implements DataReader<T> {
             }
         }
         
-        Object obj = JAXBEncoderDecoder.unmarshall(createUnmarshaller(), reader, part, 
-                                             unwrapJAXBElement);
-        onCompleteUnmarshalling();
-        
-        return obj;
+        Unmarshaller um = createUnmarshaller();
+        try {
+            Object obj = JAXBEncoderDecoder.unmarshall(um, reader, part, 
+                                                 unwrapJAXBElement);
+            onCompleteUnmarshalling();
+            
+            return obj;
+        } finally {
+            JAXBUtils.closeUnmarshaller(um);
+        }
     }
 
     public Object read(QName name, T input, Class<?> type) {
-        Object obj = JAXBEncoderDecoder.unmarshall(createUnmarshaller(), input,
+        Unmarshaller um = createUnmarshaller();
+        
+        try {
+            Object obj = JAXBEncoderDecoder.unmarshall(um, input,
                                              name, type, 
                                              unwrapJAXBElement);
-        onCompleteUnmarshalling();
-        
-        return obj;
+            onCompleteUnmarshalling();
+            
+            return obj;
+        } finally {
+            JAXBUtils.closeUnmarshaller(um);
+        }
+
     }
 
     private void onCompleteUnmarshalling() {

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
index c1272a6..062338d 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
@@ -47,6 +47,7 @@ import org.w3c.dom.NodeList;
 
 import org.xml.sax.InputSource;
 
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxrs.provider.JAXBElementProvider;
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
@@ -358,10 +359,14 @@ public class XMLSource {
                 c = provider.getClassContext(cls);
             }
             Unmarshaller u = c.createUnmarshaller();
-            if (cls.getAnnotation(XmlRootElement.class) != null) {
-                return cls.cast(u.unmarshal(s));
-            } else {
-                return u.unmarshal(s, cls).getValue();
+            try {
+                if (cls.getAnnotation(XmlRootElement.class) != null) {
+                    return cls.cast(u.unmarshal(s));
+                } else {
+                    return u.unmarshal(s, cls).getValue();
+                }
+            } finally {
+                JAXBUtils.closeUnmarshaller(u);
             }
         } catch (Exception ex) {
             throw new RuntimeException(ex);

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
index f17c93b..4c61df9 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JAXBElementProvider.java
@@ -168,13 +168,14 @@ public class JAXBElementProvider<T> extends AbstractJAXBProvider<T>  {
         }
         
         XMLStreamReader reader = null;
+        Unmarshaller unmarshaller = null;
         try {
             
             boolean isCollection = InjectionUtils.isSupportedCollectionOrArray(type);
             Class<?> theGenericType = isCollection ? InjectionUtils.getActualType(genericType) : type;
             Class<?> theType = getActualType(theGenericType, genericType, anns);
 
-            Unmarshaller unmarshaller = createUnmarshaller(theType, genericType, isCollection);
+            unmarshaller = createUnmarshaller(theType, genericType, isCollection);
             addAttachmentUnmarshaller(unmarshaller);
             Object response = null;
             if (JAXBElement.class.isAssignableFrom(type) 
@@ -217,6 +218,7 @@ public class JAXBElementProvider<T> extends AbstractJAXBProvider<T>  {
             } catch (XMLStreamException e) {
                 // Ignore
             }
+            JAXBUtils.closeUnmarshaller(unmarshaller);
         }
         // unreachable
         return null;

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java
index 27ed25a..aba95d2 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/utils/JAXBUtils.java
@@ -18,9 +18,12 @@
  */
 package org.apache.cxf.jaxrs.utils;
 
+import java.io.Closeable;
+import java.io.IOException;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
 
+import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.adapters.XmlAdapter;
 import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
 
@@ -28,7 +31,18 @@ public final class JAXBUtils {
     private JAXBUtils() {
         
     }
-    
+    public static void closeUnmarshaller(Unmarshaller u) {
+        if (u instanceof Closeable) {
+            //need to do this to clear the ThreadLocal cache
+            //see https://java.net/jira/browse/JAXB-1000
+
+            try {
+                ((Closeable)u).close();
+            } catch (IOException e) {
+                //ignore
+            }
+        }        
+    }
     public static Object convertWithAdapter(Object obj,
                                             Class<?> adapterClass,
                                             Annotation[] anns) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
index 914db9e..d8d62f4 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/AnnotationHandlerChainBuilder.java
@@ -44,6 +44,7 @@ import org.apache.cxf.Bus;
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.jaxws.handler.types.PortComponentHandlerType;
@@ -265,8 +266,7 @@ public class AnnotationHandlerChainBuilder extends HandlerChainBuilder {
     private void processHandlerElement(Element el, List<Handler> chain) {
         try {
             JAXBContext ctx = getContextForPortComponentHandlerType();
-            PortComponentHandlerType pt = ctx.createUnmarshaller()
-                .unmarshal(el, PortComponentHandlerType.class).getValue();
+            PortComponentHandlerType pt = JAXBUtils.unmarshall(ctx, el, PortComponentHandlerType.class).getValue();
             chain.addAll(buildHandlerChain(pt, classLoader));
         } catch (JAXBException e) {
             // TODO Auto-generated catch block

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
index dfe6ad0..835289a 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/logical/LogicalMessageImpl.java
@@ -47,6 +47,7 @@ import org.w3c.dom.Node;
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.saaj.SAAJFactoryResolver;
 import org.apache.cxf.binding.soap.saaj.SAAJUtils;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.interceptor.Fault;
@@ -241,14 +242,14 @@ public class LogicalMessageImpl implements LogicalMessage {
                     parent.removeChild(ds.getNode());
                 }
                 try {
-                    return arg0.createUnmarshaller().unmarshal(ds);
+                    return JAXBUtils.unmarshall(arg0, ds);
                 } finally {
                     if (parent instanceof DocumentFragment) {
                         parent.insertBefore(ds.getNode(), next);
                     }
                 }
             } 
-            return arg0.createUnmarshaller().unmarshal(getPayload());
+            return JAXBUtils.unmarshall(arg0, getPayload());
         } catch (JAXBException e) {
             throw new WebServiceException(e);
         }

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
index ffcf1ce..6dc8af0 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/handler/soap/SOAPMessageContextImpl.java
@@ -40,6 +40,7 @@ import javax.xml.ws.handler.soap.SOAPMessageContext;
 
 import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.saaj.SAAJInInterceptor;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxws.context.WrappedMessageContext;
 import org.apache.cxf.message.Message;
@@ -97,9 +98,7 @@ public class SOAPMessageContextImpl extends WrappedMessageContext implements SOA
                 if ((allRoles
                     || roles.contains(she.getActor())) 
                     && name.equals(she.getElementQName())) {
-                    
-                    ret.add(context.createUnmarshaller().unmarshal(she));
-                    
+                    ret.add(JAXBUtils.unmarshall(context, she));
                 }
             }
             return ret.toArray(new Object[ret.size()]);

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java
index bc890fa..58714a5 100644
--- a/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java
+++ b/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/spi/ProviderImpl.java
@@ -50,6 +50,7 @@ import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.common.classloader.ClassLoaderUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.feature.Feature;
 import org.apache.cxf.helpers.DOMUtils;
@@ -182,7 +183,7 @@ public class ProviderImpl extends javax.xml.ws.spi.Provider {
     public static EndpointReferenceType convertToInternal(EndpointReference external) {
         if (external instanceof W3CEndpointReference) {
             
-            
+            Unmarshaller um = null;
             try {
                 Document doc = DOMUtils.newDocument();
                 DOMResult result = new DOMResult(doc);
@@ -194,13 +195,16 @@ public class ProviderImpl extends javax.xml.ws.spi.Provider {
                 //jaxContext = ContextUtils.getJAXBContext();
                 JAXBContext context = JAXBContext
                     .newInstance(new Class[] {org.apache.cxf.ws.addressing.ObjectFactory.class});
-                EndpointReferenceType internal = context.createUnmarshaller()
+                um = context.createUnmarshaller();
+                EndpointReferenceType internal = um
                     .unmarshal(reader, EndpointReferenceType.class)
                     .getValue();
                 return internal;
             } catch (JAXBException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
+            } finally {
+                JAXBUtils.closeUnmarshaller(um);
             }
             return null;
         } else {
@@ -362,7 +366,11 @@ public class ProviderImpl extends javax.xml.ws.spi.Provider {
                 return AccessController.doPrivileged(new PrivilegedExceptionAction<W3CEndpointReference>() {
                     public W3CEndpointReference run() throws Exception {
                         Unmarshaller unmarshaller = getJAXBContext().createUnmarshaller();
-                        return (W3CEndpointReference)unmarshaller.unmarshal(writer.getDocument());
+                        try {
+                            return (W3CEndpointReference)unmarshaller.unmarshal(writer.getDocument());
+                        } finally {
+                            JAXBUtils.closeUnmarshaller(unmarshaller);
+                        }
                     }
                 });
             } catch (PrivilegedActionException pae) {
@@ -391,8 +399,9 @@ public class ProviderImpl extends javax.xml.ws.spi.Provider {
             final XMLStreamReader reader = StaxUtils.createXMLStreamReader(eprInfoset);
             return AccessController.doPrivileged(new PrivilegedExceptionAction<EndpointReference>() {
                 public EndpointReference run() throws Exception {
+                    Unmarshaller unmarshaller = null;
                     try {
-                        Unmarshaller unmarshaller = getJAXBContext().createUnmarshaller();
+                        unmarshaller = getJAXBContext().createUnmarshaller();
                         return (EndpointReference)unmarshaller.unmarshal(reader);
                     } finally {
                         try {
@@ -400,6 +409,7 @@ public class ProviderImpl extends javax.xml.ws.spi.Provider {
                         } catch (XMLStreamException e) {
                             // Ignore
                         }
+                        JAXBUtils.closeUnmarshaller(unmarshaller);
                     }
                 }
             });

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
----------------------------------------------------------------------
diff --git a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
index ab90546..2a53be9 100644
--- a/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
+++ b/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java
@@ -217,6 +217,7 @@ public class JSONProvider<T> extends AbstractJAXBProvider<T>  {
         
         XMLStreamReader reader = null;
         String enc = HttpUtils.getEncoding(mt, "UTF-8");
+        Unmarshaller unmarshaller = null;
         try {
             InputStream realStream = getInputStream(type, genericType, is);
             if (Document.class.isAssignableFrom(type)) {
@@ -229,7 +230,7 @@ public class JSONProvider<T> extends AbstractJAXBProvider<T>  {
             Class<?> theGenericType = isCollection ? InjectionUtils.getActualType(genericType) : type;
             Class<?> theType = getActualType(theGenericType, genericType, anns);
             
-            Unmarshaller unmarshaller = createUnmarshaller(theType, genericType, isCollection);
+            unmarshaller = createUnmarshaller(theType, genericType, isCollection);
             XMLStreamReader xsr = createReader(type, realStream, isCollection, enc);
             
             Object response = null;
@@ -270,6 +271,7 @@ public class JSONProvider<T> extends AbstractJAXBProvider<T>  {
             } catch (XMLStreamException e) {
                 throw ExceptionUtils.toBadRequestException(e, null);
             }
+            JAXBUtils.closeUnmarshaller(unmarshaller);
         }
         // unreachable
         return null;

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
----------------------------------------------------------------------
diff --git a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
index e0a5bf6..75e20d4 100644
--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
@@ -46,6 +46,7 @@ import org.apache.cxf.binding.soap.SoapMessage;
 import org.apache.cxf.binding.soap.SoapVersion;
 import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;
 import org.apache.cxf.binding.soap.interceptor.SoapActionInInterceptor;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.headers.Header;
@@ -470,11 +471,11 @@ public class MAPCodec extends AbstractSoapInterceptor {
         // REVISIT generate MessageAddressingHeaderRequired fault if an
         // expected header is missing 
         AddressingProperties maps = null;
+        Unmarshaller unmarshaller = null;
         try {
             List<Header> header = message.getHeaders();
             if (header != null) {
                 LOG.log(Level.FINE, "Inbound WS-Addressing headers");
-                Unmarshaller unmarshaller = null;
                 Set<Element> referenceParameterHeaders = null;
                 QName invalidCardinalityQName = null;
                 Iterator<Header> iter = header.iterator();
@@ -588,6 +589,8 @@ public class MAPCodec extends AbstractSoapInterceptor {
             }
         } catch (JAXBException je) {
             LOG.log(Level.WARNING, "SOAP_HEADER_DECODE_FAILURE_MSG", je); 
+        } finally {
+            JAXBUtils.closeUnmarshaller(unmarshaller);
         }
         return maps;
     }

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
----------------------------------------------------------------------
diff --git a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
index 62b24ea..6d77493 100644
--- a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
+++ b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/attachment/external/EndpointReferenceDomainExpressionBuilder.java
@@ -26,13 +26,13 @@ import java.util.ResourceBundle;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
 import javax.xml.namespace.QName;
 
 import org.w3c.dom.Element;
 
 import org.apache.cxf.common.i18n.BundleUtils;
 import org.apache.cxf.common.i18n.Message;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.ws.addressing.EndpointReferenceType;
 import org.apache.cxf.ws.policy.PolicyException;
@@ -48,7 +48,7 @@ public class EndpointReferenceDomainExpressionBuilder implements DomainExpressio
     private static final Collection<QName> SUPPORTED_TYPES = Collections.singletonList(
         new QName("http://www.w3.org/2005/08/addressing", "EndpointReference"));
     
-    private Unmarshaller unmarshaller;
+    private JAXBContext context;
     
     public EndpointReferenceDomainExpressionBuilder() {
 
@@ -61,7 +61,7 @@ public class EndpointReferenceDomainExpressionBuilder implements DomainExpressio
     public DomainExpression build(Element e) {
         Object obj = null;
         try {
-            obj = getUnmarshaller().unmarshal(e);
+            obj = JAXBUtils.unmarshall(createJAXBContext(), e);
         } catch (JAXBException ex) {
             throw new PolicyException(new Message("EPR_DOMAIN_EXPRESSION_BUILD_EXC", BUNDLE, 
                                                   (Object[])null), ex);
@@ -75,28 +75,18 @@ public class EndpointReferenceDomainExpressionBuilder implements DomainExpressio
         eprde.setEndpointReference((EndpointReferenceType)obj);
         return eprde;
     }
-
-    protected Unmarshaller getUnmarshaller() {
-        if (unmarshaller == null) {
-            createUnmarshaller();
-        }
-        
-        return unmarshaller;
-    }
     
-    protected synchronized void createUnmarshaller() {
-        if (unmarshaller != null) {
-            return;
-        }
-        
-        try {
-            Class<?> clz = EndpointReferenceType.class;
-            String pkg = PackageUtils.getPackageName(clz);
-            JAXBContext context = JAXBContext.newInstance(pkg, clz.getClassLoader());
-            unmarshaller = context.createUnmarshaller();
-        } catch (JAXBException ex) {
-            throw new PolicyException(new Message("EPR_DOMAIN_EXPRESSION_BUILDER_INIT_EXC", BUNDLE, 
-                                                  (Object[])null), ex);
+    protected synchronized JAXBContext createJAXBContext() {
+        if (context == null) {
+            try {
+                Class<?> clz = EndpointReferenceType.class;
+                String pkg = PackageUtils.getPackageName(clz);
+                context = JAXBContext.newInstance(pkg, clz.getClassLoader());
+            } catch (JAXBException ex) {
+                throw new PolicyException(new Message("EPR_DOMAIN_EXPRESSION_BUILDER_INIT_EXC", BUNDLE, 
+                                                      (Object[])null), ex);
+            }
         }
+        return context;
     }
 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
----------------------------------------------------------------------
diff --git a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
index 22c9bd5..17966b4 100644
--- a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
+++ b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
@@ -138,10 +138,13 @@ public class JaxbAssertionBuilder<T> implements AssertionBuilder<Element> {
     @SuppressWarnings("unchecked")
     protected T getData(Element element) {
         Object obj = null;
+        Unmarshaller um = getUnmarshaller();
         try {
-            obj = getUnmarshaller().unmarshal(element);
+            obj = um.unmarshal(element);
         } catch (JAXBException ex) {
             LogUtils.log(LOG, Level.SEVERE, "UNMARSHAL_ELEMENT_EXC", ex);
+        } finally {
+            JAXBUtils.closeUnmarshaller(um);
         }
         if (obj instanceof JAXBElement<?>) {
             JAXBElement<?> el = (JAXBElement<?>)obj;

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/rt/wsdl/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java
----------------------------------------------------------------------
diff --git a/rt/wsdl/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java b/rt/wsdl/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java
index abe0bcc..f5bae66 100644
--- a/rt/wsdl/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java
+++ b/rt/wsdl/src/main/java/org/apache/cxf/wsdl/JAXBExtensionHelper.java
@@ -346,8 +346,9 @@ public class JAXBExtensionHelper implements ExtensionSerializer, ExtensionDeseri
                                            QName qname, Element element, Definition wsdl,
                                            ExtensionRegistry registry) throws WSDLException {
         XMLStreamReader reader = null;
+        Unmarshaller u = null;
         try {
-            Unmarshaller u = createUnmarshaller();
+            u = createUnmarshaller();
         
             Object o = null;
             if (namespace == null) {
@@ -376,6 +377,7 @@ public class JAXBExtensionHelper implements ExtensionSerializer, ExtensionDeseri
             } catch (XMLStreamException ex) {
                 throw new WSDLException(WSDLException.PARSER_ERROR, ex.getMessage(), ex);
             }
+            JAXBUtils.closeUnmarshaller(u);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/37d49fb3/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java
----------------------------------------------------------------------
diff --git a/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java b/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java
index de8a0e6..0ddf0c2 100644
--- a/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java
+++ b/services/ws-discovery/ws-discovery-api/src/main/java/org/apache/cxf/ws/discovery/internal/WSDiscoveryServiceImpl.java
@@ -56,6 +56,7 @@ import org.w3c.dom.Document;
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
 import org.apache.cxf.common.jaxb.JAXBContextCache;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.endpoint.Server;
@@ -498,7 +499,7 @@ public class WSDiscoveryServiceImpl implements WSDiscoveryService {
                     return null;
                 }
                 
-                Object obj = context.createUnmarshaller().unmarshal(doc.getDocumentElement());
+                Object obj = JAXBUtils.unmarshall(context, doc.getDocumentElement());
                 if (obj instanceof JAXBElement) {
                     obj = ((JAXBElement)obj).getValue();
                 }


[5/9] cxf git commit: [CXF-6217] Use faster method for parsing the strings from blueprint. (use StringReader instead of ByteArrayInputStream and use StaxUtils)

Posted by dk...@apache.org.
[CXF-6217] Use faster method for parsing the strings from blueprint.  (use StringReader instead of ByteArrayInputStream and use StaxUtils)


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/8c898d66
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/8c898d66
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/8c898d66

Branch: refs/heads/3.0.x-fixes
Commit: 8c898d665163ed6710067893ce999ecbe2416249
Parents: 19e3be7
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 1 10:12:06 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:26 2015 -0400

----------------------------------------------------------------------
 .../blueprint/JettyHTTPServerEngineFactoryHolder.java  | 13 ++++---------
 .../blueprint/NettyHttpServerEngineFactoryHolder.java  | 13 +++++--------
 2 files changed, 9 insertions(+), 17 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/8c898d66/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
index 4f0d415..d54cc2f 100644
--- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
+++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
@@ -18,7 +18,7 @@
  */
 package org.apache.cxf.transport.http_jetty.blueprint;
 
-import java.io.ByteArrayInputStream;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -31,7 +31,6 @@ import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
-import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.w3c.dom.Element;
 
@@ -41,6 +40,7 @@ import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.configuration.jsse.TLSServerParameters;
 import org.apache.cxf.configuration.jsse.TLSServerParametersConfig;
+import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngine;
 import org.apache.cxf.transport.http_jetty.JettyHTTPServerEngineFactory;
 import org.apache.cxf.transport.http_jetty.ThreadingParameters;
@@ -71,13 +71,8 @@ public class JettyHTTPServerEngineFactoryHolder {
 
     public void init() {
         try {
-
-            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
-            docFactory.setNamespaceAware(true);
-
-            Element element = docFactory.newDocumentBuilder()
-                .parse(new ByteArrayInputStream(parsedElement.getBytes())).getDocumentElement();
-
+            Element element = StaxUtils.read(new StringReader(parsedElement)).getDocumentElement();
+            
             JettyHTTPServerEngineFactoryConfigType config 
                 = (JettyHTTPServerEngineFactoryConfigType) getJaxbObject(element,
                     JettyHTTPServerEngineFactoryConfigType.class);

http://git-wip-us.apache.org/repos/asf/cxf/blob/8c898d66/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/blueprint/NettyHttpServerEngineFactoryHolder.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/blueprint/NettyHttpServerEngineFactoryHolder.java b/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/blueprint/NettyHttpServerEngineFactoryHolder.java
index 00786db..7700949 100644
--- a/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/blueprint/NettyHttpServerEngineFactoryHolder.java
+++ b/rt/transports/http-netty/netty-server/src/main/java/org/apache/cxf/transport/http/netty/server/blueprint/NettyHttpServerEngineFactoryHolder.java
@@ -18,7 +18,7 @@
  */
 package org.apache.cxf.transport.http.netty.server.blueprint;
 
-import java.io.ByteArrayInputStream;
+import java.io.StringReader;
 import java.util.ArrayList;
 import java.util.HashSet;
 import java.util.List;
@@ -26,11 +26,12 @@ import java.util.Map;
 import java.util.Set;
 import java.util.TreeMap;
 import java.util.logging.Logger;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Unmarshaller;
-import javax.xml.parsers.DocumentBuilderFactory;
+
 import org.w3c.dom.Element;
 
 import org.apache.cxf.common.jaxb.JAXBContextCache;
@@ -39,6 +40,7 @@ import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.configuration.jsse.TLSServerParameters;
 import org.apache.cxf.configuration.jsse.TLSServerParametersConfig;
+import org.apache.cxf.staxutils.StaxUtils;
 import org.apache.cxf.transport.http.netty.server.NettyHttpServerEngine;
 import org.apache.cxf.transport.http.netty.server.NettyHttpServerEngineFactory;
 import org.apache.cxf.transport.http.netty.server.ThreadingParameters;
@@ -63,12 +65,7 @@ public class NettyHttpServerEngineFactoryHolder {
 
     public void init() {
         try {
-
-            DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
-            docFactory.setNamespaceAware(true);
-
-            Element element = docFactory.newDocumentBuilder()
-                .parse(new ByteArrayInputStream(parsedElement.getBytes())).getDocumentElement();
+            Element element = StaxUtils.read(new StringReader(parsedElement)).getDocumentElement();
 
             NettyHttpServerEngineFactoryConfigType config 
                 = (NettyHttpServerEngineFactoryConfigType) getJaxbObject(element,


[3/9] cxf git commit: [CXF-6217] Fix a couple of the secure processing thigns

Posted by dk...@apache.org.
[CXF-6217] Fix a couple of the secure processing thigns


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/34359c95
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/34359c95
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/34359c95

Branch: refs/heads/3.0.x-fixes
Commit: 34359c952209dd5b66ede5255f83bcdd729b53de
Parents: e439993
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 1 10:04:31 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:26 2015 -0400

----------------------------------------------------------------------
 .../org/apache/cxf/jaxrs/ext/xml/XMLSource.java | 29 ++++++++++++++++----
 .../cxf/jaxrs/provider/XSLTJaxbProvider.java    |  2 ++
 .../bootstrapping/SimpleXMLSettingsStorage.java |  9 +++++-
 3 files changed, 34 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/34359c95/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
index 062338d..f1816d6 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
@@ -26,6 +26,7 @@ import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.bind.annotation.XmlRootElement;
@@ -39,6 +40,7 @@ import javax.xml.xpath.XPath;
 import javax.xml.xpath.XPathConstants;
 import javax.xml.xpath.XPathExpressionException;
 import javax.xml.xpath.XPathFactory;
+import javax.xml.xpath.XPathFactoryConfigurationException;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -283,16 +285,33 @@ public class XMLSource {
     
     
     private Object evaluate(String expression, Map<String, String> namespaces, QName type) {
-        XPath xpath = XPathFactory.newInstance().newXPath();
+        XPathFactory factory = XPathFactory.newInstance();
+        try {
+            factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
+        } catch (XPathFactoryConfigurationException e) {
+            throw new RuntimeException(e);
+        }
+        XPath xpath = factory.newXPath();
         xpath.setNamespaceContext(new NamespaceContextImpl(namespaces));
+        boolean releaseDoc = false;
         try {
-            if (stream == null) {
-                return xpath.compile(expression).evaluate(doc, type);
-            } else {
-                return xpath.compile(expression).evaluate(new InputSource(stream), type);
+            if (stream != null) {
+                //xalan xpath evaluate parses to a DOM via a DocumentBuilderFactory, but doesn't 
+                //set the SecureProcessing on that. Since a DOM is always created, might as well 
+                //do it via stax and avoid the service factory performance hits that the 
+                //DocumentBuilderFactory will entail as well as get the extra security 
+                //that woodstox provides
+                setBuffering();
+                releaseDoc = true;
             }
+            return xpath.compile(expression).evaluate(doc, type);
         } catch (XPathExpressionException ex) {
             throw new IllegalArgumentException("Illegal XPath expression '" + expression + "'", ex);
+        } finally {
+            if (releaseDoc) {
+                //don't need to maintain the doc
+                doc = null;
+            }
         }
     }
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/34359c95/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java
index 528ad80..bf1e13e 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/XSLTJaxbProvider.java
@@ -41,6 +41,7 @@ import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.core.PathSegment;
 import javax.ws.rs.core.UriInfo;
 import javax.ws.rs.ext.Provider;
+import javax.xml.XMLConstants;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
 import javax.xml.bind.Unmarshaller;
@@ -519,6 +520,7 @@ public class XSLTJaxbProvider<T> extends JAXBElementProvider<T> {
             source.setSystemId(urlStream.toExternalForm());
             if (factory == null) {
                 factory = (SAXTransformerFactory)TransformerFactory.newInstance();
+                factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.TRUE);
                 if (uriResolver != null) {
                     factory.setURIResolver(uriResolver);
                 }

http://git-wip-us.apache.org/repos/asf/cxf/blob/34359c95/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/bootstrapping/SimpleXMLSettingsStorage.java
----------------------------------------------------------------------
diff --git a/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/bootstrapping/SimpleXMLSettingsStorage.java b/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/bootstrapping/SimpleXMLSettingsStorage.java
index ceecd31..7142564 100644
--- a/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/bootstrapping/SimpleXMLSettingsStorage.java
+++ b/rt/management-web/src/main/java/org/apache/cxf/management/web/browser/bootstrapping/SimpleXMLSettingsStorage.java
@@ -20,12 +20,14 @@
 package org.apache.cxf.management.web.browser.bootstrapping;
 
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileNotFoundException;
 import java.io.FileOutputStream;
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.GregorianCalendar;
 import java.util.List;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 import javax.xml.bind.Marshaller;
@@ -37,8 +39,10 @@ import javax.xml.bind.annotation.XmlSchemaType;
 import javax.xml.datatype.DatatypeConfigurationException;
 import javax.xml.datatype.DatatypeFactory;
 import javax.xml.datatype.XMLGregorianCalendar;
+import javax.xml.stream.XMLStreamReader;
 
 import org.apache.commons.lang.Validate;
+import org.apache.cxf.staxutils.StaxUtils;
 
 public class SimpleXMLSettingsStorage implements SettingsStorage {
     private static final String DEFAULT_FILENAME = "logbrowser-settings.xml";
@@ -68,12 +72,15 @@ public class SimpleXMLSettingsStorage implements SettingsStorage {
             File file = new File(filename);
             if (file.exists()) {
                 Unmarshaller unmarshaller = context.createUnmarshaller();
-                entries = (Entries) unmarshaller.unmarshal(file);
+                XMLStreamReader reader = StaxUtils.createXMLStreamReader(new FileInputStream(file));
+                entries = (Entries) unmarshaller.unmarshal(reader);
             }
 
             if (entries == null) {
                 entries = new Entries();
             }
+        } catch (FileNotFoundException e) {
+            throw new RuntimeException(e);
         } catch (JAXBException e) {
             throw new RuntimeException(e);
         }


[8/9] cxf git commit: Recording .gitmergeinfo Changes

Posted by dk...@apache.org.
Recording .gitmergeinfo Changes


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/b6907af1
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/b6907af1
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/b6907af1

Branch: refs/heads/3.0.x-fixes
Commit: b6907af15937c50e894d784c509bd4b9ca895f47
Parents: e6a3d86
Author: Daniel Kulp <dk...@apache.org>
Authored: Thu Jul 9 08:59:57 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:27 2015 -0400

----------------------------------------------------------------------
 .gitmergeinfo | 6 ++++++
 1 file changed, 6 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/b6907af1/.gitmergeinfo
----------------------------------------------------------------------
diff --git a/.gitmergeinfo b/.gitmergeinfo
index 271380d..de597be 100644
--- a/.gitmergeinfo
+++ b/.gitmergeinfo
@@ -126,8 +126,10 @@ B 5743d5e9bf547bcd0066b2369adadcbb5a8bacbd
 B 577ccc51c269c66e7810eb4aad9f93cb23c78f8e
 B 578a51c1ba7f12b35730b0d66ac6b4ab880fb94c
 B 5891c0d23b776d41be02e74a3b98a3881970d08f
+B 58d5200bdc0f666615e99f1c624c53299120518a
 B 593525139909e081ae809278d301688c0ba03697
 B 59b7fd7072a71498aecb1b5da6ec51ea89f7381b
+B 5a1dd7723e3c21267e12d1562f4a2425049bc7ad
 B 5aa98c1c2391ba9ce86797119a972ae56a4a9fd0
 B 5b26ab08f19f6c55a45c0f1f7ddccd09b0a2ed23
 B 5bac26a132e7999bf0bd108d4cffb674873a56ca
@@ -234,6 +236,7 @@ B 9dd4194ce6af00377b0e1bdc6b15744fe03e29c9
 B 9de88cce894ca9ea746abf27943635467e23c153
 B 9dfb278c7739b9f4621f43b8146d057e21fafb64
 B 9ea935fcbf3869f5fa4fd1e75a0a2309cc780415
+B 9fc26998d89a9f7d04d3a57a97b4c09c745b076b
 B 9fce658c4611f790983a3d5cef7312eec8771461
 B 9fe4c04a1c875b3e8f402268cd9dfe18431b5cc9
 B a04a1e06f7fffc5f145e33c6832f31b04782516b
@@ -390,6 +393,7 @@ M 10b043faa0652a6a06f5f020173162edef7fb0ca
 M 12d070f4392316cdfff03eb41abe22531ed64ee9
 M 16ffa0f10dac874cd5727d312ac56a78b13e5ca9
 M 1701e6c8d4e794f25d69781e3f69357723ad7fcf
+M 174bd11dcfeae47998723757542abe56c792cc76
 M 18a3d43cb0044fcb84d3cc89f138fd9e7110dd04
 M 1946e323a0df6e5f9748af82106cff39d7b5d01f
 M 19e912e8d4b6d3f3a4c2b88b1d53e691496d7dc0
@@ -464,6 +468,7 @@ M 7b31a2afca1ec599100511ce1f7428160618f389
 M 7b4cb818cb6276dfd3a7432c796e67e98c8c941e
 M 7bf10fc3fb018d533409cc444c2d7b75144b9e23
 M 816e1a5ef4c0992a7d084a0529e42d9ad6a4a3c6
+M 81f0b461d662eccd23ac5ade7349eecdc0316ddf
 M 824234e627f6205129b7f97e2fde7f1cf1f17093
 M 865eb64d44fd4e904f166cb03b0d15ca8b5f0ba5
 M 88a7cd850f0471d6e51f9045bf01f775a905cbf2
@@ -501,6 +506,7 @@ M bd1d31f195caab56fbe565fbfb63d9170a0c9406
 M bd7babd656fc06f3e5839bf11e186ec12fdeb6fa
 M bee82ba7d1766b555d965a75b3846ead4686239e
 M c1c75b039df7bd1ca9f11ff21f16593fed0c8c16
+M c322ba957e09c58ccef0fe25b382497b031fdc06
 M c34bf7ad6bc55b6584dfd009f49a3f4eb8ececc9
 M c55664128b1223667dedacc2011ccd5945d9c8b9
 M c5dbb84ac4e5bf73555e85ae1e65a5065393c602


[6/9] cxf git commit: Eliminate eclipse warnings

Posted by dk...@apache.org.
Eliminate eclipse warnings


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e4399939
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e4399939
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e4399939

Branch: refs/heads/3.0.x-fixes
Commit: e439993929afec2bf416b7a24596f52bd947f1f1
Parents: 37d49fb
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 1 08:43:17 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:26 2015 -0400

----------------------------------------------------------------------
 core/src/main/java/org/apache/cxf/common/security/SimpleGroup.java | 1 +
 .../apache/cxf/jaxrs/security/KerberosAuthenticationFilter.java    | 1 +
 .../apache/cxf/rs/security/jose/jaxrs/JwtAuthenticationFilter.java | 1 +
 .../cxf/rs/security/saml/authorization/SubjectPrincipal.java       | 2 ++
 4 files changed, 5 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e4399939/core/src/main/java/org/apache/cxf/common/security/SimpleGroup.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/security/SimpleGroup.java b/core/src/main/java/org/apache/cxf/common/security/SimpleGroup.java
index eb5e957..1d39a5e 100644
--- a/core/src/main/java/org/apache/cxf/common/security/SimpleGroup.java
+++ b/core/src/main/java/org/apache/cxf/common/security/SimpleGroup.java
@@ -31,6 +31,7 @@ import java.util.Set;
  */
 public class SimpleGroup extends SimplePrincipal implements Group {
     
+    private static final long serialVersionUID = 1L;
     private Set<Principal> members = new HashSet<Principal>();
     
     public SimpleGroup(String groupName) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/e4399939/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/security/KerberosAuthenticationFilter.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/security/KerberosAuthenticationFilter.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/security/KerberosAuthenticationFilter.java
index c23739b..b5994d6 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/security/KerberosAuthenticationFilter.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/security/KerberosAuthenticationFilter.java
@@ -218,6 +218,7 @@ public class KerberosAuthenticationFilter implements ContainerRequestFilter {
     }
     
     public static class KerberosPrincipal extends SimplePrincipal {
+        private static final long serialVersionUID = 1L;
         private String complexName;
         public KerberosPrincipal(String simpleName, String complexName) {
             super(simpleName);

http://git-wip-us.apache.org/repos/asf/cxf/blob/e4399939/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwtAuthenticationFilter.java
----------------------------------------------------------------------
diff --git a/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwtAuthenticationFilter.java b/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwtAuthenticationFilter.java
index 0c32f55..7146679 100644
--- a/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwtAuthenticationFilter.java
+++ b/rt/rs/security/jose/src/main/java/org/apache/cxf/rs/security/jose/jaxrs/JwtAuthenticationFilter.java
@@ -61,6 +61,7 @@ public class JwtAuthenticationFilter extends AbstractJoseJwtConsumer implements
         this.jweOnly = jweOnly;
     }
     public static class JwtPrincipal extends SimplePrincipal {
+        private static final long serialVersionUID = 1L;
         private JwtToken jwt;
         public JwtPrincipal(JwtToken jwt) {
             super(jwt.getClaims().getSubject());

http://git-wip-us.apache.org/repos/asf/cxf/blob/e4399939/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/authorization/SubjectPrincipal.java
----------------------------------------------------------------------
diff --git a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/authorization/SubjectPrincipal.java b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/authorization/SubjectPrincipal.java
index 8ed3a90..cbeecf5 100644
--- a/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/authorization/SubjectPrincipal.java
+++ b/rt/rs/security/xml/src/main/java/org/apache/cxf/rs/security/saml/authorization/SubjectPrincipal.java
@@ -22,6 +22,8 @@ import org.apache.cxf.common.security.SimplePrincipal;
 import org.apache.cxf.rs.security.saml.assertion.Subject;
 
 public class SubjectPrincipal extends SimplePrincipal {
+    private static final long serialVersionUID = 1L;
+    
     private Subject subject;
     public SubjectPrincipal(String principalName, Subject subject) {
         super(principalName);


[2/9] cxf git commit: Fix checkstyle

Posted by dk...@apache.org.
Fix checkstyle


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/19e3be79
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/19e3be79
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/19e3be79

Branch: refs/heads/3.0.x-fixes
Commit: 19e3be79a2c508666985014dcecb8dfa64c10e9b
Parents: 34359c9
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 1 10:08:57 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:26 2015 -0400

----------------------------------------------------------------------
 .../src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java      | 2 --
 1 file changed, 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/19e3be79/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
----------------------------------------------------------------------
diff --git a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
index f1816d6..b5bf725 100644
--- a/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
+++ b/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/ext/xml/XMLSource.java
@@ -47,8 +47,6 @@ import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
-import org.xml.sax.InputSource;
-
 import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.jaxrs.provider.JAXBElementProvider;


[7/9] cxf git commit: [CXF-6481] Update to use latest snapshot version of bug986 xjc plugins Set the eventHandler for the unmarshallers to null so we get a proper error if something isn't working as expected

Posted by dk...@apache.org.
[CXF-6481] Update to use latest snapshot version of bug986 xjc plugins
Set the eventHandler for the unmarshallers to null so we get a proper error if something isn't working as expected

# Conflicts:
#	pom.xml


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/e6a3d860
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/e6a3d860
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/e6a3d860

Branch: refs/heads/3.0.x-fixes
Commit: e6a3d860f7b80c9a0b3563eb29509693bd817f85
Parents: 70591bf
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 8 15:59:33 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:27 2015 -0400

----------------------------------------------------------------------
 .../org/apache/cxf/common/jaxb/JAXBUtils.java   | 17 ++++++++++++-
 .../AbstractBPBeanDefinitionParser.java         |  1 +
 .../jsse/TLSClientParametersConfig.java         |  8 +++---
 .../spring/AbstractBeanDefinitionParser.java    |  1 +
 .../configuration/spring/JAXBBeanFactory.java   | 26 +++++++++-----------
 .../cxf/ws/addressing/VersionTransformer.java   |  1 +
 pom.xml                                         |  2 +-
 rt/transports/http-jetty/pom.xml                |  6 +++++
 .../JettyHTTPServerEngineFactoryHolder.java     |  8 +++---
 .../apache/cxf/ws/addressing/soap/MAPCodec.java |  1 +
 .../builder/jaxb/JaxbAssertionBuilder.java      |  4 ++-
 11 files changed, 48 insertions(+), 27 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
index fe3d2ed..f4e4b54 100644
--- a/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
+++ b/core/src/main/java/org/apache/cxf/common/jaxb/JAXBUtils.java
@@ -183,6 +183,7 @@ public final class JAXBUtils {
     public static Object unmarshall(JAXBContext c, Element e) throws JAXBException {
         Unmarshaller u = c.createUnmarshaller();
         try {
+            u.setEventHandler(null);
             return u.unmarshal(e);
         } finally {
             closeUnmarshaller(u);
@@ -191,6 +192,7 @@ public final class JAXBUtils {
     public static <T> JAXBElement<T> unmarshall(JAXBContext c, Element e, Class<T> cls) throws JAXBException {
         Unmarshaller u = c.createUnmarshaller();
         try {
+            u.setEventHandler(null);
             return u.unmarshal(e, cls);
         } finally {
             closeUnmarshaller(u);
@@ -199,20 +201,33 @@ public final class JAXBUtils {
     public static Object unmarshall(JAXBContext c, Source s) throws JAXBException {
         Unmarshaller u = c.createUnmarshaller();
         try {
+            u.setEventHandler(null);
             return u.unmarshal(s);
         } finally {
             closeUnmarshaller(u);
         }
     }
-    public static <T> JAXBElement<T> unmarshall(JAXBContext c, XMLStreamReader reader,
+    public static <T> JAXBElement<T> unmarshall(JAXBContext c,
+                                                XMLStreamReader reader,
                                                 Class<T> cls) throws JAXBException {
         Unmarshaller u = c.createUnmarshaller();
         try {
+            u.setEventHandler(null);
             return u.unmarshal(reader, cls);
         } finally {
             closeUnmarshaller(u);
         }
     }
+    public static Object unmarshall(JAXBContext c,
+                                    XMLStreamReader reader) throws JAXBException {
+        Unmarshaller u = c.createUnmarshaller();
+        try {
+            u.setEventHandler(null);
+            return u.unmarshal(reader);
+        } finally {
+            closeUnmarshaller(u);
+        }
+    }
     
     public static String builtInTypeToJavaType(String type) {
         return BUILTIN_DATATYPES_MAP.get(type);

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java b/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
index c211c8c..1e34cf0 100644
--- a/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
+++ b/core/src/main/java/org/apache/cxf/configuration/blueprint/AbstractBPBeanDefinitionParser.java
@@ -378,6 +378,7 @@ public abstract class AbstractBPBeanDefinitionParser {
 
             } catch (Exception ex) {                
                 u = getContext(c).createUnmarshaller();
+                u.setEventHandler(null);
                 Object obj;
                 if (c != null) {
                     obj = u.unmarshal(data, c);

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java b/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
index 7df3e05..e67571b 100644
--- a/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
+++ b/core/src/main/java/org/apache/cxf/configuration/jsse/TLSClientParametersConfig.java
@@ -29,7 +29,6 @@ import javax.net.ssl.TrustManager;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -141,10 +140,10 @@ public final class TLSClientParametersConfig {
         
         StringReader reader = new StringReader(s);
         XMLStreamReader data = StaxUtils.createXMLStreamReader(reader);
-        Unmarshaller u = null;
         try {
-            u = getContext().createUnmarshaller();
-            JAXBElement<TLSClientParametersType> type = u.unmarshal(data, TLSClientParametersType.class);
+            JAXBElement<TLSClientParametersType> type = JAXBUtils.unmarshall(getContext(), 
+                                                                             data,
+                                                                             TLSClientParametersType.class);
             TLSClientParametersType cpt = type.getValue();
             return createTLSClientParametersFromType(cpt);
         } catch (RuntimeException e) {
@@ -157,7 +156,6 @@ public final class TLSClientParametersConfig {
             } catch (XMLStreamException ex) {
                 throw new RuntimeException(ex);
             }
-            JAXBUtils.closeUnmarshaller(u);
         }
     }
     

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java b/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
index d28cbfb..3ad3e23 100644
--- a/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
+++ b/core/src/main/java/org/apache/cxf/configuration/spring/AbstractBeanDefinitionParser.java
@@ -352,6 +352,7 @@ public abstract class AbstractBeanDefinitionParser
                 bean.addPropertyValue(propertyName, jaxbbean.getBeanDefinition());
             } catch (Exception ex) {
                 u = getContext(c).createUnmarshaller();
+                u.setEventHandler(null);
                 Object obj;
                 if (c != null) {
                     obj = u.unmarshal(data, c);

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java b/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
index 9e4efc9..9c606df 100644
--- a/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
+++ b/core/src/main/java/org/apache/cxf/configuration/spring/JAXBBeanFactory.java
@@ -24,7 +24,6 @@ import java.io.StringReader;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -39,25 +38,25 @@ public final class JAXBBeanFactory {
         //nothing
     }
     
-    public static Object createJAXBBean(JAXBContext context, 
+    public static <T> T createJAXBBean(JAXBContext context, 
                                         String s,
-                                        Class<?> c) {
+                                        Class<T> c) {
         
         StringReader reader = new StringReader(s);
         XMLStreamReader data = StaxUtils.createXMLStreamReader(reader);
-        Unmarshaller u = null;
         try {
-            Object obj;
-            u = context.createUnmarshaller();
+            
+            T obj = null;
             if (c != null) {
-                obj = u.unmarshal(data, c);
+                obj = JAXBUtils.unmarshall(context, data, c).getValue();
             } else {
-                obj = u.unmarshal(data);
-            }
-            if (obj instanceof JAXBElement<?>) {
-                JAXBElement<?> el = (JAXBElement<?>)obj;
-                obj = el.getValue();
-
+                Object o = JAXBUtils.unmarshall(context, data);
+                if (o instanceof JAXBElement<?>) {
+                    JAXBElement<?> el = (JAXBElement<?>)o;
+                    @SuppressWarnings("unchecked")
+                    T ot = (T)el.getValue();
+                    obj = ot;
+                }                
             }
             return obj;
         } catch (JAXBException e) {
@@ -68,7 +67,6 @@ public final class JAXBBeanFactory {
             } catch (XMLStreamException ex) {
                 throw new RuntimeException(ex);
             }
-            JAXBUtils.closeUnmarshaller(u);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java b/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
index dec36de..d113d3b 100644
--- a/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
+++ b/core/src/main/java/org/apache/cxf/ws/addressing/VersionTransformer.java
@@ -441,6 +441,7 @@ public class VersionTransformer {
         }
         JAXBContext ctx = getExposedJAXBContext(tns);
         Unmarshaller um = ctx.createUnmarshaller();
+        um.setEventHandler(null);
         try {
             JAXBElement<?> o = um.unmarshal(ref, getExposedReferenceType(tns));
             if (o != null) {

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/pom.xml
----------------------------------------------------------------------
diff --git a/pom.xml b/pom.xml
index 1b95e09..5fdcfe8 100644
--- a/pom.xml
+++ b/pom.xml
@@ -43,7 +43,7 @@
     <properties>
         <cxf.compiler.fork>false</cxf.compiler.fork>
         <cxf.build-utils.version>3.0.0</cxf.build-utils.version>
-        <cxf.xjc-utils.version>3.0.3</cxf.xjc-utils.version>
+        <cxf.xjc-utils.version>3.0.4-SNAPSHOT</cxf.xjc-utils.version>
         <cxf.jdk.version>1.6</cxf.jdk.version>
         <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
         <site.deploy.url>scp://people.apache.org/www/cxf.apache.org/maven-site</site.deploy.url>

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/rt/transports/http-jetty/pom.xml
----------------------------------------------------------------------
diff --git a/rt/transports/http-jetty/pom.xml b/rt/transports/http-jetty/pom.xml
index 27e2dcc..fc441fa 100644
--- a/rt/transports/http-jetty/pom.xml
+++ b/rt/transports/http-jetty/pom.xml
@@ -162,9 +162,15 @@
                         <id>generate-sources</id>
                         <phase>generate-sources</phase>
                         <configuration>
+                            <extensions>
+                                <extension>org.apache.cxf.xjcplugins:cxf-xjc-bug986:${cxf.xjc-utils.version}</extension>
+                            </extensions>
                             <sourceRoot>${basedir}/target/generated/src/main/java</sourceRoot>
                             <xsdOptions>
                                 <xsdOption>
+                                    <extensionArgs>
+                                        <arg>-Xbug986</arg>
+                                    </extensionArgs>
                                     <xsd>${basedir}/src/main/resources/schemas/configuration/http-jetty.xsd</xsd>
                                     <catalog>${basedir}/src/main/build-resources/catalog.cat</catalog>
                                     <deleteDirs>

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
----------------------------------------------------------------------
diff --git a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
index d54cc2f..fdf40d3 100644
--- a/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
+++ b/rt/transports/http-jetty/src/main/java/org/apache/cxf/transport/http_jetty/blueprint/JettyHTTPServerEngineFactoryHolder.java
@@ -30,11 +30,11 @@ import java.util.logging.Logger;
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
-import javax.xml.bind.Unmarshaller;
 
 import org.w3c.dom.Element;
 
 import org.apache.cxf.common.jaxb.JAXBContextCache;
+import org.apache.cxf.common.jaxb.JAXBUtils;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.PackageUtils;
 import org.apache.cxf.common.util.StringUtils;
@@ -210,12 +210,10 @@ public class JettyHTTPServerEngineFactoryHolder {
         this.handlersMap = handlersMap;
     }
 
-    protected Object getJaxbObject(Element parent, Class<?> c) {
+    protected <T> T getJaxbObject(Element parent, Class<T> c) {
 
         try {
-            Unmarshaller umr = getContext(c).createUnmarshaller();
-            JAXBElement<?> ele = (JAXBElement<?>) umr.unmarshal(parent);
-
+            JAXBElement<T> ele = JAXBUtils.unmarshall(getContext(c), parent, c);
             return ele.getValue();
         } catch (JAXBException e) {
             LOG.warning("Unable to parse property due to " + e);

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
----------------------------------------------------------------------
diff --git a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
index 75e20d4..a324593 100644
--- a/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
+++ b/rt/ws/addr/src/main/java/org/apache/cxf/ws/addressing/soap/MAPCodec.java
@@ -493,6 +493,7 @@ public class MAPCodec extends AbstractSoapInterceptor {
                                     VersionTransformer.getExposedJAXBContext(headerURI);
                                 unmarshaller = 
                                     jaxbContext.createUnmarshaller();
+                                unmarshaller.setEventHandler(null);
                             }
                             if (maps == null) {
                                 maps = new AddressingProperties();

http://git-wip-us.apache.org/repos/asf/cxf/blob/e6a3d860/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
----------------------------------------------------------------------
diff --git a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
index 17966b4..c00c8b2 100644
--- a/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
+++ b/rt/ws/policy/src/main/java/org/apache/cxf/ws/policy/builder/jaxb/JaxbAssertionBuilder.java
@@ -99,7 +99,9 @@ public class JaxbAssertionBuilder<T> implements AssertionBuilder<Element> {
     
     protected Unmarshaller getUnmarshaller() {
         try {
-            return getContext().createUnmarshaller();
+            Unmarshaller um = getContext().createUnmarshaller();
+            um.setEventHandler(null);
+            return um;
         } catch (JAXBException e) {
             throw new RuntimeException(e);
         }


[9/9] cxf git commit: Fix X509TokenValidator with latest changes in wss4j

Posted by dk...@apache.org.
Fix X509TokenValidator with latest changes in wss4j


Project: http://git-wip-us.apache.org/repos/asf/cxf/repo
Commit: http://git-wip-us.apache.org/repos/asf/cxf/commit/2d641410
Tree: http://git-wip-us.apache.org/repos/asf/cxf/tree/2d641410
Diff: http://git-wip-us.apache.org/repos/asf/cxf/diff/2d641410

Branch: refs/heads/3.0.x-fixes
Commit: 2d6414108cac3ec6208e9f961d24d0d1d49289c7
Parents: b6907af
Author: Daniel Kulp <dk...@apache.org>
Authored: Wed Jul 8 16:39:07 2015 -0400
Committer: Daniel Kulp <dk...@apache.org>
Committed: Thu Jul 9 12:20:27 2015 -0400

----------------------------------------------------------------------
 .../org/apache/cxf/sts/token/validator/X509TokenValidator.java | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cxf/blob/2d641410/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/validator/X509TokenValidator.java
----------------------------------------------------------------------
diff --git a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/validator/X509TokenValidator.java b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/validator/X509TokenValidator.java
index 4c68c44..1cf2ee7 100644
--- a/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/validator/X509TokenValidator.java
+++ b/services/sts/sts-core/src/main/java/org/apache/cxf/sts/token/validator/X509TokenValidator.java
@@ -28,7 +28,9 @@ import javax.security.auth.callback.CallbackHandler;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.Node;
 import org.w3c.dom.Text;
+
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.helpers.DOMUtils;
 import org.apache.cxf.sts.STSPropertiesMBean;
@@ -146,7 +148,9 @@ public class X509TokenValidator implements TokenValidator {
             binarySecurity.setEncodingType(encodingType);
             binarySecurity.setValueType(binarySecurityType.getValueType());
             String data = binarySecurityType.getValue();
-            ((Text)binarySecurity.getElement().getFirstChild()).setData(data);
+            
+            Node textNode = doc.createTextNode(data);
+            binarySecurity.getElement().appendChild(textNode);
         } else if (validateTarget.isDOMElement()) {
             try {
                 Document doc = DOMUtils.createDocument();