2008-11-04 17 views
37

मैं अपने सर्वलेट्स और मेरी webservice (JAX-WS) के बीच एक ऑब्जेक्ट को एक सर्वलेट संदर्भ विशेषता के रूप में संग्रहीत करके साझा करना चाहता हूं। लेकिन मैं वेब सेवा से सर्वलेट संदर्भ कैसे प्राप्त कर सकता हूं?मैं JAX-WS वेब सेवा के भीतर से ServletContext तक कैसे पहुंच सकता हूं?

उत्तर

40

सर्वलेट संदर्भ संदेश संदर्भ के माध्यम से जेएक्स-डब्ल्यूएस द्वारा उपलब्ध कराया गया है, जिसे वेब सेवा संदर्भ का उपयोग करके पुनर्प्राप्त किया जा सकता है। निम्नलिखित सदस्य सम्मिलित करना JAX-WS अपने वेब सेवा में वेब सेवा संदर्भ के लिए एक संदर्भ इंजेक्षन का कारण होगा: फिर

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

... 

@Resource 
private WebServiceContext context; 

, आप उपयोग कर सर्वलेट संदर्भ का उपयोग कर सकते हैं:

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

का उपयोग आप एक JBoss ईएपी ढेर पर इस प्रयास कर रहे हैं, और आप शुरू जेबॉस डेवलपर स्टूडियो में नए प्रोजेक्ट विज़ार्ड का उपयोग करके एक सीम प्रोजेक्ट बनाकर, आप अपने वेब-आईएनएफ/lib में एक कॉमन्स-एनोटेशन.जर फ़ाइल (दूसरों के बीच, @Resource एनोटेशन) में समाप्त होते हैं। अंत परिणाम यह है कि आपका WebServiceContext भर नहीं रहा है, और आपको NullPointerException मिलता है। हमारे लिए, यह समाधान यह सुनिश्चित करने के लिए कि जेबॉस-शामिल संस्करण का उपयोग किया गया था, समाधान को कॉमन्स-एनोटेशन.जर को हटाने के लिए था। उसके बाद, चीजें तैराकी से चला गया। महान जवाब के लिए धन्यवाद, असली जीवनसेवक! –

+1

मेरा दिन बचाया, लेकिन इसमें आयात की कमी नहीं है जो @pihentagy ने पोस्ट किया है। –

+0

क्या वेब सेवा संदर्भ के अलावा कोई अन्य इंजेक्शन योग्य संसाधन है? –

0

आप का उपयोग करते हैं मेवेन इस निर्भरता को जोड़ें !!!

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

तो मैं प्राप्त 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()); 
संबंधित मुद्दे