2016-05-10 6 views
0

で働いていない私は、クライアントのIPアドレスとポートを取得しようとしているが、私は、コードを展開するとき、それは私に次のような出力が得られます。を注入発信者のIPアドレスとポートは、JavaジャージーRESTfulなWebサービス

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) 

これは私のRESTサーバーのコードです

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(); 
    ... 
} 

@Context HttpServletRequestリクエストを削除すると、それは完全に動作します。

答えて

2

あなたはパラメータに@Contextを渡す必要はありません。..

ここに私のインターフェイスです:

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

はここに私のクラスです:

@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

私はすでに正確な輸入品を持っています。私はそれを私の質問に追加します –

+0

私はjavax.xml.ws.spi.http.HttpContextを参照します –

+0

私はあなたが何を意味しているのか知っています。輸入は間違っていましたが、今すぐ取り戻しましたが、輸入品は良いです(私は質問を編集しました)が、どちらも動作していません –

0

[OK]を、私はそれを考え出しました:

@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(); 
    ... 
} 

ty私はcom.sun.jersey.api.core.HttpContextを使いました。代わりに。

+0

大丈夫でしたので、私も輸入品と一緒でした:D –

関連する問題