2016-05-15 9 views
8

Wie gebe ich mehrere <param-value> für eine gegebene <param-name> unter Servlet <init-param>-Tag. Folgende ist meine web.xml-Datei:Wie Sie mehrere Paketnamen für Serviceklassen im REST-Web-Service unter Verwendung von Jersey angeben

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>com.vogella.jersey.first</display-name> 
<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <!-- Register resources and providers under com.vogella.jersey.first package. --> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.first</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Der Parameter jersey.config.server.provider.packages in dem Paket Jersey für die Web-Service-Klassen aussehen wird definiert.

Ich möchte hier mehrere Paketnamen angeben, da sich meine Serviceklassen in verschiedenen Paketen befinden. So etwas wie folgt, aber keiner von ihnen arbeitet:

1) Mehr <param-value>

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.vogella.jersey.first</param-value> 
    <param-value>com.vogella.jersey.second</param-value> 
</init-param> 

2) Mehrere <init-param>

<servlet> 
    ... 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.first</param-value> 
    </init-param> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>com.vogella.jersey.second</param-value> 
    </init-param> 

Wie kann ich das tun?

+0

FYI, das Scannen ist rekursiv. "com.vogella.jersey" scannt beide oben genannten Pakete –

Antwort

14

Sie können nicht mehrere <param-value> für eine einzelne <param-name> angeben.

Verwendung dieses stattdessen:

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.pack.first;com.pack.rest.second</param-value> 
</init-param> 

;, , als seperators verwendet werden.

+0

+1 Perfekt, danke. Könntest du mir bitte vorschlagen, welche Tutorials ich folgen/lesen kann, um mehr Details zu erhalten? Wäre dies unter Servlet Tutorials abgedeckt? – Learner

+0

@Learner Der beste Ort ist [die Jersey-Dokumentation] (https://jersey.java.net/documentation/latest/index.html) –

+0

@Learner https://www.youtube.com/user/koushks/playlists, dort sind 2 ausgezeichnete Wiedergabelisten hier für jax-rs. – Ramanlfc

1

Dank Ramanlfcs Antwort können Sie auch "," als Paketseparator verwenden. Zum Beispiel:

<init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>com.pkg.first,com.pkg.second</param-value> 
</init-param> 

unter Ubuntu 16.04.2 getestet, tomcat-8.5.11

0

Es gibt mehr Möglichkeiten für Sie mehrere Paketnamen für Serviceklassen in REST Web-Service mit Jersey angeben. Zusätzlich zu der Antwort, die von Ramanlfc erwähnt wurde, funktioniert auch \n.

<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.demo1.resources 
      com.demo2.resources 
     </param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping>