You are viewing a plain text version of this content. The canonical link for it is here.
Posted to log4j-user@logging.apache.org by "John St. Ledger" <st...@lanl.gov> on 2010/01/06 19:00:12 UTC
possible log4j incompatibility
Hello,
I'm new to log4j, and just working my way through the examples in
Chapter 3 of the complete user manual. I may have discovered an
incompatibility between log4j and gnujaxp.
The setup:
I'm using Eclipse Galileo (Eclipse Java EE IDE for Web Developers),
for Mac OS X as my development environment. I am running Mac OS X
10.5.8. I have a project using Java 6.0 as the compiler and runtime
environment.
Additional jars that I have referenced in the project are:
junit-4.7.jar for unit testing
jdom.jar for working with Documents
jog4j-1.2.15.jar
xerces.jar (version 1.4.4)
LANLPlot.jar A library we've created using the JFreeChart
library (http://www.lanl.gov/orgs/da/d3/plot_library.shtml)
and then jars used as part of JFreeChart (http://www.jfree.org/):
gnujaxp.jar
jcommon-1.0.16.jar
jfreechart-1.0.13.jar
The problem:
When I first tried to run the example MyApp3 using the sample0.xml
configuration file, I had the following errors showing in the console:
log4j:WARN Parsing warning 2 and column 38
log4j:WARN URI was not reported to parser for entity [dtd]
log4j:WARN Parsing warning 2 and column 38
log4j:WARN missing system ID, using log4j.dtd
log4j:ERROR Could not parse file [sample0.xml].
gnu.xml.dom.DomEx: The operation violates XML Namespaces.
More Information: xmlns is reserved
Node Name: #document
at gnu.xml.dom.DomDocument.createAttributeNS(DomDocument.java:589)
at gnu.xml.dom.DomDocument.createAttribute(DomDocument.java:561)
at gnu.xml.dom.DomDocument.defaultAttributes(DomDocument.java:456)
at gnu.xml.dom.DomDocument.createElementNS(DomDocument.java:440)
at gnu.xml.pipeline.DomConsumer$Handler.startElement(DomConsumer.java:
602)
at gnu.xml.dom.Consumer$Backdoor.startElement(Consumer.java:203)
at gnu.xml.pipeline.EventFilter.startElement(EventFilter.java:570)
at
gnu
.xml.pipeline.ValidationConsumer.startElement(ValidationConsumer.java:
1177)
at gnu.xml.aelfred2.SAXDriver.startElement(SAXDriver.java:836)
at gnu.xml.aelfred2.XmlParser.parseElement(XmlParser.java:1037)
at gnu.xml.aelfred2.XmlParser.parseDocument(XmlParser.java:416)
at gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:167)
at gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)
at gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294)
at gnu.xml.dom.JAXPFactory$JAXPBuilder.parse(JAXPFactory.java:186)
at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
at org.apache.log4j.xml.DOMConfigurator$1.parse(DOMConfigurator.java:
676)
at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:
789)
at
org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:
682)
at
org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:811)
at gov.lanl.examples.log4j.chapter3.MyApp3.main(MyApp3.java:34)
log4j:WARN No appenders could be found for logger
(gov.lanl.examples.log4j.chapter3.MyApp3).
log4j:WARN Please initialize the log4j system properly.
When I get these error messages, the referenced jars on the build path
are showing in Eclipse in the following order:
junit-4.7.jar
jdom.jar
jog4j-1.2.15.jar
gnujaxp.jar
jcommon-1.0.16.jar
jfreechart-1.0.13.jar
LANLPlot.jar
xerces.jar
The Solution:
I removed the JFreeChart Libraries from the build path, and then added
them back in. Now the libraries are in the following order:
junit-4.7.jar
jdom.jar
jog4j-1.2.15.jar
xerces.jar
gnujaxp.jar
jcommon-1.0.16.jar
jfreechart-1.0.13.jar
LANLPlot.jar
Now when I run the same example I get the following in the console:
0 [main] INFO gov.lanl.examples.log4j.chapter3.MyApp3 - Entering
application.
2 [main] DEBUG gov.lanl.examples.log4j.chapter3.Foo - Did it again!
2 [main] INFO gov.lanl.examples.log4j.chapter3.MyApp3 - Exiting
application.
I don't know why the gnu library is substituting for the xerces
library, but I thought you might find this interesting.
John St. Ledger
Re: possible log4j incompatibility
Posted by "John St. Ledger" <st...@lanl.gov>.
Curt,
Thank you. I passed the filename as the argument--"sample0.xml". I'll
start using URIs.
The problem is caused by the system property. Both the gnujaxp and
xerces jar files declare services for
javax.xml.parsers.DocumentBuilderFactory, and
javax.xml.parsers.SAXParserFactory. I guess which ever service is read
first is the one used by the application. I need to learn more about
services and system properties.
Thanx again,
John
On Jan 6, 2010, at 7:52 PM, Curt Arnold wrote:
> You did not specify what argument you passed to the command line for
> "MyApp3". Neither the book or the docs make a big deal that the
> argument to XMLConfigurator.configure(String) is expected to be a
> URI and not a file spec. If you passed a relative URI, I could see
> a parser complaining about not being able to resolve the relative
> URI for the DTD even though log4j is going to ignore that URI and
> load its own copy. There is a possibility that if you passed "file:///Users/yourusername/sample3.xml
> , you might avoid at least some of the complaints. Removing the
> DOCTYPE declaration may also remove a few spurious issues.
>
> I haven't tracked gnujaxp for a very long time (in a previous
> lifetime I spent a lot of time in XML standards work), but I'm
> pretty confident that the problem is somewhere other than log4j. If
> it is a standards conformance issue within gnujaxp, there is not
> much that log4j can do to work around the issue.
>
> http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance()
> describes how JAXP finds the default implementation. You can
> specify a system property to choose a particular implementation.
> However if gnujaxp is being chosen preferentially to the JRE's
> parser, some other code may explicitly configuring for use of gnujaxp.
>
>
>
> On Jan 6, 2010, at 12:00 PM, John St. Ledger wrote:
>
>> Hello,
>>
>> I'm new to log4j, and just working my way through the examples in
>> Chapter 3 of the complete user manual. I may have discovered an
>> incompatibility between log4j and gnujaxp.
>>
>> The setup:
>>
>> I'm using Eclipse Galileo (Eclipse Java EE IDE for Web Developers),
>> for Mac OS X as my development environment. I am running Mac OS X
>> 10.5.8. I have a project using Java 6.0 as the compiler and runtime
>> environment.
>>
>> Additional jars that I have referenced in the project are:
>>
>> junit-4.7.jar for unit testing
>> jdom.jar for working with Documents
>> jog4j-1.2.15.jar
>> xerces.jar (version 1.4.4)
>> LANLPlot.jar A library we've created using the JFreeChart
>> library (http://www.lanl.gov/orgs/da/d3/plot_library.shtml)
>>
>> and then jars used as part of JFreeChart (http://www.jfree.org/):
>> gnujaxp.jar
>> jcommon-1.0.16.jar
>> jfreechart-1.0.13.jar
>>
>> The problem:
>> When I first tried to run the example MyApp3 using the sample0.xml
>> configuration file, I had the following errors showing in the
>> console:
>>
>> log4j:WARN Parsing warning 2 and column 38
>> log4j:WARN URI was not reported to parser for entity [dtd]
>> log4j:WARN Parsing warning 2 and column 38
>> log4j:WARN missing system ID, using log4j.dtd
>> log4j:ERROR Could not parse file [sample0.xml].
>> gnu.xml.dom.DomEx: The operation violates XML Namespaces.
>> More Information: xmlns is reserved
>> Node Name: #document
>> at gnu.xml.dom.DomDocument.createAttributeNS(DomDocument.java:589)
>> at gnu.xml.dom.DomDocument.createAttribute(DomDocument.java:561)
>> at gnu.xml.dom.DomDocument.defaultAttributes(DomDocument.java:456)
>> at gnu.xml.dom.DomDocument.createElementNS(DomDocument.java:440)
>> at gnu.xml.pipeline.DomConsumer
>> $Handler.startElement(DomConsumer.java:602)
>> at gnu.xml.dom.Consumer$Backdoor.startElement(Consumer.java:203)
>> at gnu.xml.pipeline.EventFilter.startElement(EventFilter.java:570)
>> at
>> gnu
>> .xml
>> .pipeline.ValidationConsumer.startElement(ValidationConsumer.java:
>> 1177)
>> at gnu.xml.aelfred2.SAXDriver.startElement(SAXDriver.java:836)
>> at gnu.xml.aelfred2.XmlParser.parseElement(XmlParser.java:1037)
>> at gnu.xml.aelfred2.XmlParser.parseDocument(XmlParser.java:416)
>> at gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:167)
>> at gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)
>> at gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294)
>> at gnu.xml.dom.JAXPFactory$JAXPBuilder.parse(JAXPFactory.java:186)
>> at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
>> at org.apache.log4j.xml.DOMConfigurator
>> $1.parse(DOMConfigurator.java:676)
>> at
>> org
>> .apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:
>> 789)
>> at
>> org
>> .apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:
>> 682)
>> at
>> org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:
>> 811)
>> at gov.lanl.examples.log4j.chapter3.MyApp3.main(MyApp3.java:34)
>> log4j:WARN No appenders could be found for logger
>> (gov.lanl.examples.log4j.chapter3.MyApp3).
>> log4j:WARN Please initialize the log4j system properly.
>>
>> When I get these error messages, the referenced jars on the build
>> path are showing in Eclipse in the following order:
>> junit-4.7.jar
>> jdom.jar
>> jog4j-1.2.15.jar
>> gnujaxp.jar
>> jcommon-1.0.16.jar
>> jfreechart-1.0.13.jar
>> LANLPlot.jar
>> xerces.jar
>>
>> The Solution:
>> I removed the JFreeChart Libraries from the build path, and then
>> added them back in. Now the libraries are in the following order:
>> junit-4.7.jar
>> jdom.jar
>> jog4j-1.2.15.jar
>> xerces.jar
>> gnujaxp.jar
>> jcommon-1.0.16.jar
>> jfreechart-1.0.13.jar
>> LANLPlot.jar
>>
>> Now when I run the same example I get the following in the console:
>> 0 [main] INFO gov.lanl.examples.log4j.chapter3.MyApp3 -
>> Entering application.
>> 2 [main] DEBUG gov.lanl.examples.log4j.chapter3.Foo - Did it
>> again!
>> 2 [main] INFO gov.lanl.examples.log4j.chapter3.MyApp3 -
>> Exiting application.
>>
>>
>> I don't know why the gnu library is substituting for the xerces
>> library, but I thought you might find this interesting.
>>
>> John St. Ledger
>>
>>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org
Re: possible log4j incompatibility
Posted by Curt Arnold <ca...@apache.org>.
You did not specify what argument you passed to the command line for "MyApp3". Neither the book or the docs make a big deal that the argument to XMLConfigurator.configure(String) is expected to be a URI and not a file spec. If you passed a relative URI, I could see a parser complaining about not being able to resolve the relative URI for the DTD even though log4j is going to ignore that URI and load its own copy. There is a possibility that if you passed "file:///Users/yourusername/sample3.xml, you might avoid at least some of the complaints. Removing the DOCTYPE declaration may also remove a few spurious issues.
I haven't tracked gnujaxp for a very long time (in a previous lifetime I spent a lot of time in XML standards work), but I'm pretty confident that the problem is somewhere other than log4j. If it is a standards conformance issue within gnujaxp, there is not much that log4j can do to work around the issue.
http://java.sun.com/j2se/1.4.2/docs/api/javax/xml/parsers/DocumentBuilderFactory.html#newInstance() describes how JAXP finds the default implementation. You can specify a system property to choose a particular implementation. However if gnujaxp is being chosen preferentially to the JRE's parser, some other code may explicitly configuring for use of gnujaxp.
On Jan 6, 2010, at 12:00 PM, John St. Ledger wrote:
> Hello,
>
> I'm new to log4j, and just working my way through the examples in Chapter 3 of the complete user manual. I may have discovered an incompatibility between log4j and gnujaxp.
>
> The setup:
>
> I'm using Eclipse Galileo (Eclipse Java EE IDE for Web Developers), for Mac OS X as my development environment. I am running Mac OS X 10.5.8. I have a project using Java 6.0 as the compiler and runtime environment.
>
> Additional jars that I have referenced in the project are:
>
> junit-4.7.jar for unit testing
> jdom.jar for working with Documents
> jog4j-1.2.15.jar
> xerces.jar (version 1.4.4)
> LANLPlot.jar A library we've created using the JFreeChart library (http://www.lanl.gov/orgs/da/d3/plot_library.shtml)
>
> and then jars used as part of JFreeChart (http://www.jfree.org/):
> gnujaxp.jar
> jcommon-1.0.16.jar
> jfreechart-1.0.13.jar
>
> The problem:
> When I first tried to run the example MyApp3 using the sample0.xml configuration file, I had the following errors showing in the console:
>
> log4j:WARN Parsing warning 2 and column 38
> log4j:WARN URI was not reported to parser for entity [dtd]
> log4j:WARN Parsing warning 2 and column 38
> log4j:WARN missing system ID, using log4j.dtd
> log4j:ERROR Could not parse file [sample0.xml].
> gnu.xml.dom.DomEx: The operation violates XML Namespaces.
> More Information: xmlns is reserved
> Node Name: #document
> at gnu.xml.dom.DomDocument.createAttributeNS(DomDocument.java:589)
> at gnu.xml.dom.DomDocument.createAttribute(DomDocument.java:561)
> at gnu.xml.dom.DomDocument.defaultAttributes(DomDocument.java:456)
> at gnu.xml.dom.DomDocument.createElementNS(DomDocument.java:440)
> at gnu.xml.pipeline.DomConsumer$Handler.startElement(DomConsumer.java:602)
> at gnu.xml.dom.Consumer$Backdoor.startElement(Consumer.java:203)
> at gnu.xml.pipeline.EventFilter.startElement(EventFilter.java:570)
> at gnu.xml.pipeline.ValidationConsumer.startElement(ValidationConsumer.java:1177)
> at gnu.xml.aelfred2.SAXDriver.startElement(SAXDriver.java:836)
> at gnu.xml.aelfred2.XmlParser.parseElement(XmlParser.java:1037)
> at gnu.xml.aelfred2.XmlParser.parseDocument(XmlParser.java:416)
> at gnu.xml.aelfred2.XmlParser.doParse(XmlParser.java:167)
> at gnu.xml.aelfred2.SAXDriver.parse(SAXDriver.java:320)
> at gnu.xml.aelfred2.XmlReader.parse(XmlReader.java:294)
> at gnu.xml.dom.JAXPFactory$JAXPBuilder.parse(JAXPFactory.java:186)
> at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
> at org.apache.log4j.xml.DOMConfigurator$1.parse(DOMConfigurator.java:676)
> at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:789)
> at org.apache.log4j.xml.DOMConfigurator.doConfigure(DOMConfigurator.java:682)
> at org.apache.log4j.xml.DOMConfigurator.configure(DOMConfigurator.java:811)
> at gov.lanl.examples.log4j.chapter3.MyApp3.main(MyApp3.java:34)
> log4j:WARN No appenders could be found for logger (gov.lanl.examples.log4j.chapter3.MyApp3).
> log4j:WARN Please initialize the log4j system properly.
>
> When I get these error messages, the referenced jars on the build path are showing in Eclipse in the following order:
> junit-4.7.jar
> jdom.jar
> jog4j-1.2.15.jar
> gnujaxp.jar
> jcommon-1.0.16.jar
> jfreechart-1.0.13.jar
> LANLPlot.jar
> xerces.jar
>
> The Solution:
> I removed the JFreeChart Libraries from the build path, and then added them back in. Now the libraries are in the following order:
> junit-4.7.jar
> jdom.jar
> jog4j-1.2.15.jar
> xerces.jar
> gnujaxp.jar
> jcommon-1.0.16.jar
> jfreechart-1.0.13.jar
> LANLPlot.jar
>
> Now when I run the same example I get the following in the console:
> 0 [main] INFO gov.lanl.examples.log4j.chapter3.MyApp3 - Entering application.
> 2 [main] DEBUG gov.lanl.examples.log4j.chapter3.Foo - Did it again!
> 2 [main] INFO gov.lanl.examples.log4j.chapter3.MyApp3 - Exiting application.
>
>
> I don't know why the gnu library is substituting for the xerces library, but I thought you might find this interesting.
>
> John St. Ledger
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org