当前位置: 首页 > 知识库问答 >
问题:

slf4j-Spring MVC测试中的logback NullPointer

程旭尧
2023-03-14

下面是相关的pom.xml

     <dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>4.2.6-RELEASE</version>
    <exclusions>
      <exclusion>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
      </exclusion>
    </exclusions>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>ch.qos.logback</groupId>
    <artifactId>logback-classic</artifactId>
    <version>1.1.7</version>
</dependency>   
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>jcl-over-slf4j</artifactId>
    <version>1.7.21</version>
</dependency>

下面是日志和StackTrace:

20:29:16,293 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Found resource [logback-test.xml] at [file:/code/web/target/test-classes/logback-test.xml]
20:29:16,387 |-ERROR in ch.qos.logback.core.joran.event.SaxEventRecorder@7a1ebcd8 - Unexpected exception while parsing XML document. java.lang.NullPointerException
at java.lang.NullPointerException
at  at org.xml.sax.helpers.LocatorImpl.<init>(LocatorImpl.java:103)
at  at ch.qos.logback.core.joran.event.SaxEvent.<init>(SaxEvent.java:31)
at  at ch.qos.logback.core.joran.event.StartEvent.<init>(StartEvent.java:27)
at  at ch.qos.logback.core.joran.event.SaxEventRecorder.startElement(SaxEventRecorder.java:106)
at  at org.allcolor.xml.parser.CShaniSaxParser.parseStartTag(CShaniSaxParser.java:1393)
at  at org.allcolor.xml.parser.CXmlParser.parseSTARTTag(CXmlParser.java:1405)
at  at org.allcolor.xml.parser.CXmlParser.parse(CXmlParser.java:682)
at  at org.allcolor.xml.parser.CShaniSaxParser.parse(CShaniSaxParser.java:767)
at  at javax.xml.parsers.SAXParser.parse(SAXParser.java:392)
at  at ch.qos.logback.core.joran.event.SaxEventRecorder.recordEvents(SaxEventRecorder.java:59)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:141)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:103)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:53)
at  at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:75)
at  at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:150)
at  at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:84)
at  at org.slf4j.impl.StaticLoggerBinder.<clinit>(StaticLoggerBinder.java:55)
at  at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
at  at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:124)
at  at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:412)
at  at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:357)
at  at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:155)
at  at org.apache.commons.logging.impl.SLF4JLogFactory.getInstance(SLF4JLogFactory.java:132)
at  at org.apache.commons.logging.LogFactory.getLog(LogFactory.java:685)
at  at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.<clinit>(SpringJUnit4ClassRunner.java:91)
at  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at  at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
at  at org.junit.internal.builders.AnnotatedBuilder.buildRunner(AnnotatedBuilder.java:104)

和logback-test.xml:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="consoleAppender" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <Pattern>.%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg %n
            </Pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>TRACE</level>
        </filter>
    </appender>
    <root>
        <level value="INFO" />
        <appender-ref ref="consoleAppender" />
    </root> 
    <logger name="com.me.ControllerTester" level="debug" additivity="false">
        <appender-ref ref="consoleAppender" />
    </logger>
</configuration>

共有1个答案

晏经武
2023-03-14

日志使用SAXParserFactory.newInstance(),它有一个查找过程,用于确定使用哪个实现。在您的环境中,似乎正在根据以下查找选择org.allcolor.xml.parser.cshanisaxparser:

公共静态SAXParserFactory newInstance()

获取SAXParserFactory的新实例。此静态方法创建一个新的工厂实例此方法使用以下有序查找过程确定要加载的SAXParserFactory实现类:

    null

设置jaxp.debugsystem属性将导致该方法向system.err打印大量调试消息,说明它正在执行什么操作以及正在查看什么位置。

如果加载DocumentBuilders时遇到问题,请尝试:

java-djaxp.debug=1您的程序....

-Djavax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl
 类似资料:
  • 我试图测试我的Spring MVC控制器,但我不断收到与Thymeleaf模板相关的错误。我真的不想在控制器测试中处理模板错误,因为这不是我真正感兴趣的。当模板不存在时让测试失败是可以的,但现在我收到了与根据错误代码找不到消息相关的错误。 当我运行应用程序时,这个问题不存在。我一直在尝试弄清楚如何设置测试环境来解决这个问题,但在那里我找不到任何有效的方法。现在,我只是真的想让控制器代码正常工作。

  • 本文向大家介绍详解Spring MVC如何测试Controller(使用springmvc mock测试),包括了详解Spring MVC如何测试Controller(使用springmvc mock测试)的使用技巧和注意事项,需要的朋友参考一下 在springmvc中一般的测试用例都是测试service层,今天我来演示下如何使用springmvc mock直接测试controller层代码。 1

  • 我目前正在尝试在我们基于Eclipse的产品中使用SLF4J作为Eclipse Orbit项目的捆绑包来设置日志记录功能。 我详细使用: 当我尝试使用SLF4J日志api运行测试用例时,在Tycho构建中,我收到了错误消息 Surefire仅使用Eclipse产品的目标平台和插件ManiFestival. MF文件来检测依赖项。由于ch.qos.logback.slf4j是一个片段,因此不可能在清

  • 问题内容: 我在项目中使用JUnit4和Hibernate3。Hibernate依赖于Slf4j,因此我的项目也包括此库。现在,我想在单元测试中使用Slf4j,以便记录补充测试信息。您能否提供一个简短的示例,说明我的单元测试仅记录一行文本的外观?最好在多个测试中 不重复代码 。 问题答案: 我还喜欢在我的DAO类的JUnit测试中使用slf4j。当您创建新测试或修改旧测试时,它确实有帮助。我通常将

  • 正在使用Spring MVC创建Restful Web服务... 下面是我的pom.xml: WEB-INF/web.xml: web-inf/mvc-dispatcher-servlet.xml: src/main/resources/database_db.xml: @Repository public class UserDAO{ } SRC/Test/Java: 这就像在print()语句

  • 我试图建立一个简单的SpringMVC项目。 我创建了Web应用程序项目,然后添加了Spring和公共日志库。 还有这个网站。xml文件 这是HelloWebservlet。xml 然后我创建了java类(HelloContoller.java)com.tutorialspoint包 然后我在WEB-INF/JSP/hello中创建了JSP页面。jsp 我正在处理服务器glassfish,当我运行