サリュー、HttpServletRequest.getRemoteAddr()の実装は、私は、WebLogic Webサービスの実装に新しいですJAX-RPC
を使用して9.2.3。 JAX-RPCを使用してSOAPメッセージからクライアントのリモートアドレスを取得しようとしています。 SOAPメッセージヘッダからクライアントのリモートIPを取得する必要があります。 BEA/Oracleのドキュメントに従って多くのソリューションを試してみました。 のWebService Javaファイル:最後の一
@WebService
public class clientsIPWs {
@Control
private SoapMessageControl smc;
@WebMethod
@WebResult(name="return")
public String getClientAddress() {
return smc.getRemoteAddress();
}
}
SoapMessageControl.java
@ControlInterface
public interface SoapMessageControl {
public String getRemoteAddress();
}
SoapMessageControlImpl.java
@ControlImplementation
public class SoapMessageControlImpl implements SoapMessageControl, Serializable {
private static final long serialVersionUID = 1L;
@Context
private SOAPMessageContext smc;
@WebMethod()
public String getRemoteAddress() {
HttpServletRequest request =
(HttpServletRequest) smc.getProperty("transport.http.servletRequest");
return request.getRemoteAddr();
}
}
は(この1つはあるのMessageContext/WebServiceContextのような@Contextで多くのバリエーションを試してみました非推奨)、テストのたびにそのような例外が発生しました:
はサービスにcontrols.SoapMessageControlBean.getRemoteAddressでcontrols.SoapMessageControlImpl.getRemoteAddressにおける方法 java.lang.NullPointerExceptionが(SoapMessageControlImpl.java:33) (SoapMessageControlBean.java:119) を起動に失敗しましたエンドコンポーネントを呼び出すことができませんでしたsun.reflect.DelegatingMethodAccessorImpl.invokeでsun.reflect.NativeMethodAccessorImpl.invokeでsun.reflect.NativeMethodAccessorImpl.invoke0(ネイティブメソッド) (NativeMethodAccessorImpl.java:39) (AT .CustProdWs.getClientAddress(CustProdWs.java:63) DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:585) at weblogic.wsee.component.pojo.JavaClassComponent.invoke(JavaClassComponent.java:99) at weblogic.wsee.ws.dispatch.server.ComponentHandler.handleRequest(ComponentHandler.java:64) at weblogic.wsee.handler。 HandlerIterator.handleRequest(HandlerIterator.java:127) weblogic.wsee.ws.dispatch.server.ServerDispatcher.dispatch(ServerDispatcher.java:85) weblogic.wsee.ws.WsSkel.invoke(WsSkel.java:80) weblogic.wsee.server.servlet.SoapProcessor.handlePost(SoapProcessor.java:66) weblogic.wsee.server.servlet.SoapProcessor.process(SoapProcessor.java:44) weblogic.wsee.server.servletで。 BaseWSServlet $ AuthorizedInvoke.run(BaseWSServlet.java:181) weblogic.wsee.server.servlet.BaseWSServlet.service(BaseWSServlet.java :weblogic.servlet.internal.StubSecurityHelper $ ServletServiceAction.runでjavax.servlet.http.HttpServlet.service(HttpServlet.java:856) で92) (weblogic.servlet.internal.StubSecurityHelperでStubSecurityHelper.java:227) weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) でweblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) で.invokeServlet(StubSecurityHelper.java:125) でweblogic.servlet WebAppServletContext $ ServletInvocationAction.run(WebAppServletContext.java:3244) :121)weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImplでweblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1916) でweblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2010) で0。 java:1366) weblogic.work.ExecuteThread.execute(ExecuteThread。Javaの:グーグルでweblogic.work.ExecuteThread.runで209) (ExecuteThread.java:181)
ほぼすべてのソリューションは、この枠組みの中で私のためには使用できませんJAX-WSを使用しています。おかげさまで