2016-05-15 4 views
0

Ich habe einen Webservice mit Trikot. Ich möchte auf eine Hashmap zugreifen, die in einem Servlet aus dem Rest Service erstellt wird. Das hashmap in Servlet sholud wird nur einmal während des Anwendungsstarts erstellt. dies web.xmlWie Servlet von Rest Web Service mit Jersey

<?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>GrpService_Map</display-name> 
    <welcome-file-list> 
    <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
<servlet> 
    <servlet-name>jersey-serlvet</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.ericsson.mapService</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>jersey-serlvet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

Service-Klasse Testservice innerhalb com.ericsson.mapService Paket .My Frage ist, wo ich die erforderliche Servlet platzieren, der die hashmap erstellt und wie werde ich die Karte zugreifen Testservice? Das ist meine Serviceklasse TestService.java

@Path("/Service") 
public class TestService { 
    @GET 
    @Consumes("application/xml") 
    @Produces(MediaType.TEXT_PLAIN) 
    @Path("/cacheserviceTestMap") 
    public String createGroupCache(@Context HttpServletRequest request) 
      throws IOException { 

     //here i want to access the IndexMap hashmap 
     return "Success"; 
    } 
} 

Das ist meine Servlet-Klasse ist

public class TestSerlvet extends HttpServlet{ 
    protected void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException 
     { 
Map<String, Map<String,List<String>>> IndexMap = new HashMap<String, Map<String,List<String>>>(); 
     Map<String,List<String>> signumMap = new HashMap<String,List<String>>(); 
     List<String> grp = new ArrayList<String>(); 
     grp.add("1"); 
     grp.add("2"); 
     signumMap.put("eab", grp); 
     signumMap.put("eabc",grp); 
     signumMap.put("exy",grp); 
     IndexMap.put("I", signumMap); 
} 
} 

Danke

+0

Bitte posten Sie 'TestService.java', Ihr Servlet und die Stelle im Servicecode, der fehlschlägt oder versucht, auf das Servlet' HashMap' zuzugreifen. –

+1

geschrieben Service-Klasse und Servlet und von wo ich auf die hashmap zugreifen möchte –

Antwort

0

Das Servlet sollte (und abgebildet) in web.xml mit load-on-startup auf einen initialisiert werden niedrigerer Wert als jersey-servlet, damit er beim Start des Containers geladen wird, bevor ein REST-Aufruf bearbeitet werden kann. Die lokale Variable des Servlets doGet Methode IndexMap sollte in ein statisches Feld des Servlets umgewandelt werden, auf das öffentlich zugegriffen werden kann. Die Initialisierung dieses Feldes sollte in der init() Methode des Servlets erfolgen, um sicherzustellen, dass die HashMap initialisiert wird, bevor ein REST-Endpunkt darauf zugreifen kann.

Sobald das obige getan ist, TestService.createGroupCache() sollte in der Lage sein, die bereits initialisierte HashMap durch den Aufruf der statischen Getter-Methode des Servlet lesen.

+0

Vielen Dank für Ihre Antwort.Aber ich bekomme nicht die erforderlichen Änderungen in web.xml –

Verwandte Themen