2008-11-04 9 views

Respuesta

40

JAX-WS pone a disposición el contexto del servlet a través del contexto del mensaje, que se puede recuperar utilizando el contexto del servicio web. Insertar el elemento siguiente hará que JAX-WS para inyectar una referencia al contexto de servicio web en su servicio web:

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

... 

@Resource 
private WebServiceContext context; 

A continuación, se puede acceder al contexto de servlet usando:

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

Si está tratando de esto en una pila de JBoss EAP, y se empieza al crear un proyecto Seam utilizando el Asistente de proyecto nuevo en JBoss Developer Studio, se termina con un archivo commons-annotations.jar en su WEB-INF/lib (que contiene, entre otros, la anotación @Resource). El resultado final es que su WebServiceContext no se llena y obtiene una NullPointerException. Para nosotros, la solución fue simplemente eliminar commons-annotations.jar, para asegurarnos de que se utilizara la versión incluida con JBoss. Después de eso, las cosas fueron estupendamente. Gracias por la gran respuesta, ¡un verdadero salvavidas! –

+1

Me salvó el día, pero carece de las importaciones que @pihentagy ha publicado. –

+0

¿Hay otros recursos inyectables que no sean el contexto del servicio web? –

0

Si utiliza ¡Maven agrega esta dependencia!

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

Así que resolverse para evitar el error de conflicto para conseguir ServletContext INFO :

Y en el método de clase I utilizan

@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()); 
Cuestiones relacionadas