Я пытаюсь разобрать и проверить запрос 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>
Другие идеи?