此錯誤與庫版本有關,但我無法確定。
我正在處理 Crunchify 上的 REST 示例:
推薦的錯誤修復之一使用 Jersey 2.x,而該專案最初是使用 Jersey 1.x 構建的,如果混合使用,兩者顯然不兼容。這是錯誤的根本原因,在嘗試了一堆沒有成功之后,我不知道要使用什么版本的 Jersey 2.x。
我更新了 pom 和 web.xml 檔案以反映 Jersey 2.x,這也是推薦使用的 Jersey 版本。
pom檔案長這樣,注釋的內容是Jersey 1.x:
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CrunchifyRESTJerseyExample</groupId>
<artifactId>CrunchifyRESTJerseyExample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<!-- <sourceDirectory>src</sourceDirectory> -->
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.7.0</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>asm</groupId>
<artifactId>asm</artifactId>
<version>3.3.1</version>
</dependency>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20170516</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet-core</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.26</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.13</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.13</version>
<scope>provided</scope>
</dependency>
<!-- <dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-bundle</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-server</artifactId>
<version>1.19.4</version>
</dependency>
<dependency>
<groupId>com.sun.jersey</groupId>
<artifactId>jersey-core</artifactId>
<version>1.19.4</version>
</dependency> -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-core</artifactId>
<version>2.3.0.1</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>2.3.1</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>
與原來的一些變化:
我說的目標是 1.8 版,而不是 1.7 版,因為即使指南也建議 1.8,但是如果不在檔案中指定它,你就不能這樣做。另外,由于 pom 檔案中的錯誤,我添加了以下依賴項:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.1</version>
</plugin>
我還更改了 xml 內容,因為 servlet 還必須符合 Jersey 版本。注釋掉的是 Jersey 1.x 的版本
<?xml version="1.0" encoding="UTF-8"?>
<web-app 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/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>CrunchifyRESTJerseyExample</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey 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.crunchify.restjersey</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<!-- <servlet>
<servlet-name>Jersey Web Application</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> -->
<servlet-mapping>
<servlet-name>Jersey Web Application</servlet-name>
<url-pattern>/crunchify/*</url-pattern>
</servlet-mapping>
</web-app>
單獨運行該專案會產生以下結果:

我進一步嘗試了 2020 版 Eclipse 專案評論中的建議,但無濟于事。
我已經查看了許多類似的問題,包括示例下的評論。這只是我到目前為止所查找的部分內容:

啟動服務器,它立即作業:

澤西島和 ASM 版本
您正在使用超級舊的軟體版本,例如 Jersey 2.13 太舊了,它甚至不包含在Eclipse Jersey GitHub 存盤庫中,該存盤庫從 2018 年開始,第一個版本2.28-RC1。為了找到存檔的舊GlassFish Jersey存盤庫,我必須先四處查看。
無論如何,您為專案選擇的 Jersey 2.13 版本在內部根據POM使用 ASM 5.0.2 。我在您自己的 POM 中看到了 ASM 3.3.1,根據ASM 發行說明,它甚至還沒有完全支持 Java 7。然而,您正在根據您的 Maven 編譯器設定編譯為 Java 8 位元組代碼版本。因此,無論 ASM 在您的專案中做什么,您都希望至少使用支持 Java 8 的版本。那至少是 ASM 5.0,所以我建議堅持使用 Jersey 使用的版本 5.0.2。
但這并不能解決您的問題。堆疊跟蹤實際上表明存在問題jersey.repackaged.org.objectweb.asm.ClassReader,即在打包并重新定位到 Jersey 本身的 ASM 類中。它沒有使用您在 POM 中指定的舊版本。我無法在本地重現您的問題。我只是想提一下。
優化 POM
后來,我用mvn dependency:analyze它來找出你實際使用的依賴項。正如我所說,您的 servlet 中未使用 ASM。所以你可以洗掉它。您只需要 Jersey、JSON 和 Jakarta WS-RS API,它是 Jersey 庫之一的傳遞依賴項,但如果您訪問它的類,您仍然應該在 POM 中參考它。依賴傳遞依賴不是干凈的 Maven 方式。我還升級了您使用的插件和 JSON 依賴項,然后洗掉了所有未使用的內容。新的 POM 如下所示:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>CrunchifyRESTJerseyExample</groupId>
<artifactId>CrunchifyRESTJerseyExample</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.10.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.3.2</version>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.json</groupId>
<artifactId>json</artifactId>
<version>20220320</version>
</dependency>
<dependency>
<groupId>jakarta.ws.rs</groupId>
<artifactId>jakarta.ws.rs-api</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.containers</groupId>
<artifactId>jersey-container-servlet</artifactId>
<version>2.35</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.inject</groupId>
<artifactId>jersey-hk2</artifactId>
<version>2.35</version>
</dependency>
<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
<version>2.35</version>
</dependency>
</dependencies>
</project>
GitHub 拉取請求
https://github.com/username917/Temerature-Converter-Challenge/pull/2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/460111.html
