Good suggestion.   
I will updated the code with these log information.

--  
Willem Jiang

Red Hat, Inc.
Web: http://www.redhat.com
Blog: http://willemjiang.blogspot.com (http://willemjiang.blogspot.com/) 
(English)
          http://jnn.iteye.com (http://jnn.javaeye.com/) (Chinese)
Twitter: willemjiang  
Weibo: 姜宁willem





On Wednesday, November 6, 2013 at 5:44 PM, Claus Ibsen wrote:

> Hi
>  
> It would be nice if we could log one time at INFO level all the xml
> features that was configured, so end users can see that.
> You could put all those into a List and then log that once. So the
> logging don't get too verbose.
>  
>  
>  
> On Tue, Nov 5, 2013 at 9:50 AM, <ningji...@apache.org 
> (mailto:ningji...@apache.org)> wrote:
> > Updated Branches:
> > refs/heads/master 5761250c7 -> 2183730cf
> >  
> >  
> > CAMEL-6933 Support Xerces global features configuration
> >  
> >  
> > Project: http://git-wip-us.apache.org/repos/asf/camel/repo
> > Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/3f10f610
> > Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/3f10f610
> > Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/3f10f610
> >  
> > Branch: refs/heads/master
> > Commit: 3f10f610cd4421e403bdd00ffca1245688e7ce5c
> > Parents: 5761250
> > Author: Willem Jiang <willem.ji...@gmail.com 
> > (mailto:willem.ji...@gmail.com)>
> > Authored: Tue Nov 5 15:41:27 2013 +0800
> > Committer: Willem Jiang <willem.ji...@gmail.com 
> > (mailto:willem.ji...@gmail.com)>
> > Committed: Tue Nov 5 15:44:58 2013 +0800
> >  
> > ----------------------------------------------------------------------
> > .../camel/converter/jaxp/XmlConverter.java | 26 +++++++++
> > .../camel/builder/xml/XPathFeatureTest.java | 57 ++++++++++++++++++++
> > 2 files changed, 83 insertions(+)
> > ----------------------------------------------------------------------
> >  
> >  
> > http://git-wip-us.apache.org/repos/asf/camel/blob/3f10f610/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
> > ----------------------------------------------------------------------
> > diff --git 
> > a/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
> >  
> > b/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
> > index 994a724..79e71b9 100644
> > --- 
> > a/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
> > +++ 
> > b/camel-core/src/main/java/org/apache/camel/converter/jaxp/XmlConverter.java
> > @@ -27,6 +27,7 @@ import java.io.Reader;
> > import java.io.StringReader;
> > import java.io.StringWriter;
> > import java.nio.ByteBuffer;
> > +import java.util.Map;
> > import java.util.Properties;
> >  
> > import javax.xml.parsers.DocumentBuilder;
> > @@ -60,9 +61,13 @@ import org.apache.camel.BytesSource;
> > import org.apache.camel.Converter;
> > import org.apache.camel.Exchange;
> > import org.apache.camel.StringSource;
> > +import org.apache.camel.builder.xml.XPathBuilder;
> > import org.apache.camel.util.IOHelper;
> > import org.apache.camel.util.ObjectHelper;
> >  
> > +import org.slf4j.Logger;
> > +import org.slf4j.LoggerFactory;
> > +
> > /**
> > * A helper class to transform to and from various JAXB types such as {@link 
> > Source} and {@link Document}
> > *
> > @@ -75,8 +80,11 @@ public class XmlConverter {
> > public static final String DEFAULT_CHARSET_PROPERTY = 
> > "org.apache.camel.default.charset";
> >  
> > public static final String OUTPUT_PROPERTIES_PREFIX = 
> > "org.apache.camel.xmlconverter.output.";
> > + public static final String DOCUMENT_BUILDER_FACTORY_FEATURE = 
> > "org.apache.camel.xmlconverter.documentBuilderFactory.feature";
> > public static String defaultCharset = 
> > ObjectHelper.getSystemProperty(Exchange.DEFAULT_CHARSET_PROPERTY, "UTF-8");
> >  
> > + private static final Logger LOG = 
> > LoggerFactory.getLogger(XPathBuilder.class);
> > +
> > private DocumentBuilderFactory documentBuilderFactory;
> > private TransformerFactory transformerFactory;
> >  
> > @@ -886,12 +894,30 @@ public class XmlConverter {
> >  
> > // Helper methods
> > //-------------------------------------------------------------------------
> > +
> > + protected void setupFeatures(DocumentBuilderFactory factory) {
> > + Properties properties = System.getProperties();
> > + for (Map.Entry<Object, Object> prop : properties.entrySet()) {
> > + String key = (String) prop.getKey();
> > + if (key.startsWith(XmlConverter.DOCUMENT_BUILDER_FACTORY_FEATURE)) {
> > + String uri = ObjectHelper.after(key, ":");
> > + Boolean value = Boolean.valueOf((String)prop.getValue());
> > + try {
> > + factory.setFeature(uri, value);
> > + } catch (ParserConfigurationException e) {
> > + LOG.warn("DocumentBuilderFactory doesn't support the feature {0} with 
> > value {1}, due to {2}.", new Object[]{uri, value, e});
> > + }
> > + }
> > + }
> > + }
> >  
> > public DocumentBuilderFactory createDocumentBuilderFactory() {
> > DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
> > factory.setNamespaceAware(true);
> > factory.setIgnoringElementContentWhitespace(true);
> > factory.setIgnoringComments(true);
> > + // setup the feature from the system property
> > + setupFeatures(factory);
> > return factory;
> > }
> >  
> >  
> > http://git-wip-us.apache.org/repos/asf/camel/blob/3f10f610/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java
> > ----------------------------------------------------------------------
> > diff --git 
> > a/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java
> >  
> > b/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java
> > new file mode 100644
> > index 0000000..2a3f947
> > --- /dev/null
> > +++ 
> > b/camel-core/src/test/java/org/apache/camel/builder/xml/XPathFeatureTest.java
> > @@ -0,0 +1,57 @@
> > +/**
> > + * 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.camel.builder.xml;
> > +
> > +
> > +import javax.xml.parsers.SAXParserFactory;
> > +
> > +import org.apache.camel.ContextTestSupport;
> > +import org.apache.camel.Exchange;
> > +import org.apache.camel.converter.jaxp.XmlConverter;
> > +
> > +import static org.apache.camel.builder.xml.XPathBuilder.xpath;
> > +
> > +public class XPathFeatureTest extends ContextTestSupport {
> > + public static final String DOM_BUILER_FACTORY_FEATRUE = 
> > XmlConverter.DOCUMENT_BUILDER_FACTORY_FEATURE;
> > +
> > + public static final String XML_DATA = " <!DOCTYPE foo [ "
> > + + " <!ELEMENT foo ANY > <!ENTITY xxe SYSTEM \"file:///bin/test.sh 
> > (http://test.sh)\" >]> <test> &xxe; </test>";
> > +
> > +
> > + @Override
> > + public boolean isUseRouteBuilder() {
> > + return false;
> > + }
> > +
> > + public void testXPathResult() throws Exception {
> > + // Set this feature will disable the external general entities
> > + System.setProperty(DOM_BUILER_FACTORY_FEATRUE + ":"
> > + + "http://xml.org/sax/features/external-general-entities";, "false");
> > +
> > + String result = 
> > (String)xpath("/").stringResult().evaluate(createExchange(XML_DATA));
> > + assertEquals("Get a wrong result", " ", result);
> > + System.clearProperty(DOM_BUILER_FACTORY_FEATRUE + ":"
> > + + "http://xml.org/sax/features/external-general-entities";);
> > + }
> > +
> > + protected Exchange createExchange(Object xml) {
> > + Exchange exchange = createExchangeWithBody(context, xml);
> > + return exchange;
> > + }
> > +
> > +
> > +}
>  
>  
>  
>  
>  
> --  
> Claus Ibsen
> -----------------
> Red Hat, Inc.
> Email: cib...@redhat.com (mailto:cib...@redhat.com)
> Twitter: davsclaus
> Blog: http://davsclaus.com
> Author of Camel in Action: http://www.manning.com/ibsen



Reply via email to