当前位置: 首页 > 知识库问答 >
问题:

同一WAR中的多个JAX-RS应用程序

卫弘懿
2023-03-14

我有

@ApplicationPath("/resourcesP")
public class RestfulPrediction extends Application {
    @Override
    public Set<Class<?>> getClasses() {
    Set<Class<?>> set = new HashSet<Class<?>>();
        set.add(PredictionsRS.class);
        return set;
    }
}

@ApplicationPath("/resourcesA")
public class RestfulAdage extends Application {
    @Override
    public Set<Class<?>> getClasses() {
    Set<Class<?>> set = new HashSet<Class<?>>();
        set.add(Adages.class);
        return set;
    }
}

两个不同的ApplicationPath和类如下所示。

@Path("/")
public class service.Adages {}

@Path("/")
public class webservices.PredictionsRS {}
  <servlet>  
    <servlet-name>jersey</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>
            service
            webservices
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>  

如果我在param-value中取出一个包,这是有效的,如果我更改@Path注释之一,这也是有效的,所以这是我的配置的问题?

我用的是1.10号球衣。谢谢大家。

共有1个答案

韩博简
2023-03-14

您没有在web.xml定义JAX-RS应用程序。尝试以下操作:

<servlet>
    <servlet-name>full.name.RestfulAdage</servlet-name>
</servlet>

<servlet>
    <servlet-name>full.name.RestfulPrediction</servlet-name>
</servlet>

<servlet-mapping>
    <servlet-name>full.name.RestfulPrediction</servlet-name>
    <url-pattern>/resourcesP/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>full.name.RestfulPrediction</servlet-name>
    <url-pattern>/resourcesA/*</url-pattern>
</servlet-mapping>

并从代码中删除@applicationpath注释。

我用Jersey 2.7、servlet容器3.0检查了上面的代码,它工作了。如果仍然有这个bug,尝试升级到Jersey 1.17(它应该不会改变Jersey 1.10的任何行为,而是修复bug),并最终使用servlet容器3.0。

   <servlet>  
    <servlet-name>jersey</servlet-name>  
    <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>  
    <init-param>
        <param-name>com.sun.jersey.config.property.packages</param-name>
        <param-value>
            com.koitoer.webservices
        </param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>

8/04/2014 09:13:40 PM com.sun.Jersey.server.impl.container.servlet.jerseyServletContainerInitializer addServletWith application信息:在servlet映射/resourcesp/*处用同名的应用程序类注册名为com.koitoer.webservices.chapter2.service2.restfulprediction的泽西servlet应用程序

8/04/2014 09:13:40 PM com.sun.Jersey.server.impl.container.servlet.jerseyServletContainerInitializer addServletWith application信息:在servlet映射/resourcesa/*处用同名的应用程序类注册名为com.koitoer.webservices.chapter2.restfuladage的泽西servlet应用程序

 类似资料:
  • 我正在尝试在具有两个应用程序类的 Java 应用程序上实现 Swagger,因为一个处理“公共”Web 服务,另一个处理“管理”Web 服务。我正在尝试生成两个单独的 swagger.json 文件,每个应用程序类一个。但是,仅为两个 url 生成其中一个。下面是一些代码: 公共应用程序类: 私有应用程序类: 现在,如果我点击这些URL中的任何一个,我都会得到相同的“公共”swagger json

  • 问题内容: 可以做这样的事情吗? 我正在使用RESTEasy。 问题答案: 是的,您可以这样做,尽管您将必须重命名方法,以使它们的签名不同。 更新: 检查Dieter Cailliau的答案, 可能是您想要的… 您可以在其中检查JSR-311的API及其参考实现,名称为“ jersey”: JSR311 API 泽西岛

  • 问题内容: JAX-RS 1.1规范在第6页上说: 如果不存在Application子类,则必须将添加的servlet命名为: 添加的servlet是什么?可以是任意servlet吗? 如果存在Application子类,并且已经定义了一个servlet,该servlet的servlet初始化参数为: 同样,这里的“ servlet”是什么? 如果存在不由现有Servlet处理的Applicati

  • 问题内容: 我使用AppFuse创建了一个基本的应用程序外壳,并按照AppFuse教程使用Jax- RS创建了一个简单的RESTful服务。那很好。调用时,将Person对象的集合作为Json格式的字符串返回,并带有正确的数据。 我现在想从Appfuse提供的RESTful服务中访问和对象(以使用需要这些对象的另一个库)。 我 _认为_应该可以通过添加@Context注释来实现,但是,如果我添加@

  • JAX-RS教程提供了JAX-RS API的概念和示例。 这个JAX-RS教程专为初学者和专业人士设计。 JAX-RS API有两个主要实现。它们分别如下 - Jersey RESTEasy 如下图示 - RESTful JAX-RS示例(Jersey) https://www.xnip.cn/web_service/jax-rs-example-jersey.html JAX-WS注释示例 ht

  • 问题内容: 我有办法 现在我知道我可以将一个对象以json格式发布,只需将其放入正文即可。但是可以做多个对象吗?如果是这样,怎么办? 问题答案: 答案是否定的。 原因很简单:这与您可以在方法中接收的参数有关。它们必须与请求相关。对?因此,它们必须是标题或cookie或查询参数或矩阵参数或路径参数或请求正文。(仅是为了讲述完整的故事,还有其他类型的参数称为上下文)。 现在,当您在请求中收到JSON对