Мне нужно проверить сообщение SOAP против WSDL
?
(Точно так же, что файл XML
может быть проверен против XSD
схемы).
Я не звоню ни одного WebService;
У меня просто есть сообщение SOAP
и A WSDL
, и мне необходимо проверить, что сообщение SOAP
является правильным.
Потом не призывая WebService или впоследствии.
Мне нужно сделать эту проверку в рамках программы Java. Знаете ли вы о небольшой библиотеке Java, чтобы сделать это?
PS: Я знаю, что несколько JAX-WS
библиотек могут подтвердить запрос / ответ, когда вы называете WebService. Но опять же, я не называю WebService; У меня есть простое сообщение SOAP
, а WSDL
, и мне нужна функция, которая проверяет сообщение SOAP
против WSDL
.
PS: Я также знаю, что есть инструменты, которые могут сделать это, например SOAPUI
и XMLSPY
. Опять же, мне нужно сделать эту проверку в моей программе Java.
PS: Я знаю, что я могу извлечь частью тела SOAP
, и подтвердить его против XSD
. Однако я хотел бы подтвердить все SOAP
сообщение против WSDL
.
Если вы создаете клиент веб-сервиса, использующий генератор кода на основе Apache CXF или Apache Axis 2, высока вероятность того, что код вашего веб-сервиса будет работать нормально, если и поставщик веб-сервиса, и ваш клиент находятся в одной и той же версии Стандарты SOAP / WS *. На основе API, который вы выбрали для вызова веб-службы, вы можете увидеть, можно ли использовать возможность ведения журнала этого API для распечатки сгенерированного запроса SOAP.
Другим подходом может быть использование такого инструмента, как SOAPUI. Вы можете попытаться настроить фиктивный веб-сервис с использованием пользовательского интерфейса SOAP на основе имеющегося у вас WSDL, а затем вызвать тестовый клиент своего веб-сервиса, вызвав фиктивный сервис. См. Ссылку SOAP UI здесь http://www.soapui.org/Getting-Started/web-service-sample-project/1-Web-Service-Mocking.html
Вы можете создать заглушку с помощью имеющегося у вас WSDL, а затем сделать запрос к заглушке с помощью вашего XML-запроса. Если это идет правильно, ваш запрос верен.
Вы можете импортировать WSDL в свой проект, а затем сделать вызов в службу заглушки, используя ваш XML. Таким образом, вы можете вносить изменения в проверки без каких-либо изменений в коде.
Попробуйте
В обработчике попробуйте приведенный ниже код в public boolean handleRequest(MessageContext mc)
, добавьте эти строки
mc.setProperty("USE_TEST_FILE", <your response in .xml file>);
return false;
В public boolean handleResponse(MessageContext mc)
String testFileName = (String) mc.getProperty("USE_TEST_FILE");
InputStream instream = <read file as an input stream>
SOAPMessageContext smc = (SOAPMessageContext) mc;
SOAPMessage message = smc.getMessage();
SOAPPart soapPart = message.getSOAPPart();
soapPart.setContent(new StreamSource(instream));
smc.setMessage(message);
return false;
теперь запустят ваш прокси .. прокси потерпит неудачу, если сообщение недопустимо для WSDL
Поскольку сообщение SOAP представляет собой xml, вы можете проверить все сообщение по xsd. Например, я нашел эту схему для сообщения SOAP. Вы можете:
Если вы хотите проверить соответствие конкретному WSDL, вы можете подготовить свою схему вручную: просто поместите корневой элемент вашего сообщения вместо этой части:
<xs:sequence>
<xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
</xs:sequence>
в схему SOAP.
Проверка по схеме конверта SOAP , затем извлечение тела и заголовков и проверка по конкретной схеме. Должно быть достаточно просто.