我在将 Spring Boot War 文件部署到 weblogic 时遇到了类似的问题。 Servlet 能够在 Servlet 3.x Web 容器的支持下注册。但是 weblogic 正在尝试创建 servlet bean 的新 servlet 实例。
@Bean
@ConditionalOnMissingBean
public GraphQLServlet graphQLServlet(GraphQLSchemaProvider schemaProvider, ExecutionStrategyProvider executionStrategyProvider) {
return new SimpleGraphQLServlet(schemaProvider, executionStrategyProvider, objectMapperConfigurer, listeners, instrumentation, errorHandler, contextBuilder, graphQLRootObjectBuilder);
}
@Bean
ServletRegistrationBean graphQLServletRegistrationBean(GraphQLServlet servlet) {
return new ServletRegistrationBean(servlet, graphQLServletProperties.getServletMapping());
}
weblogic 会抛出如下异常:
<Oct 2, 2017 4:08:31 PM SGT> <Error> <HTTP> <BEA-101125> <[ServletContext@344074943[app:cpapps-gra3.1]] Error occurred while instantiating servlet: "simpleGraphQLServlet".
java.lang.InstantiationException: graphql.servlet.SimpleGraphQLServlet
at java.lang.Class.newInstance(Class.java:427)
at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
at weblogic.servlet.internal.WebComponentContributor.createServletInstance(WebComponentCon
at weblogic.servlet.internal.StubSecurityHelper$ServletInitAction.newServletInstanceIfNece
Truncated. see log file for complete stacktrace
Caused By: java.lang.NoSuchMethodException: graphql.servlet.SimpleGraphQLServlet.<init>()
at java.lang.Class.getConstructor0(Class.java:3082)
at java.lang.Class.newInstance(Class.java:412)
at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
at weblogic.servlet.internal.WebComponentContributor.getNewInstance(WebComponentContributo
at weblogic.servlet.internal.WebComponentContributor.createServletInstance(WebComponentCon
Truncated. see log file for complete stacktrace
>
好像web请求直接去weblogic而不是spring dispatcher servlet。
但是很难看到相同的war文件可以在tomcat中部署和运行而没有任何错误。