Java get(MessageContext.SERVLET_请求)在Jetty上返回null?

Java get(MessageContext.SERVLET_请求)在Jetty上返回null?,java,soap,jetty,jax-ws,Java,Soap,Jetty,Jax Ws,我有一个分机。我在Jetty服务器上运行了完全相同的代码,而其他SOAP web服务工作得非常好。然而,在这方面: HttpServletRequest req = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST); System.out.println("Client IP = " + req.getRemoteAddr()); 服务器崩溃,出现空指针异常。mc.getMessageContext.SERVLET_请求返

我有一个分机。我在Jetty服务器上运行了完全相同的代码,而其他SOAP web服务工作得非常好。然而,在这方面:

HttpServletRequest req = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST); 
System.out.println("Client IP = " + req.getRemoteAddr()); 
服务器崩溃,出现空指针异常。mc.getMessageContext.SERVLET_请求返回null

相比之下,mc.getMessageContext.HTTP_REQUEST_方法返回POST,所以我认为这是可行的

我能做些什么来解决这个问题

编辑: 我试过修理,但没用

我也尝试过使用@Context注释,但也遇到了同样的问题

System.out.printlnmc产生以下结果:

{javax.xml.ws.wsdl.port={http://my.test.namespace.com/}testWSDLPort,
 javax.xml.ws.soap.http.soapaction.uri="", 
 com.sun.xml.internal.ws.server.OneWayOperation=null, 
 javax.xml.ws.http.request.pathinfo=null, 
 ...
 ...

以此类推,值列表不包括javax.xml.ws.servlet.request,它是MessageContext.servlet\u请求的值。我需要做什么来确保MessageContext具有此值?

目前,Jetty HTTP SPI JAX-WS实现似乎没有将MessageContext正确地注入到web服务中。尝试切换到apachecxf。一旦你

cxf-2.6.2.jar neethi-3.0.2.jar xmlschema-core-2.0.3.jar 在项目构建路径上,必须创建一个servlet类,该类扩展CXFNonSpringServlet并覆盖loadBus函数,如下所示:

public class SOAPServlet extends CXFNonSpringServlet {

    private static final long serialVersionUID = 1L;
    private Map<String, Object> endpoints;


    public SOAPServlet(){
        endpoints = new HashMap<String, Object>();
    }

    @Override
    public void loadBus(ServletConfig servletConfig) {
        super.loadBus(servletConfig);        

        // You could add the endpoint publish codes here
        Bus bus = getBus();
        BusFactory.setDefaultBus(bus);
        Set s = endpoints.entrySet();
        Iterator p = s.iterator();
        while(p.hasNext()){
            Map.Entry m = (Map.Entry)p.next();
            String address = (String)m.getKey();
            Object impl = (Object)m.getValue();
            System.out.println("Publishing " + address);
            Endpoint.publish(address, impl);
        }
    }
    public void publish(String address, Object impl){
        endpoints.put(address, impl);
    }
}

目前,Jetty HTTP SPI JAX-WS实现似乎没有将MessageContext正确地注入到web服务中。尝试切换到apachecxf。一旦你

cxf-2.6.2.jar neethi-3.0.2.jar xmlschema-core-2.0.3.jar 在项目构建路径上,必须创建一个servlet类,该类扩展CXFNonSpringServlet并覆盖loadBus函数,如下所示:

public class SOAPServlet extends CXFNonSpringServlet {

    private static final long serialVersionUID = 1L;
    private Map<String, Object> endpoints;


    public SOAPServlet(){
        endpoints = new HashMap<String, Object>();
    }

    @Override
    public void loadBus(ServletConfig servletConfig) {
        super.loadBus(servletConfig);        

        // You could add the endpoint publish codes here
        Bus bus = getBus();
        BusFactory.setDefaultBus(bus);
        Set s = endpoints.entrySet();
        Iterator p = s.iterator();
        while(p.hasNext()){
            Map.Entry m = (Map.Entry)p.next();
            String address = (String)m.getKey();
            Object impl = (Object)m.getValue();
            System.out.println("Publishing " + address);
            Endpoint.publish(address, impl);
        }
    }
    public void publish(String address, Object impl){
        endpoints.put(address, impl);
    }
}

我遇到了同样的问题-我没有像那样检索SERVLET_请求并获取null,而是使用了以下方法:

com.sun.net.httpserver.HttpExchange server = (com.sun.net.httpserver.HttpExchange)     mc.get("com.sun.xml.internal.ws.http.exchange");
System.out.println("Client IP = " + server.getRemoteAddress().toString());

这允许检索IP地址、端口等。

我遇到了同样的问题-我没有像那样检索SERVLET_请求并获取空值,而是使用了以下方法:

com.sun.net.httpserver.HttpExchange server = (com.sun.net.httpserver.HttpExchange)     mc.get("com.sun.xml.internal.ws.http.exchange");
System.out.println("Client IP = " + server.getRemoteAddress().toString());

这允许检索IP地址、端口等。

不幸的是,我不再有权访问此代码,或者我将进行测试,希望这对某人有所帮助。不幸的是,我不再有权访问此代码,或者我将进行测试,希望这对某人有所帮助。