17

How do I specify multiple <param-value> for a given <param-name> under servlet's <init-param> tag. Following is my web.xml file:

<?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> 

The parameter jersey.config.server.provider.packages defines in which package Jersey will look for the web service classes.

I want to specify multiple package names here, as my service classes are in different packages. Something like following, but none of them works:

1) Multiple <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) Multiple <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>

How do I do this?

BalusC
  • 1,082,665
  • 372
  • 3,610
  • 3,555
Learner
  • 1,503
  • 6
  • 23
  • 44

3 Answers3

27

You can't specify multiple <param-value> for a single <param-name>.

Use this instead:

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

; and , can be used as a separators.

lealceldeiro
  • 14,342
  • 6
  • 49
  • 80
Ramanlfc
  • 8,283
  • 1
  • 18
  • 24
1

Credit to Ramanlfc's answer, you can use "," as package separator too. For example:

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

Tested under Ubuntu 16.04.2, tomcat-8.5.11

Jonathan L
  • 9,552
  • 4
  • 49
  • 38
0

There are several ways for you to specify multiple package names for service classes in REST web service using Jersey. In addition to the answer that mentioned by Ramanlfc, \n also works.

<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>
Winbert
  • 179
  • 9