2011-06-21 50 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應用程序,它有時會產生副作用。