You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

jersey-quickstart-grizzly模板的Maven Web Service报内部服务器错误

问题:Jersey-Grizzly REST服务启动后访问出现Internal Server错误

我是Java新手,正在尝试用Maven基于jersey-quickstart-grizzly模板搭建基础RESTful Web Service。配置好pom.xml后执行命令mvn -e compile exec:java启动项目,但在浏览器访问localhost时出现了“Internal Server”错误。

我的pom.xml配置

<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/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.test.rest</groupId>
    <artifactId>test-rest</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>test-rest</name>
    <dependencies>
         <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-grizzly</artifactId>
            <version>1.19</version>
        </dependency>
        <!-- uncomment this to get JSON support: -->
         <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-json</artifactId>
            <version>1.19</version>
        </dependency>
       
        <!-- uncomment this to get Fastinfoset support:
         <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-fastinfoset</artifactId>
            <version>${jersey-version}</version>
        </dependency>
        -->
        <!-- uncomment this to get ATOM support:
         <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-atom</artifactId>
            <version>${jersey-version}</version>
        </dependency>
        -->
        <!-- uncomment this to get multipart MIME types support:
         <dependency>
            <groupId>com.sun.jersey.contribs</groupId>
            <artifactId>jersey-multipart</artifactId>
            <version>${jersey-version}</version>
        </dependency>
        -->
           <dependency>
            <groupId>com.sun.grizzly</groupId>
            <artifactId>grizzly-servlet-webserver</artifactId>
            <version>1.9.45</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.2</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.sun.jersey</groupId>
            <artifactId>jersey-client</artifactId>
            <version>1.19.4</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <inherited>true</inherited>
                <version>2.3.2</version>
                <configuration>
                    <source>10</source>
                    <target>10</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>com.test.rest.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <properties>
        <jersey-version>1.20-SNAPSHOT</jersey-version>
    </properties>
</project>

错误日志

Sep 29, 2023 9:52:26 PM com.sun.jersey.api.core.PackagesResourceConfig
init INFO: Scanning for root resource and provider classes in the
packages:   com.test.rest Sep 29, 2023 9:52:26 PM
com.sun.grizzly.http.servlet.ServletAdapter doService SEVERE: service
exception: java.lang.IllegalArgumentException
at jersey.repackaged.org.objectweb.asm.ClassReader.(ClassReader.java:170)
at jersey.repackaged.org.objectweb.asm.ClassReader.(ClassReader.java:153)
at jersey.repackaged.org.objectweb.asm.ClassReader.(ClassReader.java:424)
at com.sun.jersey.spi.scanning.AnnotationScannerListener.onProcess(AnnotationScannerListener.java:138)
at com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner$1.f(FileSchemeScanner.java:86)
at com.sun.jersey.core.util.Closing.f(Closing.java:71)
at com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scanDirectory(FileSchemeScanner.java:83)
at com.sun.jersey.core.spi.scanning.uri.FileSchemeScanner.scan(FileSchemeScanner.java:71)
at com.sun.jersey.core.spi.scanning.PackageNamesScanner.scan(PackageNamesScanner.java:226)
at com.sun.jersey.core.spi.scanning.PackageNamesScanner.scan(PackageNamesScanner.java:142)
at com.sun.jersey.api.core.ScanningResourceConfig.init(ScanningResourceConfig.java:80)
at com.sun.jersey.api.core.PackagesResourceConfig.init(PackagesResourceConfig.java:104)
at com.sun.jersey.api.core.PackagesResourceConfig.(PackagesResourceConfig.java:78)
at com.sun.jersey.api.core.PackagesResourceConfig.(PackagesResourceConfig.java:89)
at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:696)
at com.sun.jersey.spi.container.servlet.WebComponent.createResourceConfig(WebComponent.java:674)
at com.sun.jersey.spi.container.servlet.WebComponent.init(WebComponent.java:205)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:394)
at com.sun.jersey.spi.container.servlet.ServletContainer.init(ServletContainer.java:577)
at javax.servlet.GenericServlet.init(GenericServlet.java:241)
at com.sun.grizzly.http.servlet.ServletAdapter.loadServlet(ServletAdapter.java:486)
at com.sun.grizzly.http.servlet.ServletAdapter.doService(ServletAdapter.java:425)
at com.sun.grizzly.http.servlet.ServletAdapter.service(ServletAdapter.java:379)
at com.sun.grizzly.tcp.http11.GrizzlyAdapter.service(GrizzlyAdapter.java:179)
at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:849)
at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:746)
at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:1045)
at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:228)
at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:137)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:104)
at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:90)
at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:79)
at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:54)
at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:59)
at com.sun.grizzly.ContextTask.run(ContextTask.java:71)
at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:532)
at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:513)
at java.base/java.lang.Thread.run(Thread.java:833)

问题原因及解决方案

核心原因

Jersey 1.x版本依赖的ASM库无法兼容Java 9及以上版本的字节码格式,而你的pom.xml中配置的编译版本是Java 10,导致类文件解析失败,抛出IllegalArgumentException。同时,项目中Jersey依赖版本不统一(1.19、1.19.4、1.20-SNAPSHOT),可能引发额外兼容性问题。

修复步骤

  1. 降低Java编译版本到8
    修改maven-compiler-plugin的source和target参数为1.8:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <inherited>true</inherited>
        <version>2.3.2</version>
        <configuration>
            <source>1.8</source>
            <target>1.8</target>
        </configuration>
    </plugin>
    
  2. 统一Jersey依赖版本
    修改properties中的jersey-version为稳定版1.19.4,并将所有Jersey相关依赖的版本替换为该变量:

    <properties>
        <jersey-version>1.19.4</jersey-version>
    </properties>
    

    调整后的Jersey依赖示例:

    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-grizzly</artifactId>
        <version>${jersey-version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-json</artifactId>
        <version>${jersey-version}</version>
    </dependency>
    <dependency>
        <groupId>com.sun.jersey</groupId>
        <artifactId>jersey-client</artifactId>
        <version>${jersey-version}</version>
        <scope>test</scope>
    </dependency>
    
  3. 清理并重新构建项目
    执行以下命令清理旧编译产物并重新构建启动:

    mvn clean install
    mvn -e compile exec:java
    

完成以上步骤后,重新访问localhost对应的接口即可正常使用。

内容的提问来源于stack exchange,提问作者Ravi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 16:49:56