16 Create the DTD file or configure an XML catalog for this DTD

解决eclipse 代码报错

问题描述

我用eclipse打开书上的随书源码时,log4j.xml文件的<!DOCTYPE>这行代码有错误:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
<log4j:configuration
    xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender
        name="STDOUT"
        class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param
                name="ConversionPattern"
                value="%5p [%t] %m%n"/>
        </layout>
    </appender>
    <logger name="mapper.EmployeeMapper">
        <level value="DEBUG"/>
    </logger>
    <root>
        <level value="ERROR"/>
        <appender-ref ref="STDOUT"/>
    </root>
</log4j:configuration>

错误提示信息如下:

1
2
Cannot find DTD 'file:///E:/workspace_web2/MyDynamicSQLTest/src/log4j.dtd'.
Create the DTD file or configure an XML catalog for this DTD.

图片

解决方案1

创建一个log4j2.xml文件,然后复制里面的!DOCTYPE元素,替换log4j.xml文件中的!DOCTYPE元素。

通过DTD file创建log4j2.xml文件

src目录上右键,然后选择New,Others...
图片
Wizards搜索框中输入xml,然后选择XML File,接着点击Next
图片
输入文件名log4j2.xml,点击Next
图片
选择Create XML file from a DTD file,点击Next
图片
选择Select XML Catalog entry,然后选择-//LOG4J//DTD LOG4J//EN,点击Next
图片
最后点击Finish
图片

创建好的log4j2.xml文件源码如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOG4J//DTD LOG4J//EN" "https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" >
<log4j:configuration></log4j:configuration>

用log4j2.xml的DOCTYPE替换log4j.xml的DOCTYPE

log4j2.xml文件中的

1
<!DOCTYPE log4j:configuration PUBLIC "-//LOG4J//DTD LOG4J//EN" "https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" >

这行代码复制,替换log4j.xml中的相同语句即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOG4J//DTD LOG4J//EN" "https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd" >
<log4j:configuration
xmlns:log4j="http://jakarta.apache.org/log4j/">
<appender
name="STDOUT"
class="org.apache.log4j.ConsoleAppender">
<layout class="org.apache.log4j.PatternLayout">
<param
name="ConversionPattern"
value="%5p [%t] %m%n"/>
</layout>
</appender>
<logger name="mapper.EmployeeMapper">
<level value="DEBUG"/>
</logger>
<root>
<level value="ERROR"/>
<appender-ref ref="STDOUT"/>
</root>
</log4j:configuration>

然后删除掉无用的log4j2.xml

解决方案2

取出log4j-xxx.jar文件中的log4j.dtd文件

eclipse安装目录下创建一个myconfig文件夹

用解压软件,打开log4jjar文件,然后依次进入org\apache\log4j\xml\目录下,将log4j.dtd复制出来
图片

粘贴到上面创建的myconfig文件夹中.
图片

创建Catalog Entry

eclipse中点击Windows,Preferences,XML,XML Catalog,Add按钮,
图片

填写Location文本框

点击Catalog Entry,然后点击Location文本框下面的File System按钮,选择刚才保存到myconfig文件夹下的log4j.dtd文件。
图片

填写Key type选择框

然后在Key type选择框中选择System ID

填写key文本框

然后在key文本框中填写如下URL:

1
https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd

图片

在Design标签页 修改DOCTYPE

点击log4j.xml文件下方的Design标签页,然后在表格的DOCTYPE这一行上右键,选择Edit DOCTYPE:
图片

  • 点击Public ID右边的Browse按钮,然后选择-//LOG4J//DTD LOG4J//EN这个选择项
    图片
  • 点击System ID右边的Browse按钮,然后选择Select XML Catalog entry这个单选项,然后在下面的选择框选择
    1
    https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd
    这个key
    图片

查看修改后的log4j.xml源码

点击文件下方的Source查看修改后的效果
修改后的log4j.xml文件如下所示

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE log4j:configuration PUBLIC "-//LOG4J//DTD LOG4J//EN" "https://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
<log4j:configuration
    xmlns:log4j="http://jakarta.apache.org/log4j/">
    <appender name="STDOUT"
        class="org.apache.log4j.ConsoleAppender">
        <layout class="org.apache.log4j.PatternLayout">
            <param name="ConversionPattern" value="%5p [%t] %m%n" />
        </layout>
    </appender>
    <logger name="mapper.EmployeeMapper">
        <level value="DEBUG" />
    </logger>
    <root>
        <level value="ERROR" />
        <appender-ref ref="STDOUT" />
    </root>
</log4j:configuration>