2013-01-07 13 views
6

वर्तमान में हमारे पास स्प्रिंग एमवीसी डिस्पैचर सर्वलेट और दो सीएक्सएफएसआरलेट्स के साथ जावा वेबपैप है। डिस्पैचर सर्वलेट डिफ़ॉल्ट सर्वलेट (मैपिंग /) है, एक सीएक्सएफएसआरलेट मानचित्र /api/* पर है, दूसरा /services/* पर है।सीएक्सएफ और एकाधिक सर्वलेट मैपिंग

क्या मुझे गुस्सा दिलाना है, कि यह, 1 CXFServlet कि 2 सेवाओं, /api/v0 पर एक और /services/myService पर एक का आयोजन किया है करने के लिए असंभव लगता है CXFServlet के लिए मानचित्रण /* के बिना है। यदि यह संभव था, तो यह प्रारंभिक समय, कॉन्फ़िगर परेशानी और किसी अन्य सर्वलेट उदाहरण की स्मृति आवश्यकताओं को सहेज लेगा।

तो मूल रूप से, मेरे सवाल का बेहतर स्प्रिंग नामस्थान config का उपयोग कर, CXFServlet के लिए मानचित्रण /* बिना किसी को भी एक तरह से 1 CXFServlet में 2 यूआरएल पर 2 CXF सेवाओं की मेजबानी के लिए की जानता है, एक आम आधार/रूट URL के बिना,?

उत्तर

3

CXF ServletController पहले कॉल HttpServletRequest#getPathInfo की invoke विधि है, जो सर्वलेट का url-pattern बिना अनुरोध किया गया URL का हिस्सा देता है। इस कॉल का नतीजा तब किसी भी परिभाषित सेवा से मेल खाने के लिए DestinationRegistry#getDestinationForPath पर कॉल किया जाता है। इसलिए वर्तमान में सर्वलेट भाग के साथ पथ का उपयोग करके सीएक्सएफ मैच सेवाओं को शामिल करना असंभव है - सीएक्सएफ कभी भी HttpServletRequest#getServletPath पर कॉल नहीं करता है जिसके लिए इसकी आवश्यकता होगी।

ध्यान दें कि base-address मूल्य कि सर्वलेट का initialisation मानकों (<init-param>) में स्थापित किया जा सकता केवल किसी भी URL को CXF प्रदर्शित करता है को प्रभावित करेगा, क्योंकि ServletController#getBaseURL विधि इस मान का उपयोग करता है सेवा मंगलाचरण के दौरान किया जाता है।

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