Weblogc 12.2.1.3在部署期间出现jersey 2.0错误

时间:2017-10-06 03:12:29

标签: java-7 jersey-2.0 weblogic12c hk2

目前,我们已开发出具有以下框架的泽西2.0平静应用程序:

  • jaxrs-ri(2.25.1)
  • spring4(4.3.10)
  • jersey-spring3(2.25.1)

该应用程序在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);
        ...

    }
}

1 个答案:

答案 0 :(得分:0)

警告消息是关于构建servlet映射,你可以忽略它。