Проверка SOAP-сообщения на WSDL с несколькими XSD - PullRequest
5 голосов
/ 24 января 2012

Я уже несколько часов слоняюсь по сети, пытаясь найти простой способ проверки полноценного SOAP-сообщения на соответствие WSDL. Я знаю, что есть способы сделать это с различными платформами Web-сервисов, но я не хочу этого делать, так как требуется просто проверить кусок XML. Я мог бы проверить по схеме, хотя проблема у меня заключается в том, что в WSDL импортировано несколько схем, и я не знаю, какую из них мне следует проверять. Я мог бы написать какую-нибудь утилиту для первой обработки WSDL и ответа, чтобы определить, какой XSD проверять, но я предположил, что это можно сделать в виде одной строки с использованием установленной библиотеки!

Кто-нибудь знает относительно простой способ проверки XML-документа с использованием WSDL и нескольких XSD?

Ответы [ 2 ]

4 голосов
/ 24 января 2012

В предыдущем проекте я решил эту проблему, проанализировав WSDL-файл и извлекая из него схемы.Код представлял собой что-то вроде следующего: предполагается, что WSDL каким-то образом считан в переменную источника «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 голосов
/ 24 января 2012

Нет прямого пути для этого.Нет библиотеки с открытым исходным кодом, которую я мог бы найти.Для этого я использовал инструмент XML Pack в сфере IBM Info.Это делает довольно хорошую работу для импорта wsdls и xsds и проверки данных xml или загрузки данных XML и преобразования их в плоские файлы.Вы можете найти эту ссылку полезной: http://www.ibm.com/developerworks/data/library/techarticle/dm-1103datastages/index.html

...