目前,我们已开发出具有以下框架的泽西2.0平静应用程序:
该应用程序在tomcat 8.5
& Weblogic 12.1.x
台服务器
但是,当我们尝试将其部署到Weblogic 12.2.1.3
<Oct 6, 2017 10:32:23,020 AM HKT> <Error> <Deployer> <BEA-149265> <Failure occurred in the execution of deployment request with ID "214569275552728" for task "1" on [partition-name: DOMAIN]. Error is: "weblogic.application.ModuleException: org.glassfish.jersey.internal.ServiceConfigurationError: org.glassfish.jersey.server.spi.ComponentProvider: The class org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider implementing the provider interface org.glassfish.jersey.server.spi.ComponentProvider is not found. The provider implementation is ignored."
weblogic.application.ModuleException: org.glassfish.jersey.internal.ServiceConfigurationError: org.glassfish.jersey.server.spi.ComponentProvider: The class org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider implementing the provider interface org.glassfish.jersey.server.spi.ComponentProvider is not found. The provider implementation is ignored.
at weblogic.application.internal.ExtensibleModuleWrapper.start(ExtensibleModuleWrapper.java:140)
at weblogic.application.internal.flow.ModuleListenerInvoker.start(ModuleListenerInvoker.java:124)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:233)
at weblogic.application.internal.flow.ModuleStateDriver$3.next(ModuleStateDriver.java:228)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:45)
Truncated. see log file for complete stacktrace
Caused By: org.glassfish.jersey.internal.ServiceConfigurationError: org.glassfish.jersey.server.spi.ComponentProvider: The class org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider implementing the provider interface org.glassfish.jersey.server.spi.ComponentProvider is not found. The provider implementation is ignored.
at org.glassfish.jersey.internal.ServiceFinder.fail(ServiceFinder.java:433)
at org.glassfish.jersey.internal.ServiceFinder.access$300(ServiceFinder.java:155)
at org.glassfish.jersey.internal.ServiceFinder$LazyObjectIterator.handleClassNotFoundException(ServiceFinder.java:806)
at org.glassfish.jersey.internal.ServiceFinder$LazyObjectIterator.hasNext(ServiceFinder.java:757)
at org.glassfish.jersey.server.ApplicationHandler.getRankedComponentProviders(ApplicationHandler.java:743)
Truncated. see log file for complete stacktrace
>
由于我们没有使用任何CDI实现(使用HK2&amp; Spring的DI),我们尝试在WEB-INFO文件夹下添加beans.xml,让服务器不要使用&#39 ;扫描我们的应用程序。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="none" >
</beans>
我们也尝试在我们的Weblogic中Disabling Implicit Bean Discovery。
所有尝试仍然无法解决错误。请帮助。
更新1
我们尝试在META-INF下创建一个空的services
文件夹(不要为什么需要,可以解释。)并在weblogic.xml中添加以下内容
<prefer-application-resources>
<resource-name>META-INF/services/javax.servlet.ServletContainerInitializer</resource-name>
<resource-name>META-INF/services/javax.ws.rs.ext.RuntimeDelegate</resource-name>
<!-- jersey -->
<resource-name>META-INF/services/org.glassfish.jersey.*</resource-name>
<resource-name>org.glassfish.jersey.*</resource-name>
<resource-name>jersey.repackaged.*</resource-name>
<!-- hk2 -->
<resource-name>META-INF/services/org.glassfish.hk2.*</resource-name>
</prefer-application-resources>
现在应用程序可以使用自己的jersey 2.25.1库而不是Weblogic 12.2预构建的libs(2.21.x)正常运行。但是,会出现另一条WARN消息,不确定它是否是一个问题..
<BEA-2192510> <Cannot add Jersey servlet for application class org.glassfish.jersey.server.ResourceConfig because ApplicationPath annotation is not set on it.>
@ApplicationPath
已设置
@ApplicationPath("/api")
public class MyResourceConfig extends ResourceConfig {
public MyResourceConfig() {
register(JacksonFeature.class);
...
}
}
答案 0 :(得分:0)
警告消息是关于构建servlet映射,你可以忽略它。