2011-06-21 19 views
0

我已经有了一个使用JAX-RS和Jersey的REST风格Web服务的开始,它公开了两个资源:SessionResource和ItemResource。不幸的是,其中只有一个被Web服务公开。JAX-RS和泽西岛 - 只有一个多重暴露的资源

详细说明:

  • 配置完成瓦特/延伸javax.ws.rs.core.Application(由Netbeans的7自动创建的)的一类。该类不包含除@ApplicationPath()注释之外的任何配置信息。
  • 没有web.xml文件

问题:

  • 我缺少什么?
  • 有价值,有一个应用程序类?我可以离开瓦特/只是一个web.xml文件的配置?
  • 有时我已经注意到在IDE中进行的更改未发布到apache。最可靠的方法是什么?

回答

0

您可以在web.xml中执行此操作,然后您不需要Application类。

<servlet> 
    <servlet-name>JerseyStartup</servlet-name> 
    <servlet-class>[fully qualified name of a class that extends ServletContainer]</servlet-class> 
    <init-param> 
    <param-name>com.sun.jersey.config.property.packages</param-name> 
    <param-value>com.yourCompany</param-value> 
    </init-param> 
</servlet> 

然后,它会自动检测com.yourCompany所有类及其子包,这些注释与@Path,并把它们当作资源。

+0

整个web.xml类似于什么?我已经看过示例w/servlets,但是我还没有找到泽西岛应用程序的例子(假设这是正确的术语)。 – craig

+0

我可以在Application类中添加web.xml吗?如果没有,是否有另一个位置来设置主文档? – craig

+0

我更新了问题。然后,将该servlet映射到特定的URL模式。我没有使用应用程序类,所以我不知道你的第二个问题。 – MatrixFrog

1

多种解决方案之一是覆盖您的JAX-RS应用程序的getClasses()

@ApplicationPath("/") 
public class MyApplication extends Application 
{ 
    @Override 
    public Set<Class<?>> getClasses() 
    { 
     return new HashSet<Class<?>>() 
     { 
      { 
       add(ResourceA.class); 
       add(ResourceB.class); 
      } 
     }; 
    } 
} 

据我所知,最好不要依靠自动检测资源和提供者。如果您有多个JAX-RS应用程序,它有时会产生副作用。