这多少是由spring-boot-starter-jersey随附的tomcat-embed- core版本8.5.4引起的。在所有集成测试中,它将生成下面显示的错误。仅当我重写pom以使用tomcat-embed- core版本8.0.36时,它将起作用。奇怪的是,这是我收到的唯一错误消息。
java.lang.NullPointerException: null at org.apache.catalina.authenticator.AuthenticatorBase.getJaspicProvider(AuthenticatorBase.java:1140) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:431) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:349) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:1110) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:785) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1425) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745)
这是我的依赖树:
[INFO] --- maven-dependency-plugin:2.10:tree (default-cli) @ sample-services --- [INFO] com.sample:sample-services:jar:1.0.0-SNAPSHOT [INFO] +- com.sample:sample-customer:jar:1.0.0-SNAPSHOT:compile [INFO] | +- com.sample:sample-core:jar:1.0.0-SNAPSHOT:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-data-jpa:jar:1.4.0.RELEASE:compile [INFO] | | | +- org.springframework.boot:spring-boot-starter-aop:jar:1.4.0.RELEASE:compile [INFO] | | | | \- org.aspectj:aspectjweaver:jar:1.8.9:compile [INFO] | | | +- org.springframework.boot:spring-boot-starter-jdbc:jar:1.4.0.RELEASE:compile [INFO] | | | | +- org.apache.tomcat:tomcat-jdbc:jar:8.5.4:compile [INFO] | | | | | \- org.apache.tomcat:tomcat-juli:jar:8.5.4:compile [INFO] | | | | \- org.springframework:spring-jdbc:jar:4.3.2.RELEASE:compile [INFO] | | | +- org.hibernate:hibernate-core:jar:5.0.9.Final:compile [INFO] | | | | +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile [INFO] | | | | +- antlr:antlr:jar:2.7.7:compile [INFO] | | | | +- org.jboss:jandex:jar:2.0.0.Final:compile [INFO] | | | | +- dom4j:dom4j:jar:1.6.1:compile [INFO] | | | | | \- xml-apis:xml-apis:jar:1.4.01:compile [INFO] | | | | \- org.hibernate.common:hibernate-commons-annotations:jar:5.0.1.Final:compile [INFO] | | | +- org.hibernate:hibernate-entitymanager:jar:5.0.9.Final:compile [INFO] | | | +- javax.transaction:javax.transaction-api:jar:1.2:compile [INFO] | | | +- org.springframework.data:spring-data-jpa:jar:1.10.2.RELEASE:compile [INFO] | | | | \- org.springframework:spring-orm:jar:4.3.2.RELEASE:compile [INFO] | | | \- org.springframework:spring-aspects:jar:4.3.2.RELEASE:compile [INFO] | | +- org.springframework.boot:spring-boot-starter-logging:jar:1.4.0.RELEASE:compile [INFO] | | | +- ch.qos.logback:logback-classic:jar:1.1.7:compile [INFO] | | | | \- ch.qos.logback:logback-core:jar:1.1.7:compile [INFO] | | | +- org.slf4j:jcl-over-slf4j:jar:1.7.21:compile [INFO] | | | +- org.slf4j:jul-to-slf4j:jar:1.7.21:compile [INFO] | | | \- org.slf4j:log4j-over-slf4j:jar:1.7.21:compile [INFO] | | +- commons-collections:commons-collections:jar:3.2.2:compile [INFO] | | +- com.h2database:h2:jar:1.4.192:compile [INFO] | | +- org.postgresql:postgresql:jar:9.4.1209.jre7:compile [INFO] | | +- javax:javaee-api:jar:7.0:compile [INFO] | | | \- com.sun.mail:javax.mail:jar:1.5.5:compile [INFO] | | | \- javax.activation:activation:jar:1.1:compile [INFO] | | +- org.apache.commons:commons-lang3:jar:3.4:compile [INFO] | | +- commons-codec:commons-codec:jar:1.10:compile [INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.4.5:compile [INFO] | | +- org.joda:joda-money:jar:0.10.0:compile [INFO] | | \- com.sun.jna:jna:jar:3.0.9:compile [INFO] | +- org.springframework.boot:spring-boot-starter-data-elasticsearch:jar:1.4.0.RELEASE:compile [INFO] | | \- org.springframework.data:spring-data-elasticsearch:jar:2.0.2.RELEASE:compile [INFO] | | +- org.springframework:spring-tx:jar:4.3.2.RELEASE:compile [INFO] | | +- org.springframework.data:spring-data-commons:jar:1.12.2.RELEASE:compile [INFO] | | +- commons-lang:commons-lang:jar:2.6:compile [INFO] | | \- org.elasticsearch:elasticsearch:jar:2.3.4:compile [INFO] | | +- org.apache.lucene:lucene-core:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-backward-codecs:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-analyzers-common:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-queries:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-memory:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-highlighter:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-queryparser:jar:5.5.0:compile [INFO] | | | \- org.apache.lucene:lucene-sandbox:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-suggest:jar:5.5.0:compile [INFO] | | | \- org.apache.lucene:lucene-misc:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-join:jar:5.5.0:compile [INFO] | | | \- org.apache.lucene:lucene-grouping:jar:5.5.0:compile [INFO] | | +- org.apache.lucene:lucene-spatial:jar:5.5.0:compile [INFO] | | | +- org.apache.lucene:lucene-spatial3d:jar:5.5.0:compile [INFO] | | | \- com.spatial4j:spatial4j:jar:0.5:compile [INFO] | | +- org.elasticsearch:securesm:jar:1.0:compile [INFO] | | +- com.carrotsearch:hppc:jar:0.7.1:compile [INFO] | | +- org.joda:joda-convert:jar:1.2:compile [INFO] | | +- com.fasterxml.jackson.dataformat:jackson-dataformat-smile:jar:2.8.1:compile [INFO] | | +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.8.1:compile [INFO] | | +- io.netty:netty:jar:3.10.5.Final:compile [INFO] | | +- com.ning:compress-lzf:jar:1.0.2:compile [INFO] | | +- com.tdunning:t-digest:jar:3.0:compile [INFO] | | +- org.hdrhistogram:HdrHistogram:jar:2.1.6:compile [INFO] | | +- commons-cli:commons-cli:jar:1.3.1:compile [INFO] | | \- com.twitter:jsr166e:jar:1.1.0:compile [INFO] | +- com.google.guava:guava:jar:19.0:compile [INFO] | +- org.apache.httpcomponents:httpclient:jar:4.5.2:compile [INFO] | +- commons-httpclient:commons-httpclient:jar:3.1:compile [INFO] | +- commons-io:commons-io:jar:2.5:compile [INFO] | +- net.sf.uadetector:uadetector-core:jar:0.9.22:compile [INFO] | | +- net.sf.qualitycheck:quality-check:jar:1.3:compile [INFO] | | +- com.google.code.findbugs:jsr305:jar:2.0.3:compile [INFO] | | \- javax.annotation:jsr250-api:jar:1.0:compile [INFO] | +- net.sf.uadetector:uadetector-resources:jar:2014.10:compile [INFO] | \- com.fasterxml.jackson.datatype:jackson-datatype-jsr310:jar:2.8.1:compile [INFO] +- com.sample:sample-messaging:jar:1.0.0-SNAPSHOT:compile [INFO] | +- com.amazonaws:aws-java-sdk-sns:jar:1.11.24:compile [INFO] | \- com.amazonaws:aws-java-sdk-sqs:jar:1.11.24:compile [INFO] +- org.springframework.boot:spring-boot-starter-jersey:jar:1.4.0.RELEASE:compile [INFO] | +- org.springframework.boot:spring-boot-starter:jar:1.4.0.RELEASE:compile [INFO] | | \- org.yaml:snakeyaml:jar:1.17:compile [INFO] | +- org.springframework.boot:spring-boot-starter-tomcat:jar:1.4.0.RELEASE:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-core:jar:8.5.4:compile [INFO] | | +- org.apache.tomcat.embed:tomcat-embed-el:jar:8.5.4:compile [INFO] | | \- org.apache.tomcat.embed:tomcat-embed-websocket:jar:8.5.4:compile [INFO] | +- org.springframework.boot:spring-boot-starter-validation:jar:1.4.0.RELEASE:compile [INFO] | +- org.springframework:spring-web:jar:4.3.2.RELEASE:compile [INFO] | | +- org.springframework:spring-aop:jar:4.3.2.RELEASE:compile [INFO] | | +- org.springframework:spring-beans:jar:4.3.2.RELEASE:compile [INFO] | | \- org.springframework:spring-context:jar:4.3.2.RELEASE:compile [INFO] | +- org.glassfish.jersey.core:jersey-server:jar:2.23.1:compile [INFO] | | +- org.glassfish.jersey.core:jersey-client:jar:2.23.1:compile [INFO] | | +- org.glassfish.jersey.media:jersey-media-jaxb:jar:2.23.1:compile [INFO] | | +- javax.annotation:javax.annotation-api:jar:1.2:compile [INFO] | | +- org.glassfish.hk2:hk2-api:jar:2.4.0-b34:compile [INFO] | | | +- org.glassfish.hk2:hk2-utils:jar:2.4.0-b34:compile [INFO] | | | \- org.glassfish.hk2.external:aopalliance-repackaged:jar:2.4.0-b34:compile [INFO] | | \- org.glassfish.hk2:hk2-locator:jar:2.4.0-b34:compile [INFO] | | \- org.javassist:javassist:jar:3.20.0-GA:compile [INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet-core:jar:2.23.1:compile [INFO] | +- org.glassfish.jersey.containers:jersey-container-servlet:jar:2.23.1:compile [INFO] | +- org.glassfish.jersey.ext:jersey-spring3:jar:2.23.1:compile [INFO] | | +- org.glassfish.hk2:hk2:jar:2.4.0-b34:compile [INFO] | | | +- org.glassfish.hk2:config-types:jar:2.4.0-b34:compile [INFO] | | | +- org.glassfish.hk2:hk2-core:jar:2.4.0-b34:compile [INFO] | | | +- org.glassfish.hk2:hk2-config:jar:2.4.0-b34:compile [INFO] | | | +- org.glassfish.hk2:hk2-runlevel:jar:2.4.0-b34:compile [INFO] | | | \- org.glassfish.hk2:class-model:jar:2.4.0-b34:compile [INFO] | | | \- org.glassfish.hk2.external:asm-all-repackaged:jar:2.4.0-b34:compile [INFO] | | \- org.glassfish.hk2:spring-bridge:jar:2.4.0-b34:compile [INFO] | \- org.glassfish.jersey.media:jersey-media-json-jackson:jar:2.23.1:compile [INFO] | +- org.glassfish.jersey.ext:jersey-entity-filtering:jar:2.23.1:compile [INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.8.1:compile [INFO] | \- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.8.1:compile [INFO] | \- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.8.1:compile [INFO] +- com.fasterxml.jackson.core:jackson-databind:jar:2.8.1:compile [INFO] | \- com.fasterxml.jackson.core:jackson-core:jar:2.8.1:compile [INFO] +- com.fasterxml.jackson.core:jackson-annotations:jar:2.8.1:compile [INFO] +- org.springframework.boot:spring-boot-starter-web:jar:1.4.0.RELEASE:compile [INFO] | +- org.hibernate:hibernate-validator:jar:5.2.4.Final:compile [INFO] | | +- org.jboss.logging:jboss-logging:jar:3.3.0.Final:compile [INFO] | | \- com.fasterxml:classmate:jar:1.3.1:compile [INFO] | \- org.springframework:spring-webmvc:jar:4.3.2.RELEASE:compile [INFO] | \- org.springframework:spring-expression:jar:4.3.2.RELEASE:compile [INFO] +- com.amazonaws:aws-java-sdk-s3:jar:1.11.24:compile [INFO] | +- com.amazonaws:aws-java-sdk-kms:jar:1.11.24:compile [INFO] | \- com.amazonaws:aws-java-sdk-core:jar:1.11.24:compile [INFO] | +- commons-logging:commons-logging:jar:1.1.3:compile [INFO] | +- com.fasterxml.jackson.dataformat:jackson-dataformat-cbor:jar:2.8.1:compile [INFO] | \- joda-time:joda-time:jar:2.9.4:compile [INFO] +- com.wordnik:swagger-jersey2-jaxrs_2.10:jar:1.3.13:compile [INFO] | +- com.wordnik:swagger-jaxrs_2.10:jar:1.3.13:compile [INFO] | | +- com.wordnik:swagger-core_2.10:jar:1.3.13:compile [INFO] | | | +- com.fasterxml.jackson.module:jackson-module-scala_2.10:jar:2.4.1:compile [INFO] | | | | \- com.thoughtworks.paranamer:paranamer:jar:2.6:compile [INFO] | | | +- com.fasterxml.jackson.module:jackson-module-jsonSchema:jar:2.4.1:compile [INFO] | | | +- com.wordnik:swagger-annotations:jar:1.3.13:compile [INFO] | | | +- org.json4s:json4s-ext_2.10:jar:3.2.11:compile [INFO] | | | +- org.json4s:json4s-native_2.10:jar:3.2.11:compile [INFO] | | | | \- org.json4s:json4s-core_2.10:jar:3.2.11:compile [INFO] | | | | +- org.json4s:json4s-ast_2.10:jar:3.2.11:compile [INFO] | | | | \- org.scala-lang:scalap:jar:2.10.0:compile [INFO] | | | | \- org.scala-lang:scala-compiler:jar:2.10.0:compile [INFO] | | | \- org.json4s:json4s-jackson_2.10:jar:3.2.11:compile [INFO] | | \- org.reflections:reflections:jar:0.9.9:compile [INFO] | | \- com.google.code.findbugs:annotations:jar:2.0.1:compile [INFO] | \- org.glassfish.jersey.media:jersey-media-multipart:jar:2.1:compile [INFO] | \- org.jvnet.mimepull:mimepull:jar:1.8:compile [INFO] +- org.glassfish.jersey.ext:jersey-bean-validation:jar:2.23.1:compile [INFO] | +- org.glassfish.hk2.external:javax.inject:jar:2.4.0-b34:compile [INFO] | +- org.glassfish.jersey.core:jersey-common:jar:2.23.1:compile [INFO] | | +- org.glassfish.jersey.bundles.repackaged:jersey-guava:jar:2.23.1:compile [INFO] | | \- org.glassfish.hk2:osgi-resource-locator:jar:1.0.1:compile [INFO] | +- javax.validation:validation-api:jar:1.1.0.Final:compile [INFO] | +- javax.el:javax.el-api:jar:2.2.4:compile [INFO] | +- org.glassfish.web:javax.el:jar:2.2.4:compile [INFO] | \- javax.ws.rs:javax.ws.rs-api:jar:2.0.1:compile [INFO] +- com.jayway.restassured:rest-assured:jar:2.9.0:test [INFO] | +- org.codehaus.groovy:groovy:jar:2.4.7:test [INFO] | +- org.codehaus.groovy:groovy-xml:jar:2.4.7:test [INFO] | +- org.apache.httpcomponents:httpmime:jar:4.5.2:test [INFO] | +- org.hamcrest:hamcrest-core:jar:1.3:test [INFO] | +- org.hamcrest:hamcrest-library:jar:1.3:test [INFO] | +- org.ccil.cowan.tagsoup:tagsoup:jar:1.2.1:test [INFO] | +- com.jayway.restassured:json-path:jar:2.9.0:test [INFO] | | +- org.codehaus.groovy:groovy-json:jar:2.4.7:test [INFO] | | \- com.jayway.restassured:rest-assured-common:jar:2.9.0:test [INFO] | \- com.jayway.restassured:xml-path:jar:2.9.0:test [INFO] +- com.jayway.jsonpath:json-path:jar:2.2.0:compile [INFO] | +- net.minidev:json-smart:jar:2.2.1:compile [INFO] | | \- net.minidev:accessors-smart:jar:1.1:compile [INFO] | | \- org.ow2.asm:asm:jar:5.0.3:compile [INFO] | \- org.slf4j:slf4j-api:jar:1.7.21:compile [INFO] +- org.springframework.boot:spring-boot-starter-test:jar:1.4.0.RELEASE:test [INFO] | +- org.springframework.boot:spring-boot-test:jar:1.4.0.RELEASE:test [INFO] | +- org.springframework.boot:spring-boot-test-autoconfigure:jar:1.4.0.RELEASE:test [INFO] | +- junit:junit:jar:4.12:test [INFO] | +- org.mockito:mockito-core:jar:1.10.19:test [INFO] | | \- org.objenesis:objenesis:jar:2.1:test [INFO] | +- org.skyscreamer:jsonassert:jar:1.3.0:test [INFO] | +- org.springframework:spring-core:jar:4.3.2.RELEASE:compile [INFO] | \- org.springframework:spring-test:jar:4.3.2.RELEASE:test [INFO] +- org.assertj:assertj-core:jar:3.2.0:compile [INFO] +- org.springframework.boot:spring-boot-configuration-processor:jar:1.4.0.RELEASE:compile [INFO] | \- org.json:json:jar:20140107:compile [INFO] +- org.neo4j:neo4j-cypher-compiler-2.2:jar:2.2.5:compile [INFO] | +- org.scala-lang:scala-library:jar:2.10.5:compile [INFO] | +- org.scala-lang:scala-reflect:jar:2.10.5:compile [INFO] | +- org.parboiled:parboiled-scala_2.10:jar:1.1.7:compile [INFO] | | \- org.parboiled:parboiled-core:jar:1.1.7:compile [INFO] | \- com.googlecode.concurrentlinkedhashmap:concurrentlinkedhashmap-lru:jar:1.4:compile [INFO] \- org.springframework.boot:spring-boot-devtools:jar:1.4.0.RELEASE:compile [INFO] +- org.springframework.boot:spring-boot:jar:1.4.0.RELEASE:compile [INFO] \- org.springframework.boot:spring-boot-autoconfigure:jar:1.4.0.RELEASE:compile
这是我的应用程序类:
@EntityScan(basePackageClasses = { Application.class, Jsr310JpaConverters.class }) @EnableScheduling @EnableAsync @SpringBootApplication(scanBasePackages = "com.sample") public class Application extends Loggable implements AsyncConfigurer { /** * This forces the SNS topics to be created and/or linked. */ @Autowired @SuppressWarnings("all") private TopicFactory topicFactory; /** * It all begins here. */ public static void main(String[] args) throws Exception { SpringApplication application = new SpringApplication(Application.class); application.setBanner(new SampleBanner()); application.run(args); } /** * Returns the @Async executor. */ @Override public Executor getAsyncExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(4); executor.setMaxPoolSize(4); executor.setQueueCapacity(0); executor.setThreadNamePrefix("Async-"); executor.initialize(); return executor; } /** * Returns the uncaught exception handler for @Async operations. */ @Override public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() { return (e, method, params) -> log.error("Uncaught async error", e); } }
如果有人可以指出我从哪里开始或导致它失败的原因,那将有很大的帮助。
可能的修复 :
1)将authConfigFactory设置为Tomcat 8.5使用的默认AuthConfigFactory实现(示例基本实现):
package com.example; import org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import javax.security.auth.message.config.AuthConfigFactory; @SpringBootApplication public class DemoApplication { public static void main(String[] args) { if (AuthConfigFactory.getFactory() == null) { AuthConfigFactory.setFactory(new AuthConfigFactoryImpl()); } SpringApplication.run(DemoApplication.class, args); } }
要么
2)AuthConfigFactory从您的类路径中删除重复的类。就我而言,同一类有两种不同的实现:
AuthConfigFactory
org.apache.tomcat.embed/tomcat-embed-core/8.5.4/tomcat-embed-core-8.5.4.jar!/javax/security/auth/message/config/AuthConfigFactory.class javax/javaee-api/7.0/javaee-api-7.0.jar!/javax/security/auth/message/config/AuthConfigFactory.class
javaee-api-7.0.jar具有自己的AuthConfigFactory实现,该实现与Tomcat 8.5不完全兼容,并导致NullPointerException(从Tomcat的版本开始,该常量定义了默认的jaspic实现类javaee- api)从gradle / mvn项目中删除依赖项(或任何其他包含不同AuthConfigFactory实现的依赖项)(如果您能够)
javaee-api-7.0.jar
NullPointerException
javaee- api
3)将Tomcat降级到8.0或7.0:
http://docs.spring.io/spring-boot/docs/current- SNAPSHOT/reference/htmlsingle/#howto-use- tomcat-7
说明 :
此问题与从Spring Boot从1.3.x升级到1.4期间进行的Tomcat升级(从8.0.x到8.5.x)有关。问题是Tomcat 8.5引入了jaspic支持(https://tomcat.apache.org/tomcat-8.5-doc/config/jaspic.html),并提供了自己的AuthConfigFactory 实现。此实现定义了默认的jaspic auth工厂实现:
private static final String DEFAULT_JASPI_AUTHCONFIGFACTORYIMPL = "org.apache.catalina.authenticator.jaspic.AuthConfigFactoryImpl";
它在其他实现中未定义(例如,来自javaee- api-7.0的实现),并且NullPointerException由于未实例化AuthConfigFactory而导致。