2013-04-03 6 views
6

ओवरराइट करें मेरे पास एकाधिक (चलिए 2, ए और बी) वेब सर्विसेज हैं और मुझे क्लाइंट को टॉगटर का उपयोग करने के लिए जेनरेट करने की आवश्यकता है। नेटबीन्स में मैं विज़ार्ड "नया वेब सेवा क्लाइंट" का उपयोग दो wsdl को पास करते हुए आउटपुट को देखकर नेटबीन्स को बस उनमें से प्रत्येक के लिए wsimport कहते हैं।wsimport: एकाधिक wsdl ऑब्जेक्ट फैक्टरी

wsimport http:/mydomain/wsA.svc?wsdl 
wsimport http:/mydomain/wsB.svc?wsdl 
दोनों एक

और बी, एक ही पैकेज com.mydomain.myapp (मुझे लगता है कि वे एक ही नाम स्थान में परिभाषित कर रहे हैं) उत्पन्न, तो मैं एक के ठूंठ वर्ग सेट प्राप्त और बी एक ही पैकेज में विलय कर दिया ।

हालांकि, wsimport प्रत्येक webservice के लिए ऑब्जेक्ट फैक्ट्री भी बनाता है, इसलिए यदि मैं ए के बाद बी का स्टब उत्पन्न करता हूं तो मुझे केवल बी परिभाषाओं से संबंधित ऑब्जेक्ट फैक्ट्री प्राप्त होती है (क्योंकि पहला, ए, ओवरराइट किया जाता है)। इसके विपरीत, अगर मैं ऑर्डर स्विच करता हूं तो ए का ऑब्जेक्ट फैक्ट्री बचता है।

समस्या

है कि मैं दोनों webservices एक के प्रकार और बी

के लिए JAXBElements रैपिंग clas उदाहरण बना करने के लिए दोनों ObjectFactories की जरूरत है वहाँ एक रास्ता एक जावा पैकेज में एक के लिए नाम स्थान मैप करने के लिए है और

com.mydomain.myapp.a 
com.mydomain.myapp.b 

और इसलिए ऑब्जेक्टफैक्टरीज दोनों को रखने के लिए बी में किसी अन्य व्यक्ति को बी?

सरल रिफैक्टरिंग मदद नहीं कर रही है क्योंकि आंतरिक रूप से एक getClass() को कॉल किया जाता है, एक बार पैकेज को दोबारा लागू करने के बाद यह अब काम नहीं करता है।

उत्तर

1

आप शायद JAXB बाध्यकारी फ़ाइलों के माध्यम से यह कर सकते हैं - इस प्रश्न/उत्तर पर एक नजर है:, java wsimport rename/different ObjectFactory.java

है कि इसका जवाब से Oracle पर बाध्यकारी फ़ाइल सामान पर एक नजर है: http://docs.oracle.com/javaee/5/tutorial/doc/bnbbf.html

+0

ठीक है! मैंने इस एक्सएमएल बाध्यकारी का उपयोग किया: \t \t \t \t \t फिर भी, यह मेरे XPath त्रुटि देता है: अशक्त। मेरे पास xsd नहीं है, क्या आपके पास सुझाव हैं? – alexroat

+1

बस एक विचार था - क्या आपने कोशिश की है "wsimport -p com.mydomain.myapp.a http: /mydomain/wsA.svc? Wsdl" और फिर "wsimport -p com.mydomain.myapp.b http:/mydomain/wsb .svc? wsdl "? इससे सभी जेनरेट किए गए कोड को निर्दिष्ट पैकेज में ("-p" स्विच के अनुसार) बाध्यकारी फ़ाइल की आवश्यकता के बिना रखा जाएगा। (इसे जल्द ही सोचा होगा ...) – FOOM

+0

हाँ, मैंने किया। "दो घोषणाएं ऑब्जेक्ट फैक्ट्री में टकराव का कारण बनती हैं" जैसी कई त्रुटियां हैं। और "एक ही नाम के साथ एक वर्ग/इंटरफ़ेस" com.anthesi.prova.ExecuteTransmDocModelResponse "पहले से उपयोग में है। इस संघर्ष को हल करने के लिए कक्षा अनुकूलन का उपयोग करें।" – alexroat

0

यह काम किया मेरे लिए मेरे लिए काम (मुझे लगता है यह ध्यान नहीं देता क्या ObjectFactory और स्कैन में है (का उपयोग कर स्प्रिंग जावा config)

@Bean 
public Jaxb2Marshaller marshaller() { 
    Jaxb2Marshaller marshaller = new Jaxb2Marshaller(); 
    marshaller.setPackagesToScan("com.example.api"); 
    return marshaller; 
} 

setPackagesToScansetContextPath के बजाय का उपयोग किया पूरा पैकेज है)।

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