2016-05-10 15 views
1

Ich möchte ein Jersey-Projekt B (das bereits gut funktioniert) in ein neues Jersey-Projekt A integrieren/hinzufügen, das als Filter/Sicherheitsschicht dienen würde. Als einen grundlegenden Schritt fügte ich dem Projekt B im Build-Pfad von Project A eine Abhängigkeit hinzu und fügte diese auch dem Deployment Assembly im Build-Pfad hinzu. Ich verstehe von this Post, dass ich dies tun könnte, indem Sie die Servlets in der gleichen web.xml und Zuordnung sie anders unter Verwendung <servlet-mapping>. Ich hatte kein Glück, als ich versuchte, die Ressource des Projekts B.Hinzufügen mehrerer Servlets zu einer web.xml

web.xml

<servlet> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value>org.abc.def.ba, org.pqr.xyz</param-value> 
    </init-param> 
    <init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value>org.abc.def.ba.CustomApplication</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

<servlet-mapping> 
    <servlet-name>Jersey Web Application</servlet-name> 
    <url-pattern>/webapi/*</url-pattern> 
</servlet-mapping> 

<!-- The Servlet of Project B --> 
<servlet> 
    <servlet-name>Jersey Web Application 2</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-  class> 

<init-param> 
     <param-name>javax.ws.rs.Application</param-name> 
     <param-value> org.pqr.xyz.MyApplication</param-value> 
    </init-param> 

    <!-- Register resources and providers under my.package. --> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> org.pqr.xyz</param-value> 
    </init-param> 

    <!-- Register my custom provider (not needed if it's in my.package) AND LoggingFilter. --> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value> org.pqr.xyz.mapper.ObjectMapperProvider</param-value> 
    </init-param> 

    <init-param> 
     <param-name>com.sun.jersey.api.json.POJOMappingFeature</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.config.property.packages</param-name> 
     <param-value> org.pqr.xyzr</param-value> 
    </init-param> 
    <init-param> 
     <param-name>com.sun.jersey.spi.container.ResourceFilters</param-name> 
     <param-value>com.porterhead.rest.filter.ResourceFilterFactory</param-value> 
    </init-param> 
    <init-param> 
     <param-name>readOnly</param-name> 
     <param-value>false</param-value> 
    </init-param> 
    <load-on-startup>2</load-on-startup> 
</servlet> 
<servlet-mapping> 
    <servlet-name>Jersey Web Application 2</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

Also zugreifen, wenn ich versuche, http://localhost:8080/ba/webapi/myresource zugreifen, es funktioniert gut. Aber wenn ich versuche, bekomme ich einen 404 Fehler. Ich weiß, dass ich etwas verpasse. Ich schätze Ihre Anleitung dazu.

Antwort

0

Wenn Sie Servlet 3.0 verwenden, können Sie mit @ApplicationPath Annotation verschiedene Anwendungspfade für verschiedene Ressourcen verwenden. Falls Sie die Anmerkung nicht verwenden möchten, können Sie das gleiche mit web.xml wie unten

<web-app> 
<servlet> 
    <servlet-name>org.foo.rest.MyApplication</servlet-name> 
</servlet> 
... 
<servlet-mapping> 
    <servlet-name>org.foo.rest.MyApplication</servlet-name> 
    <url-pattern>/resources</url-pattern> 
</servlet-mapping> 
... 

Details erreichen Sie Jersey documentation für Bereitstellungsoptionen beziehen.

+0

Ich mache das gleiche, bitte beziehen Sie sich auf meinen Code. Und um hinzuzufügen, wenn ich versuche, den Tomcat-Server zu erstellen und auszuführen, bekomme ich die 'java.lang.ClassNotFoundException: org.pqr.xyzr.MyApplication'. Hast du eine Ahnung, warum? – vardhinisuresh27

+0

In Ihrer web.xml ist das zweite Projekt kommentiert. Können Sie die neueste Version Ihrer web.xml hochladen? – ron

+0

Es ist nicht kommentiert, es ist wegen der Verwendung von "/ *", das den folgenden Code inturn kommentiert. Der angegebene Code ist die aktuelle web.xml. Vielen Dank! – vardhinisuresh27