2008-11-04 39 views

Trả lời

40

Ngữ cảnh servlet được JAX-WS cung cấp thông qua ngữ cảnh tin nhắn, có thể được truy xuất bằng ngữ cảnh dịch vụ web. Chèn các thành viên sau đây sẽ gây JAX-WS để tiêm một tham chiếu đến bối cảnh dịch vụ web vào dịch vụ web của bạn:

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

... 

@Resource 
private WebServiceContext context; 

Sau đó, bạn có thể truy cập vào bối cảnh servlet sử dụng:

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

Nếu bạn đang cố gắng này trên một chồng JBoss EAP, và bạn bắt đầu bằng cách tạo một dự án Seam bằng cách sử dụng New Project Wizard trong JBoss Developer Studio, bạn kết thúc với một tệp commons-annotations.jar trong WEB-INF/lib của bạn (có chứa, trong số những người khác, chú thích @Resource). Kết quả cuối cùng là WebServiceContext của bạn không nhận được đầy, và bạn nhận được một NullPointerException. Đối với chúng tôi, giải pháp đơn giản là xóa commons-annotations.jar, để đảm bảo rằng phiên bản JBoss đi kèm đã được sử dụng. Sau đó, mọi thứ đã đi bơi. Cảm ơn câu trả lời tuyệt vời, một phao cứu sinh thực sự! –

+1

Đã lưu ngày của tôi, nhưng thiếu hàng nhập khẩu mà @pihentagy đã đăng. –

+0

Có bất kỳ tài nguyên tiêm nào khác ngoài ngữ cảnh dịch vụ web không? –

0

Nếu bạn sử dụng Maven thêm phụ thuộc này !!!

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

Vì vậy, tôi giải quyết cho lỗi xung đột tránh cho get ServletContext INFO :

Và trong phương pháp lớp tôi sử dụng

@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()); 
Các vấn đề liên quan