2016-05-10 5 views
0

Ich versuche, IP-Adresse und Port eines Client zu bekommen, aber wenn ich den Code bereitstellen es gibt mir die folgende Ausgabe:Inject Anrufer IP-Adresse und Port nicht in Java Jersey RESTful Web-Service arbeiten

May 10, 2016 2:50:56 PM com.sun.jersey.spi.inject.Errors processErrorMessages 
SEVERE: The following errors and warnings have been detected with resource and/or provider classes: 
SEVERE: Missing dependency for method public javax.ws.rs.core.Response resources.Login.loginUser(java.lang.String,javax.servlet.http.HttpServletRequest) at parameter at index 1 
SEVERE: Method, public javax.ws.rs.core.Response resources.Login.loginUser(java.lang.String,javax.servlet.http.HttpServletRequest), annotated with POST of resource, class resources.Login, is not recognized as valid resource method. 
Exception in thread "main" com.sun.jersey.spi.inject.Errors$ErrorMessagesException 
at com.sun.jersey.spi.inject.Errors.processErrorMessages(Errors.java:170) 
at com.sun.jersey.spi.inject.Errors.postProcess(Errors.java:136) 
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:199) 
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:773) 
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:172) 
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:264) 
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:246) 
at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:117) 
at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:92) 
at gateway.GatewayRestServer.main(GatewayRestServer.java:30) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:606) 
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:144) 

Dies ist der Code in meinem REST-Server

import javax.servlet.http.HttpServletRequest; 
import javax.ws.rs.*; 
import javax.ws.rs.core.Context; 
import javax.ws.rs.core.MediaType; 
import javax.ws.rs.core.Response; 

... 

@POST 
@Path("/post") 
@Consumes(MediaType.TEXT_PLAIN) 
public Response loginUser(String username, @Context HttpServletRequest request) { 
    Loog.i(this, "Login di " + username); 
    String netIP = request.getRemoteAddr(); 
    int netPort = request.getRemotePort(); 
    ... 
} 

Wenn ich @Context HttpServletRequest Anfrage entfernen, funktioniert es einwandfrei.

Antwort

2

Sie brauchen nicht die @context in Parameter zu übergeben ..

hier ist meine Schnittstelle:

@POST 
@Path("/lookup") 
@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
List<Client> searchClient(Criterias cr); 

hier ist meine Klasse:

@Stateless 
public class XServiceImpl implements XService { 

    @Context 
    private HttpServletRequest request; 

    @Override 
    @Public 
    public List<Client> searchClient(Criterias cr) { 

     try { 
      List<Client> baux = null; 
      String lang = RequestContext.getLocale(request).getLanguage(); 
      cr.setLang(lang); 

     } catch (SQLException e) { 
      LOGGER.log(Level.SEVERE, e.getLocalizedMessage()); 
      throw new ServiceException(); 
     } finally { 
      reqInfo.logExecutionTime(); 
     } 

    } 
+0

Ich habe bereits diese genauen Importe .. Ich werde es zu meiner Frage hinzufügen –

+0

Ich sehe javax.xml.ws.spi.http.HttpContext –

+0

Ich weiß, was du meinst, ich habe nicht bemerkt, dass in der Ausgabe der Importe waren falsch, aber jetzt ran ich es und in der Ausgabe sind die Importe gut (Ich habe die Frage bearbeitet), aber es funktioniert auch nicht –

0

Ok ich es herausgefunden:

@Context 
private HttpContext request; 

@POST 
@Consumes(MediaType.TEXT_PLAIN) 
public Response loginUser(String username) { 

    String netIP = request.getRequest().getRequestUri().getHost().toString(); 
    int netPort = request.getRequest().getRequestUri().getPort(); 
    ... 
} 

Die ty pe für das injizierte Objekt war falsch, ich habe com.sun.jersey.api.core.HttpContext; stattdessen.

+0

ok also ich hatte recht mit den Importen auch: D –