0

I am building restful application for selecting data from mysql using maven. I am quite confuse with POM configuration which looks like below:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.tutorialacademy.rest</groupId>
 <artifactId>helloworld</artifactId>
 <packaging>war</packaging>
 <version>0.0.1-SNAPSHOT</version>
 <name>helloworld Maven Webapp</name>
 <url>http://maven.apache.org</url>

 <properties>
  <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
 </properties>

 <repositories>
  <repository>
   <id>maven2-repository.java.net</id>
   <name>Java.net Repository for Maven</name>
   <url>http://download.java.net/maven/2/</url>
   <layout>default</layout>
  </repository>
 </repositories>

 <dependencies>
  <dependency>
   <groupId>junit</groupId>
   <artifactId>junit</artifactId>
   <version>3.8.1</version>
   <scope>test</scope>
  </dependency>
  <dependency>
   <groupId>com.sun.jersey</groupId>
   <artifactId>jersey-server</artifactId>
   <version>1.9</version>
  </dependency>
  <dependency>
   <groupId>org.apache.httpcomponents</groupId>
   <artifactId>httpclient</artifactId>
   <version>4.3.3</version>
  </dependency>
  <dependency>
   <groupId>com.googlecode.json-simple</groupId>
   <artifactId>json-simple</artifactId>
   <version>1.1</version>
  </dependency>
  <dependency>
   <groupId>org.json</groupId>
   <artifactId>json</artifactId>
   <version>20080701</version>
  </dependency>
  <dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>3.0.1</version>
   <scope>provided</scope>
  </dependency>
  <dependency>
   <groupId>com.google.code.gson</groupId>
   <artifactId>gson</artifactId>
   <version>2.6.2</version>
   <scope>provided</scope>
  </dependency>
 </dependencies>

 <build>
  <sourceDirectory>src/main/java</sourceDirectory>

  <plugins>

   <plugin>
    <artifactId>maven-war-plugin</artifactId>
    <version>2.4</version>
    <configuration>
     <warSourceDirectory>WebContent</warSourceDirectory>
     <failOnMissingWebXml>false</failOnMissingWebXml>
    </configuration>
   </plugin>

   <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
     <source>1.8</source>
     <target>1.8</target>
    </configuration>
   </plugin>

  </plugins>

 </build>

</project>

While I am multiple packages shown as below:

enter image description here

Question is that do I need add another groupid and artifactid for every packages. When I visit path http://localhost:8080/helloworld/rest/exportfile/json which is coded as @path under the class of com.tutorialacademy.rest packages it does work:

But when I visit path http://localhost:8080/helloworld/rest/helloService/hello/ which under webService package. This gives me error:

The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

My web.xml is as below:

<servlet>
    <servlet-name>helloworld</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.tutorialacademy.rest</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/rest/*</url-pattern>
</servlet-mapping>
Shrestha Sunil
  • 329
  • 4
  • 13
  • 28

1 Answers1

1
<init-param>
    <param-name>com.sun.jersey.config.property.packages</param-name>
    <param-value>com.tutorialacademy.rest</param-value>
</init-param>

The param-value lists the packages that should be scanned for classes annotated with @Path, so that Jersey can register those classes. You only have the one package listed that you said works. You can add more than on package delimited by a comma

<param-value>
    com.tutorialacademy.rest,
    webService
</param-value>

Though it is common practice to have a top level package for your project. For example

com.foo
com.foo.dao
com.foo.model
com.foo.resources

The packages that you list in the param-value are scanned recursively. So you could just use com.foo in this case, and all then sub-packages would get scanned also.

Paul Samsotha
  • 205,037
  • 37
  • 486
  • 720