2013-08-30 3 views
0

Я пытаюсь разобрать и проверить запрос SOAP с помощью SAX. Требуется два XSD, один для конверта SOAP (http://schemas.xmlsoap.org/soap/envelope/) и тот, который я определил. Я не могу найти способ правильно проверить запрос на эти два XSD.Проверка XML на 2 XSD

Вот код, который я использую для разбора запроса и проверки его на soapenv.xsd. Он работает нормально. Если я укажу свой XSD вместо этого, проверка завершится неудачей с помощью «Невозможно найти объявление элемента« soapenv: Envelope ».

SAXParserFactory factory = SAXParserFactory.newInstance(); 
factory.setNamespaceAware(true); 
factory.setValidating(true); 

SAXParser saxParser = factory.newSAXParser();  
saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaLanguage", "http://www.w3.org/2001/XMLSchema"); 
saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", MyClass.class.getResourceAsStream("/xml/soapenv.xsd")); 

InputSource is = new InputSource(MyClass.class.getResourceAsStream("/xml/request.xml")); 
XMLReader reader = saxParser.getXMLReader(); 
reader.setContentHandler(new MyHandler()); 
reader.setErrorHandler(new MyErrorHandler()); 
reader.parse(is); 

Как указать второй XSD?

Есть ли лучший способ проанализировать и проверить запросы SOAP?

EDIT

В соответствии с предложением, я создал thirdpty.xsd, который импортирует два моих XSDs.

<?xml version="1.0" encoding="UTF-8"?> 
<xs:schema targetNamespace="thirdparty:general" 
xmlns="thirdparty:general" 
xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:import schemaLocation="D:\ucfed\ValidateWSDL\src\xml\soapenv.xsd" 
     namespace="http://schemas.xmlsoap.org/soap/envelope/"/> 

    <xs:import schemaLocation="D:\ucfed\ValidateWSDL\src\xml\Presence.xsd" 
     namespace="thirdparty:presence"/>  
</xs:schema> 

уточняю этот новый XSD для проверки:

saxParser.setProperty("http://java.sun.com/xml/jaxp/properties/schemaSource", MyClass.class.getResourceAsStream("/xml/thidpty.xsd")); 

Но до сих пор, только SOAP конверт XSD используется для проверки. Если изменить один элемент из моего другого XSD, проверка не обнаружит его.

Вот XML, я пытаюсь проверить

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:urn="thirdparty:presence"> 
    <soapenv:Header/> 
    <soapenv:Body> 
     <urn:getPresenceQuery> 
      <urn:origAccount uri="[email protected]"/> 
      <urn:destAccount uri="[email protected]"/> 
     </urn:getPresenceQuery> 
    </soapenv:Body> 
</soapenv:Envelope> 

Другие идеи?

ответ

0

Напишите документ схемы драйвера, который импортирует два других; подтвердите действие против водителя.

Смежные вопросы