2012-01-23 20 views
5

के साथ डब्लूएसडीएल के खिलाफ एसओएपी संदेश मान्य करना मैं डब्ल्यूएसडीएल के खिलाफ एक पूर्ण एसओएपी संदेश को सत्यापित करने के लिए एक आसान तरीका खोजने का प्रयास कर रहा हूं, अब कुछ अच्छे घंटों के लिए नेट के आसपास देख रहा हूं। मुझे पता है कि वहां विभिन्न वेब सेवा ढांचे के साथ ऐसा करने के तरीके हैं, लेकिन मैं ऐसा नहीं करना चाहता क्योंकि आवश्यकता केवल एक्सएमएल के एक टुकड़े को मान्य करने के लिए है। मैं स्कीमा के खिलाफ मान्य कर सकता हूं, हालांकि मेरी समस्या यह है कि डब्लूएसडीएल में आयात किए गए कई स्कीमा हैं और मुझे नहीं पता कि मुझे किसके खिलाफ सत्यापन करना चाहिए। मैं डब्लूएसडीएल को पहली बार संसाधित करने के लिए कुछ उपयोगिता लिख ​​सकता हूं और यह निर्धारित करने के लिए कि कौन सी एक्सएसडी वैध है, लेकिन मुझे लगता है कि यह एक स्थापित पुस्तकालय का उपयोग कर एक लाइनर के रूप में किया जा सकता है!कई एक्सएसडी के

क्या किसी को डब्लूएसडीएल और एकाधिक एक्सएसडी के दिए गए XML दस्तावेज़ को सत्यापित करने के अपेक्षाकृत सरल तरीके से पता है?

उत्तर

4

पिछली परियोजना में मैंने डब्लूएसडीएल-फाइल को पार्स करके और स्कीमा निकालने से इस समस्या को हल किया। कोड निम्न जैसा था, यह मानता है कि डब्लूएसडीएल को स्रोत चर "wsdlSource" में कुछ तरीकों से पढ़ा गया है और आयातित नामस्थान "स्कीमा" -लेमेंट में घोषित किए गए हैं। यह स्टार्टअप पर एक बार प्रदर्शन करने के लिए एक अच्छा विचार होगा और फिर SOAPHandler में सत्यापन करें।

//First create a document from the WSDL-source 
    DocumentBuilder db = DocumentBuilderFactory.newInstance() 
       .newDocumentBuilder(); 
    Document wsdlDoc = db.newDocument(); 

    TransformerFactory transformerFactory = TransformerFactory 
       .newInstance(); 
    Transformer transformer = transformerFactory.newTransformer(); 
    transformer.transform(wsdlSource, new DOMResult(wsdlDoc)); 

    //Now get the schemas from the WSDL 
    NodeList schemaNodes = wsdlDoc.getElementsByTagNameNS(
      XMLConstants.W3C_XML_SCHEMA_NS_URI, "schema"); 

    int nrSchemas = schemaNodes.getLength(); 

    Source[] schemas = new Source[nrSchemas]; 

    for (int i = 0; i < nrSchemas; i++) { 
     schemas[i] = new DOMSource(schemaNodes.item(i)); 
    } 

    SchemaFactory schemaFactory = SchemaFactory 
      .newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); 

    //Now we have a schema that can validate the payload 
    Schema schema = schemaFactory.newSchema(schemas); 
    Validator validator = schema.newValidator(); 
+0

अभी के लिए एकमात्र दृष्टिकोण की तरह लग रहा है! स्निपेट के लिए धन्यवाद। – Ellis

0

ऐसा करने के लिए सीधे आगे नहीं है। कोई ओपन सोर्स लाइब्रेरी नहीं है जिसे मैं पा सकता हूं। मैंने ऐसा करने के लिए आईबीएम इन्फो क्षेत्र में एक्सएमएल पैक उपकरण का उपयोग किया। यह wsdls और xsds आयात करने और XML डेटा को सत्यापित करने या XML डेटा लोड करने और उन्हें फ्लैट फ़ाइलों में परिवर्तित करने के लिए काफी अच्छा काम करता है। आपको यह लिंक उपयोगी मिल सकता है: http://www.ibm.com/developerworks/data/library/techarticle/dm-1103datastages/index.html

+0

उत्तर के लिए धन्यवाद, हालांकि मुझे नहीं लगता कि यह देखते हुए उड़ा ले जाएगा कि क्या मैं यहाँ क्या करने की कोशिश कर रहा हूँ एक उपयोगिता है जो वर्तमान में एक सोप संदेश – Ellis

+0

मान्य करने के लिए एक पूर्ण विकसित फ्रेमवर्क का उपयोग करते आसान बनाने में यह एक है लाइब्रेरी जिसका हमने उपयोग किया है: http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi/index.html हमारे वर्तमान कार्यान्वयन में। – codegenx

+0

मुझे उस पृष्ठ पर WSDL के विरुद्ध सत्यापन करने के बारे में कुछ भी दिखाई नहीं देता है। – Ellis

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