为什么MessageContext中的HttpServletRequest为null?

时间:2015-11-19 13:24:52

标签: java spring web-services java-ee jax-ws

我正在尝试获取JAX-WS SOAP Web服务的客户端的IP地址(感谢另一种解决方案)。

我正在使用以下代码,它适用于另一个项目,但是当我从javax.xml.ws获取它时,这个项目(与Spring 3.2.4集成)返回null HttpServletRequest WebServiceContext (WebServiceContext 非空):

@Resource
WebServiceContext wsContext;

private String getRemoteIpAddress()
{
   MessageContext context = this.wsContext.getMessageContext();
   HttpServletRequest httpRequest = (HttpServletRequest) context.get(MessageContext.SERVLET_REQUEST);
   String remoteIpAddress = httpRequest.getRemoteAddr();

为了进一步说明,这个Web Service类看起来像:

@WebService(name = "PService", targetNamespace = "http://server.ps/")
@SOAPBinding(parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class PSystemServiceEndpoint extends SpringBeanAutowiringSupport

需要注意的是,该应用程序作为独立Java应用程序运行,并包含 Jetty Embeeded Server

1 个答案:

答案 0 :(得分:0)

我也使用Spring WS,当我需要从远程客户端获取IP时,我使用此函数

Mail::send('emails.support', $request->all(), function($message) use ($data)

正如您所看到的,我不使用private String getIpRequest(){ String result = "none"; TransportContext context = TransportContextHolder.getTransportContext(); if(context != null){ HttpServletConnection connection = (HttpServletConnection)context.getConnection(); if(connection != null){ HttpServletRequest request = connection.getHttpServletRequest(); if(request != null){ result = request.getRemoteAddr(); } } } return result; } ,而是使用WebServiceContext,因此我不确定此代码是否适合您,但我希望它有所帮助。