【发布时间】:2017-04-28 11:52:56
【问题描述】:
敬礼,
我是 Weblogic WebService 实现的新手。尝试使用 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();
}
}
在最后一个尝试使用@Context 的许多变体,例如 MessageContext / WebServiceContext(这个已弃用),但每次测试都收到这样的异常:
调用端组件失败 调用方法失败 java.lang.NullPointerException 在controls.SoapMessageControlImpl.getRemoteAddress(SoapMessageControlImpl.java:33) 在 control.SoapMessageControlBean.getRemoteAddress(SoapMessageControlBean.java:119) 在 services.CustProdWs.getClientAddress(CustProdWs.java:63) 在 sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 在 sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 在 java.lang.reflect.Method.invoke(Method.java:585) 在 weblogic.wsee.component.pojo.JavaClassComponent.invoke(JavaClassComponent.java:99) 在 weblogic.wsee.ws.dispatch.server.ComponentHandler.handleRequest(ComponentHandler.java:64) 在 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:92) 在 javax.servlet.http.HttpServlet.service(HttpServlet.java:856) 在 weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227) 在 weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) 在 weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) 在 weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:175) 在 weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3244) 在 weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) 在 weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) 在 weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2010) 在 weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1916) 在 weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1366) 在 weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) 在 weblogic.work.ExecuteThread.run(ExecuteThread.java:181)
在 google 中,几乎每个解决方案都使用在此框架中对我不可用的 JAX-WS。 谢谢。
【问题讨论】:
标签: java web-services servlets jax-rpc weblogic9.x