2011-08-15 10 views
7

मुझे अपने सीएक्सएफ वेब सेवा एंडपॉइंट कॉन्फ़िगरेशन में एक सापेक्ष प्रकाशन पते का उपयोग करने में बहुत कठिनाई हो रही है।सीएक्सएफ जैक्सव्स एंडपॉइंट सापेक्ष प्रकाशन पता

मैं निम्नलिखित विन्यास फाइल के साथ एक सरल जावा पहले JAX-WS परियोजना है:

applicationContent-cxf.xml:

<beans xmlns=...> 
    ... 
    <jaxws:endpoint 
     id="helloWorldService" 
     implementorClass="org.helloworld.ws.HelloWorldServiceImpl" 
     implementor="#helloWorldServiceImpl" <!-- spring managed --> 
     endpointName="sayHello" 
     address="HelloWorldService"/> 
</beans> 

web.xml:

<web-app> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value> 
      WEB-INF/applicationContext.xml 
      WEB-INF/applicationContext-cxf.xml 
     </param-value> 
    </context-param> 

    <listener> 
     <listener-class> 
      org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>HelloWorldServlet</servlet-name> 
     <display-name>Hello World Servlet</display-name> 
     <servlet-class> 
      org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>HelloWorldServlet</servlet-name> 
     <url-pattern>/services/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

अनुसार http://cxf.apache.org/docs/servlet-transport.html पर, ऐसा लगता है कि मुझे HelloWorldService का प्रकाशित पता निर्दिष्ट करने में सक्षम होना चाहिए और सेवा का URL (उदाहरण के लिए) http://localhost:8080/services/HelloWorldService को हल करेगा। लेकिन जब मैं http://localhost:8080/services/HelloWorldService?wsdl पर जाने का प्रयास करता हूं तो मुझे 404 मिलते हैं। अगर मैं अपने jaxws एंडपॉइंट में पूर्ण पता http://localhost:8080/services/HelloWorldService पर प्रकाशित पता बदलता हूं तो मैं wsdl तक पहुंचने में सक्षम हूं।

यदि संभव हो तो मैं एक सापेक्ष एंडपॉइंट पता निर्दिष्ट करना चाहता हूं। मैं सीएक्सएफ (और वेब सेवाओं को लिखने) का उपयोग करने के लिए नया हूं, इसलिए किसी भी मदद की बहुत सराहना की जाती है!

अद्यतन 1:

ध्यान दें कि मैं बिलाव 7. करने के लिए अपने वेब सेवा की तैनाती कर रहा हूँ मैं नहीं जानता कि क्या यह प्रवेश करने जाता है, लेकिन मेरा प्रारंभ लॉग राज्यों Setting the server's publish address to be HelloWorldService में लाइनों में से एक। अगर किसी को मेरी मदद करने के लिए अधिक जानकारी चाहिए तो कृपया मुझे बताएं।

अद्यतन 2:

ऐसा प्रतीत होता है CXF पता लगाता है कि एक CXFServlet "इस्तेमाल किया जा रहा" है या नहीं और अगर यह नहीं है एक एम्बेडेड घाट उदाहरण का उपयोग करता है। http://cxf.apache.org/docs/xfire-migration-guide.html#XFireMigrationGuide-HTTPandServletSetup। इसलिए, किसी कारण से सीएक्सएफ मेरे सर्वलेट के बजाय एम्बेडेड जेटी इंस्टेंस का उपयोग कर रहा है। हालांकि, मुझे नहीं पता कि मेरे वेब.एक्सएमएल में हैलोवर्ल्ड सर्लेट के अलावा मुझे और कॉन्फ़िगरेशन की आवश्यकता है, और सीएक्सएफ दस्तावेज मुझे और मदद नहीं करता है।

उत्तर

12

उत्तर निश्चित रूप से सरल था (बैंगिंग-हेड-ऑन-डेस्क सरल, वह है)। मेरे सीएक्सएफ बीन परिभाषाओं में, मैं "cxf-servlet.xml" फ़ाइल आयात नहीं कर रहा था जैसा कि http://cxf.apache.org/docs/servlet-transport.html देखा गया है। अगर यह फ़ाइल आयात नहीं की जाती है, तो सीएक्सएफ मानता है कि इसे मेरे सीएक्सएफ सर्वलेट के बजाय एम्बेडेड जेटी इंस्टेंस का उपयोग करना चाहिए। मेरा अनुमान है कि जेटी इंस्टेंस केवल पूर्ण प्रकाशित पते निर्दिष्ट करने वाले एंडपॉइंट्स के साथ काम करता है।

+0

+1 अपने डेस्क पर अपने सिर को टक्कर देने के लिए +1 –

+1

आपको समाधान पोस्ट करने की सराहना करते हैं, मेरे पास बिल्कुल वही समस्या थी और लगभग डेस्क पर मेरे सिर को टक्कर लगी :-) – user1339772

0

यह

address="/HelloWorldService" 

नहीं होना चाहिए?

+0

इसे इंगित करने के लिए धन्यवाद। मैंने कोशिश की/हैलोवर्ल्ड सेवा, लेकिन यह अभी भी काम नहीं कर रहा है। – Jpnh

+0

कृपया अपने एंडपॉइंट में serviceName = "service'sName" जोड़ें और – tamilnad

+0

धन्यवाद। मैंने उल्लेख नहीं किया कि मेरे पास वेब सेवा कार्यान्वयन पर जैक्सडब्ल्यूएस एनोटेशन में कॉन्फ़िगर किया गया सेवा नाम है। – Jpnh

संबंधित मुद्दे