ws-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andreas Veithen <andreas.veit...@gmail.com>
Subject Re: XMLInputFactory.properties
Date Wed, 18 Jan 2012 23:16:01 GMT
On Wed, Jan 18, 2012 at 19:29, Janardhanan, Suresh B
<Suresh.Janardhanan@duke-energy.com> wrote:
> Is there any way to find out if the XMLInputFactory.properties
> “javax.xml.stream.isCoalescing=false” is getting overridden.

No. The settings in XMLInputFactory.properties can only be overridden
by a StAXParserConfiguration object, but this doesn't generate any
debug logs. Axis2 uses StAXParserConfiguration.SOAP, but that
configuration doesn't change the javax.xml.stream.isCoalescing
property.

> From
> StAXUtils.java -> newXMLInputFactory() method, there is no debug line, which
> shows what property is getting set. I was able to print the key, value pair
> using the following code.

If you enable debug logging on StAXUtils, it will actually output that
information in the loadFactoryProperties method, but this occurs only
once because the factory is cached.

> ClassLoader is able to find the
> XMLInputFactory.properties file but I can still see that CDATA string is not
> preserved in the logs.

Short answer: that is because there are no CDATA sections to preserve...

Long answer: With Woodstox (other parsers require additional
settings), javax.xml.stream.isCoalescing=false can be used to make
sure that CDATA sections are reported with a distinct event type (and
not as CHARACTERS events), so that the syntactic information about
CDATA sections is not lost in the object model built by Axiom (which
is generally not a problem because a CDATA section is a purely
syntactic construct, but is not supposed to carry any semantic
meaning).

The logs you have shown actually indicate that the message that is
being parsed doesn't contain any CDATA section:

2012-01-18 11:10:34,587 [main] DEBUG httpclient.wire.content  - << "<?xm"
2012-01-18 11:10:34,588 [main] DEBUG httpclient.wire.content  - << "l
version="1.0" encoding="utf-8"?><soap:Envelope
xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
xmlns:rpc="http://www.w3.org/2003/05/soap-rpc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><RetrieveByParameterResponse
xmlns="http://wsdl.echelon.com/Panoramix/"><RetrieveByParameterResult
xmlns="">&lt;RETURNS&gt;&lt;STATUS&gt;8a27cb8afd464686a3893f4f8db26540&lt;/STATUS&gt;&lt;APIPAYLOAD
/&gt;&lt;/RETURNS&gt;</RetrieveByParameterResult></RetrieveByParameterResponse></soap:Body></soap:Envelope>"

Note that even your output message doesn't contain any CDATA section:

2012-01-18 11:10:34,560 [main] DEBUG httpclient.wire.content  - >>
"<?xml version='1.0' encoding='UTF-8'?><soapenv:Envelope
xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns1:RetrieveByParameter
xmlns:ns1="http://wsdl.echelon.com/Panoramix/"><sKey>d0fa5e6038dc4a3091a590834cd5cc11</sKey><sIDTypeID>f76e5d708edd464593bb031f646990b6</sIDTypeID><sID>100063728</sID><sXmlParameters>&lt;![CDATA[&lt;PARAMETERS>&lt;RETURN>&lt;GENERALINFORMATION>&lt;INFORMATIONRETURNTYPEID>3294f665bc644359bfd15824d2efe29c&lt;/INFORMATIONRETURNTYPEID>&lt;/GENERALINFORMATION>&lt;/RETURN>&lt;/PARAMETERS>]]&gt;</sXmlParameters></ns1:RetrieveByParameter></soapenv:Body></soapenv:Envelope>"

"&lt;!CDATA[" is not a CDATA section, but character data that
represents "<![CDATA[" (in the same way as "List&lt;String>" is
character data that represents "List<String>" and not a text node
followed by a "String" element).

>
>
> Please help.
>
>
>
> private void classLoaderTest() {
>
>             ClassLoader loader =
> Thread.currentThread().getContextClassLoader();
>
>             URL[] urls = ((URLClassLoader) loader).getURLs();
>
>
>
>             for (int i = 0; i < urls.length; i++) {
>
>                   System.out.println(urls[i].getFile());
>
>             }
>
>             InputStream in = loader
>
>                         .getResourceAsStream("XMLInputFactory.properties");
>
>             if (in == null) {
>
>                   System.out.println ("InputStream instance is null");
>
>             } else {
>
>                   try {
>
>                         Properties rawProps = new Properties();
>
>                         rawProps.load(in);
>
>                         for (Iterator it = rawProps.entrySet().iterator();
> it.hasNext();) {
>
>                               Map.Entry entry = (Map.Entry)
it.next();
>
>                               String strKey = (String) entry.getKey();
>
>                               System.out.println("Key =
" + strKey);
>
>                               String strValue = (String)
entry.getValue();
>
>                               System.out.println("Value
= " + strValue);
>
>                         }
>
>                   } catch (IOException ex) {
>
>                         System.out.println("Failed to read
> XMLInputFactory.properties"
>
>                                     + ex.getMessage());
>
>                   } finally {
>
>                         try {
>
>                               in.close();
>
>                         } catch (IOException ex) {
>
>                               // Ignore
>
>                         }
>
>                   }
>
>             }
>
>
>
>       }
>
>
>
> Logs from Axis2
>
>
>
> 2012-01-18 11:10:34,558 [main] DEBUG
> org.apache.axiom.om.impl.MTOMXMLStreamWriter  - Creating MTOMXMLStreamWriter
>
> 2012-01-18 11:10:34,558 [main] DEBUG
> org.apache.axiom.om.impl.MTOMXMLStreamWriter  - OutputStream =class
> org.apache.commons.httpclient.ChunkedOutputStream
>
> 2012-01-18 11:10:34,558 [main] DEBUG
> org.apache.axiom.om.impl.MTOMXMLStreamWriter  - OMFormat = OMOutputFormat [
> mimeBoundary =null rootContentId=null doOptimize=false doingSWA=false
> isSOAP11=false charSetEnc
>
> oding=UTF-8 xmlVersion=null contentType=application/soap+xml
> ignoreXmlDeclaration=false autoCloseWriter=false actionProperty=null
> optimizedThreshold=0]
>
> 2012-01-18 11:10:34,558 [main] DEBUG org.apache.axiom.om.util.StAXUtils  -
> XMLStreamWriter is
> org.apache.axiom.util.stax.dialect.WoodstoxStreamWriterWrapper
>
> 2012-01-18 11:10:34,559 [main] DEBUG
> org.apache.axiom.om.impl.MTOMXMLStreamWriter  - Calling
> MTOMXMLStreamWriter.flush
>
> 2012-01-18 11:10:34,559 [main] DEBUG
> org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl  - Could not close builder
> or parser due to:
>
> 2012-01-18 11:10:34,559 [main] DEBUG
> org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl  - builder is null
>
> 2012-01-18 11:10:34,559 [main] DEBUG
> org.apache.axiom.om.impl.MTOMXMLStreamWriter  - Calling
> MTOMXMLStreamWriter.flush
>
> 2012-01-18 11:10:34,559 [main] DEBUG
> org.apache.axiom.om.impl.MTOMXMLStreamWriter  - close
>
> 2012-01-18 11:10:34,559 [main] DEBUG
> org.apache.axis2.transport.http.SOAPMessageFormatter  - end writeTo()
>
> 2012-01-18 11:10:34,559 [main] DEBUG httpclient.wire.content  - >>
> "278[\r][\n]"
>
> 2012-01-18 11:10:34,560 [main] DEBUG httpclient.wire.content  - >> "<?xml
> version='1.0' encoding='UTF-8'?><soapenv:Envelope
> xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"><soapenv:Body><ns1:RetrieveB
>
> yParameter
> xmlns:ns1="http://wsdl.echelon.com/Panoramix/"><sKey>d0fa5e6038dc4a3091a590834cd5cc11</sKey><sIDTypeID>f76e5d708edd464593bb031f646990b6</sIDTypeID><sID>100063728</sID><sXmlParameters>&
>
> lt;![CDATA[&lt;PARAMETERS>&lt;RETURN>&lt;GENERALINFORMATION>&lt;INFORMATIONRETURNTYPEID>3294f665bc644359bfd15824d2efe29c&lt;/INFORMATIONRETURNTYPEID>&lt;/GENERALINFORMATION>&lt;/RETURN>&lt;/PARAMETERS>]]&gt;<
>
> /sXmlParameters></ns1:RetrieveByParameter></soapenv:Body></soapenv:Envelope>"
>
> 2012-01-18 11:10:34,560 [main] DEBUG httpclient.wire.content  - >>
> "[\r][\n]"
>
> 2012-01-18 11:10:34,560 [main] DEBUG httpclient.wire.content  - >> "0"
>
> 2012-01-18 11:10:34,560 [main] DEBUG httpclient.wire.content  - >>
> "[\r][\n]"
>
> 2012-01-18 11:10:34,560 [main] DEBUG httpclient.wire.content  - >>
> "[\r][\n]"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.engine.Phase  -
> [MessageContext: logID=30595be678156757ef11ed8648bbd9f877263817d9e8e0fd]
> Invoking flowComplete() in Phase "Security"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.engine.Phase  -
> [MessageContext: logID=30595be678156757ef11ed8648bbd9f877263817d9e8e0fd]
> Invoking flowComplete() in Phase "MessageOut"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.engine.Phase  -
> [MessageContext: logID=30595be678156757ef11ed8648bbd9f877263817d9e8e0fd]
> Invoking flowComplete() in Phase "PolicyDetermination"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.engine.Phase  -
> [MessageContext: logID=30595be678156757ef11ed8648bbd9f877263817d9e8e0fd]
> Invoking flowComplete() in Phase "OperationOutPhase"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.engine.Phase  -
> [MessageContext: logID=30595be678156757ef11ed8648bbd9f877263817d9e8e0fd]
> Invoking flowComplete() in Phase "OpPhase"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.engine.Phase  -
> [MessageContext: logID=30595be678156757ef11ed8648bbd9f877263817d9e8e0fd]
> Invoking flowComplete() in Phase "RMPhase"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.client.Options  -
> getAction (http://wsdl.echelon.com/Panoramix/RetrieveByParameter) from
> org.apache.axis2.client.Options@1af61af6
>
> 2012-01-18 11:10:34,587 [main] DEBUG
> org.apache.axis2.context.MessageContext  - Old SoapAction is
> (http://wsdl.echelon.com/Panoramix/RetrieveByParameter)
>
> 2012-01-18 11:10:34,587 [main] DEBUG
> org.apache.axis2.context.MessageContext  - New SoapAction is (null)
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.client.Options  -
> setAction Old action is (null)
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.client.Options  -
> setAction New action is (null)
>
> 2012-01-18 11:10:34,587 [main] DEBUG
> org.apache.axis2.transport.TransportUtils  - createSOAPEnvelope using
> Builder (class org.apache.axis2.builder.SOAPBuilder) selected from type
> (application/soap+xml)
>
> 2012-01-18 11:10:34,587 [main] DEBUG httpclient.wire.content  - << "<?xm"
>
> 2012-01-18 11:10:34,587 [main] DEBUG org.apache.axis2.builder.BuilderUtil  -
> char set encoding set from default =utf-8
>
> 2012-01-18 11:10:34,588 [main] DEBUG httpclient.wire.content  - << "l
> version="1.0" encoding="utf-8"?><soap:Envelope
> xmlns:soap="http://www.w3.org/2003/05/soap-envelope"
> xmlns:rpc="http://www.w3.org/2003/05/s
>
> oap-rpc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><RetrieveByParameterResponse
> xmlns="http://wsdl.echelon.com/Panoramix/"><RetrieveByParame
>
> terResult
> xmlns="">&lt;RETURNS&gt;&lt;STATUS&gt;8a27cb8afd464686a3893f4f8db26540&lt;/STATUS&gt;&lt;APIPAYLOAD
> /&gt;&lt;/RETURNS&gt;</RetrieveByParameterResult></RetrieveByParameterResponse></soap:Body></soap:
>
> Envelope>"
>
> 2012-01-18 11:10:34,588 [main] DEBUG org.apache.axiom.om.util.StAXUtils  -
> XMLStreamReader is
> org.apache.axiom.util.stax.dialect.WoodstoxStreamReaderWrapper
>
>
>
> StAXUtils.java
>
>
>
>     private static XMLInputFactory newXMLInputFactory(final ClassLoader
> classLoader,
>
>             final StAXParserConfiguration configuration) {
>
>
>
>         return (XMLInputFactory)AccessController.doPrivileged(new
> PrivilegedAction() {
>
>             public Object run() {
>
>                 ClassLoader savedClassLoader;
>
>                 if (classLoader == null) {
>
>                     savedClassLoader = null;
>
>                 } else {
>
>                     savedClassLoader =
> Thread.currentThread().getContextClassLoader();
>
>
>      Thread.currentThread().setContextClassLoader(classLoader);
>
>                 }
>
>                 try {
>
>                     XMLInputFactory factory = XMLInputFactory.newInstance();
>
>                     // Woodstox by default creates coalescing parsers.
Even
> if this violates
>
>                     // the StAX specs, for compatibility with Woodstox,
we
> always enable the
>
>                     // coalescing mode. Note that we need to do that
before
> loading
>
>                     // XMLInputFactory.properties so that this setting
can
> be overridden.
>
>                     factory.setProperty(XMLInputFactory.IS_COALESCING,
> Boolean.TRUE);
>
>                     Map props =
> loadFactoryProperties("XMLInputFactory.properties");
>
>                     if (props != null) {
>
>                         for (Iterator it = props.entrySet().iterator();
> it.hasNext(); ) {
>
>                             Map.Entry entry = (Map.Entry)it.next();
>
>                             factory.setProperty((String)entry.getKey(),
> entry.getValue());
>
>                         }
>
>                     }
>
>                     StAXDialect dialect =
> StAXDialectDetector.getDialect(factory.getClass());
>
>                     if (configuration != null) {
>
>                         factory = configuration.configure(factory,
dialect);
>
>                     }
>
>                     return new ImmutableXMLInputFactory(dialect.normalize(
>
>                             dialect.makeThreadSafe(factory)));
>
>                 } finally {
>
>                     if (savedClassLoader != null) {
>
>
> Thread.currentThread().setContextClassLoader(savedClassLoader);
>
>                     }
>
>                 }
>
>             }
>
>         });
>
>

Mime
View raw message