2008-11-04 36 views

回答

40

JAX-WS通过消息上下文使servlet上下文可用,该上下文可以使用Web服务上下文进行检索。插入下面的成员会导致JAX-WS注入到web服务上下文的引用到Web服务:

import javax.annotation.Resource; 
import javax.servlet.ServletContext; 
import javax.xml.ws.WebServiceContext; 
import javax.xml.ws.handler.MessageContext; 

... 

@Resource 
private WebServiceContext context; 

然后,您可以通过访问servlet上下文:

ServletContext servletContext = 
    (ServletContext) context.getMessageContext().get(MessageContext.SERVLET_CONTEXT); 
+5

如果你想这在JBoss EAP栈上,你开始通过使用JBoss Developer Studio中的新建项目向导创建一个Seam项目,最终在WEB-INF/lib中包含commons-annotations.jar文件(其中包含@Resource注释)。最终的结果是你的WebServiceContext没有被填充,并且你得到一个NullPointerException。对我们来说,解决方案只是删除commons-annotations.jar,以确保使用了包含JBoss的版本。之后,事情就顺利进行了。感谢伟大的答案,一个真正的救星! – 2010-09-24 17:15:58

0

如果使用Maven添加这个依赖项!!!

 <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>servlet-api</artifactId> 
      <version>2.4</version> 
      <scope>provided</scope> 
     </dependency> 

所以我解决了避免冲突错误GET ServletContext的 INFO :

,并在类的方法我用

@WebService(endpointInterface = "choice.HelloWorld") 
public class HelloWorldImpl implements HelloWorld { 
    @Resource 
    private WebServiceContext context; 
    public String sayHi(String text) { 
     HttpServletRequest request =(HttpServletRequest) context.getMessageContext().get(MessageContext.SERVLET_REQUEST); 
     System.out.println(request.getContextPath());