2012-01-23 17 views
5

Rozglądam się w sieci od dobrych kilku godzin, próbując znaleźć prosty sposób sprawdzania pełnej wiadomości SOAP przeciwko WSDL. Jestem świadomy, że istnieją sposoby, aby to zrobić z różnymi strukturami usług sieciowych, ale nie chcę tego robić, ponieważ wymaganie polega jedynie na sprawdzeniu poprawności fragmentu XML. Mogę sprawdzić poprawność w stosunku do schematu, chociaż mam problem z tym, że istnieje szereg schematów importowanych do WSDL i nie wiem, który z nich powinienem walidować. Mógłbym napisać jakąś użyteczność, aby najpierw przetworzyć WSDL i odpowiedź, aby ustalić, któremu XSD ma walidować, ale przypuszczałem, że można to zrobić jako jednolinijkę używając ustalonej biblioteki!Sprawdzanie poprawności komunikatu SOAP przeciwko WSDL z wieloma XSD

Czy ktoś wie o stosunkowo prostym sposobie sprawdzania poprawności dokumentu XML przy użyciu WSDL i wielu XSD?

Odpowiedz

4

W poprzednim projekcie rozwiązałem ten problem, parsując plik WSDL i wyodrębniając z niego schematy. Kod był podobny do następującego, zakłada, że ​​WSDL został odczytany w zmiennej źródłowej "wsdlSource" w jakiś sposób i że zaimportowane przestrzenie nazw są zadeklarowane w "schemacie" -element. Dobrym pomysłem byłoby wykonanie tego raz podczas uruchamiania, a następnie sprawdzenie poprawności w usłudze 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

Wygląda jak jedyne podejście na teraz! Dzięki za opis. – Ellis

0

Nie ma prostego sposobu na zrobienie tego. Nie ma biblioteki Open Source, którą też mógłbym znaleźć. W tym celu użyłem narzędzia Pakiet XML w sferze IBM Info. Jest to całkiem dobra robota do importowania plików wsdls i xsds i sprawdzania poprawności danych XML lub ładowania danych XML i konwertowania ich do plików płaskich. Ten link może być przydatny: http://www.ibm.com/developerworks/data/library/techarticle/dm-1103datastages/index.html

+0

Dzięki za odpowiedź, chociaż nie sądzę, że to będzie latać zważywszy, że co ja próbuje zrobić tutaj jest uproszczenie narzędzie, które obecnie wykorzystuje pełnowartościowy ramy do sprawdzania wiadomości SOAP – Ellis

+0

Jest to biblioteka, z której korzystaliśmy: http://www.ibm.com/developerworks/xml/library/x-javaxmlvalidapi/index.html w naszej obecnej implementacji. – codegenx

+0

Nie widzę niczego na temat sprawdzania poprawności na WSDL na tej stronie. – Ellis

Powiązane problemy