2012-03-02 9 views
6

का उपयोग कर मैं एक मॉड्यूल, जहां मैं अपने XSD स्कीमा है, जहां एक स्कीमा स्कीमा स्थान के भीतर एक अन्य का उपयोग कर रिश्तेदार पथ को संदर्भित कर सकते हैं:प्रकाशन स्टेटिक डबल्यूएसडीएल और संबंधित XSD स्कीमा स्प्रिंग WS

<xs:import namespace="http://my.namespace.org" schemaLocation="../mypackage/my.xsd"/> 

यहाँ मैं भी कर रहा हूँ इन xsd schemas से जैक्सब बीन्स उत्पन्न करने के लिए xjc का उपयोग करना।

अब मेरे पास एक मॉड्यूल है जहां मेरी वेब सेवा वसंत-ws (2.0.4) का उपयोग करके लागू है। और मैं स्थिर WSDL का उपयोग करना चाहता हूं और इसे xsd schemas के साथ प्रकाशित करना चाहता हूं, जहां स्कीमा स्थानों को 'http://myerver.url.com/my.xsd' जैसे URL में बदल दिया जाएगा।

प्रश्न यह है कि इसे कैसे प्राप्त किया जाए?

(वैकल्पिक रूप से एक स्कीमा में XSDs गठबंधन और कहा कि डबल्यूएसडीएल के लिए)

(सिद्धांत रूप में मैं इन XSD एक स्क्रिप्ट का उपयोग को बदलने और एक (वसंत डिस्पैचर करने के लिए संसाधनों (XSD और WSDL) करने के लिए उन्हें जोड़ सकते हैं) सर्वलेट लेकिन यह मुझे बहुत सहज नहीं लगता है)

+0

त्वरित टिप्पणी ... क्या आप के बाद से एक में XSDs गठबंधन करने के लिए सक्षम नहीं होगा < xs का उपयोग कर रहे हैं: आयात /> कथन; आपके पास प्रति एक्सएसडी फ़ाइल में केवल एक लक्ष्य नामस्थान हो सकता है। हालांकि, आप सभी एक्सएसडी को रेखांकित कर सकते हैं, चाहे कोई भी नामस्थान न हो, wsdl: प्रकार सेक्शन - जिसके मामले में आपके सभी आयातों को स्कीमालोकेशन विशेषताओं को छोड़ना चाहिए। अधिक बाद में ... –

+0

हाय, मैं यह नहीं करना चाहता कि यह मैन्युअल इनलाइनिंग है। तो यह समाधान यह है कि अगर इसे बिना किसी परेशानी के किया जा सकता है, जैसे कि एक सामान्य lib का उपयोग करना जो मेरे लिए करता है। – csviri

+0

अंत में इसे अपने स्वयं के सर्वलेट कार्यान्वयन से हल किया गया। – csviri

उत्तर

9

वसंत वेब सेवा के पास वास्तव में इसे सुंदर तरीके से करने का एक तरीका है। तुम सब करने की ज़रूरत है, कुछ

<bean id="my" 
     class="org.springframework.xml.xsd.SimpleXsdSchema"> 
     <property 
      name="xsd" 
      value="/mypackage/my.xsd"> 
     </property> 
</bean> 

में अधिक जानकारी नीचे (सहित की तरह सही आईडी के साथ एक SimpleXsdSchema सेम सेम परिभाषा xml फ़ाइल में (जो .xsd बिना XSD नाम के रूप में उपयोग किया जाएगा) को परिभाषित करने के लिए है एक उदाहरण) निम्नलिखित लिंक पर पाया जा सकता है: Static WSDL with imported XML Schema in Spring Web Service

+0

यह गतिशील डब्लूएसडीएल के साथ भी काम करता है – mwhs

2

नीचे स्कीमा को उजागर करने के लिए जावा कॉन्फ़िगरेशन है। यह मेरे लिए काम किया। कृपया ध्यान दें कि स्कीमा नाम बीन नाम और विधि नाम से मेल खाना चाहिए। काम करने के लिए यह बहुत महत्वपूर्ण है। तो मैं के रूप में "CustomerDetailsSchema" XSD नाम और बीन नाम रखा और यह सुनिश्चित करें getCustomerDetails के लिए निर्माता भी नाम

से मेल खाता है
@Bean(name = "customerDetails") 
public DefaultWsdl11Definition getCustomerDetails(XsdSchema CustomerDetailsSchema) { 
    DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition(); 
    wsdl11Definition.setPortTypeName("..."); 
    wsdl11Definition.setServiceName("..."); 
    wsdl11Definition.setLocationUri("/webservice"); 
    wsdl11Definition.setTargetNamespace("..."); 
    wsdl11Definition.setSchema(CustomerDetailsSchema); 
    return wsdl11Definition; 
} 

@Bean(name = "CustomerDetailsSchema") 
public XsdSchema CustomerDetailsSchema() { 
    return new SimpleXsdSchema(new ClassPathResource("schemas/CustomerDetailsSchema.xsd")); 
} 
संबंधित मुद्दे