从jersey 1迁移时NoClassDefFoundError ProcessingException。x球衣2。x(2.8)

时间:2021-06-10 19:33:39

I developed a web service application which was working fine with jersey 1.x ( 1.16 ) I recently tried to migrate to latest stable jersey version 2.8

我开发了一个web服务应用程序,它对jersey 1运行良好。x(1.16)最近我尝试迁移到最新的稳定的jersey版本2.8。

I deleted all jersey jar files of v1.16 then I downloaded jersey jars of v2.8 from the link - https://jersey.java.net/download.html

我删除了v1.16的所有jersey jar文件,然后我从链接中下载了jersey jar文件,https://jersey.java.net/download.html。

As per documentation I came to know that, I should have latest servlet jar, servlet jar 2.5 or above, So I downloaded servlet-api-2.5.jar and added the same to /libs folder.

根据我所了解的文档,我应该有最新的servlet jar、servlet jar 2.5或以上,所以我下载了servlet-api-2.5。jar并添加了相同的to /libs文件夹。

I downloaded javax.ws.rs-api-2.0-m09.jar and added it to /libs I also added latest jettison v 1.3.3 to /libs

我下载javax.ws.rs m09——api - 2.0。把它加到/libs上,我还添加了最新的jettison v 1.3.3 to /libs。

But I am getting exception when I run on tomcat7 as follows What are the exact steps to migrate from jersey 1.x to 2.x ? What is missing here ?

但是,当我在tomcat7上运行时,我得到了一个例外,那就是从jersey 1迁移的确切步骤。x 2。x ?这里缺少什么?

My Web.xml looks as follows

我的网络。xml看起来如下所示

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>com.tempWSJersey2.WebServices</display-name>
  <servlet>
    <servlet-name>Temp REST Service</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
     <param-name>jersey.config.server.provider.packages</param-name>
     <param-value>com.temp</param-value>
     </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>Temp REST Service</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>
</web-app>

And the exception is -

例外是-。

SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tempWSJersey2]]
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/tempWSJersey2]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    ... 7 more
Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/ProcessingException
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:791)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2904)
    at org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1173)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1681)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2308)
    at java.lang.Class.getDeclaredFields(Class.java:1760)
    at org.apache.catalina.util.Introspection.getDeclaredFields(Introspection.java:87)
    at org.apache.catalina.startup.WebAnnotationSet.loadFieldsAnnotation(WebAnnotationSet.java:261)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationServletAnnotations(WebAnnotationSet.java:140)
    at org.apache.catalina.startup.WebAnnotationSet.loadApplicationAnnotations(WebAnnotationSet.java:67)
    at org.apache.catalina.startup.ContextConfig.applicationAnnotationsConfig(ContextConfig.java:405)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:881)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:369)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5173)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.ProcessingException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1714)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1559)
    ... 28 more

May 11, 2014 8:49:41 AM org.apache.catalina.core.ContainerBase startInternal
SEVERE: A child container failed during start
java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at java.util.concurrent.FutureTask$Sync.innerGet(FutureTask.java:252)
    at java.util.concurrent.FutureTask.get(FutureTask.java:111)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1123)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:684)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:451)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1559)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1549)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
    at java.util.concurrent.FutureTask.run(FutureTask.java:166)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:800)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more

May 11, 2014 8:49:41 AM org.apache.catalina.startup.Catalina start
SEVERE: Catalina.start: 
org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8005]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:684)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:322)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:451)
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:732)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 7 more
Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]]
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 9 more
Caused by: org.apache.catalina.LifecycleException: A child container failed during start
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1131)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:302)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    ... 11 more

May 11, 2014 8:49:41 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 1452 ms

If I include configuration class by extending ResourceConfig class I get strange error as follows.

如果我通过扩展ResourceConfig类来包含配置类,那么就会产生如下奇怪的错误。

Multiple markers at this line
    - The type javax.ws.rs.core.Configurable cannot be resolved. It is indirectly referenced 
     from required .class files
    - The hierarchy of the type AppConfiguration is inconsistent

Update - Solution to the problem 1> Add all the jar files given jaxrs-ri folder which you download as jersey 2.8 from the link
https://jersey.java.net/download.html

更新-解决问题1>将所有的jar文件添加到你从链接https://jersey.java.net/download.html下载到的jaxrs-ri文件夹中。

Add jar files from all the folders , "lib", "ext", "api"

从所有文件夹中添加jar文件,“lib”、“ext”、“api”

2> Add the jar files listed in the below post Can't enable POJO based JSON binding support for Jackson in Jersey 2.0

>添加了下面所列的jar文件,不能在Jersey 2.0中支持基于POJO的JSON绑定支持。

Now jersey 2.8 works perfectly ..

现在,jersey 2.8的工作非常完美。

2 个解决方案

#1


9  

Exception you are getting is happening because you downloaded "javax.ws.rs-api-2.0-m09.jar" this jar doesn't have ProcessingException download the latest one

因为下载了“javax.ws.rs-api-2.0-m09”,所以您正在发生异常。jar“这个jar没有ProcessingException下载最新的一个。

Class not foundCaused by: java.lang.NoClassDefFoundError: javax/ws/rs/ProcessingException

Download this jar javax.ws.rs-api-2.0.jar

下载这个jar javax.ws.rs-api-2.0.jar

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
</dependency>

Secondly I think you are missing a part from your web.xml

其次,我认为您在web.xml中丢失了一部分。

Try adding these things to your web.xml as appropriate for you application. If you don't have this section this may also lead to SEVERE: A child container failed during start....

试着把这些东西添加到你的网站。xml适用于您的应用程序。如果你没有这部分也可能导致严重的:一个孩子集装箱失败开始....

This is what you are missing. Please note that param-value is the list of packages that contain your rest services.

这就是你所缺少的。请注意,param-value是包含您的rest服务的包列表。

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages;org.codehaus.jackson.jaxrs</param-name>
        <param-value>com.your.package.for.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

To get latest Jackson use this Link

为了得到最新的杰克逊使用这个链接。

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.3.3</version>
</dependency>

#2


1  

If you are working in eclipse. Just remove the libraries from Deployment Assembly and add them again. Sometimes after adding new jar does not update the library of the web application

如果您在eclipse中工作。只需将库从部署程序集中删除并再次添加它们即可。有时,添加新jar后不会更新web应用程序库。

BuildPath->Deployment Assembly

BuildPath - >部署大会

#1


9  

Exception you are getting is happening because you downloaded "javax.ws.rs-api-2.0-m09.jar" this jar doesn't have ProcessingException download the latest one

因为下载了“javax.ws.rs-api-2.0-m09”,所以您正在发生异常。jar“这个jar没有ProcessingException下载最新的一个。

Class not foundCaused by: java.lang.NoClassDefFoundError: javax/ws/rs/ProcessingException

Download this jar javax.ws.rs-api-2.0.jar

下载这个jar javax.ws.rs-api-2.0.jar

<dependency>
    <groupId>javax.ws.rs</groupId>
    <artifactId>javax.ws.rs-api</artifactId>
    <version>2.0</version>
</dependency>

Secondly I think you are missing a part from your web.xml

其次,我认为您在web.xml中丢失了一部分。

Try adding these things to your web.xml as appropriate for you application. If you don't have this section this may also lead to SEVERE: A child container failed during start....

试着把这些东西添加到你的网站。xml适用于您的应用程序。如果你没有这部分也可能导致严重的:一个孩子集装箱失败开始....

This is what you are missing. Please note that param-value is the list of packages that contain your rest services.

这就是你所缺少的。请注意,param-value是包含您的rest服务的包列表。

<servlet>
    <servlet-name>jersey-serlvet</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
        <param-name>jersey.config.server.provider.packages;org.codehaus.jackson.jaxrs</param-name>
        <param-value>com.your.package.for.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

To get latest Jackson use this Link

为了得到最新的杰克逊使用这个链接。

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.3.3</version>
</dependency>

#2


1  

If you are working in eclipse. Just remove the libraries from Deployment Assembly and add them again. Sometimes after adding new jar does not update the library of the web application

如果您在eclipse中工作。只需将库从部署程序集中删除并再次添加它们即可。有时,添加新jar后不会更新web应用程序库。

BuildPath->Deployment Assembly

BuildPath - >部署大会