powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как передать ранее подписанный XML через web-сервис?
11 сообщений из 11, страница 1 из 1
Как передать ранее подписанный XML через web-сервис?
    #37846903
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день. Как передать ранее подписанный XML через web-сервис как часть SOAP сообщения (не Base64 и CDATA) ? Например
на веб-сервисе среди прочих исходящих параметров присутствует anyType. Если при работе веб-сервису необходимо вернуть xml:

Код: xml
1.
2.
3.
4.
	<a>
	    <b></b>
	    <c>123</c>
	</a>



то в SOAP-собщении появляется:

Код: xml
1.
2.
3.
4.
	<a>
	   <b/>
	   <c>123</c>
	</a>



Т.е. тэг <b></b> был заменён на <b/>. И это не единственная корректива которую вносит jax-ws в передаваемый xml. Проблема заключается в том, что этот передаваемый xml должен быть подписан цифровой подписью, а значит любые коррективы недопустимы. Почему jax-ws ведёт себя так некрасиво?
(jdk6 jax-ws2.1 tomcat6)
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37846967
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что мешает подписать сразу в виде "<b />"?
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37846971
svenom
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И как вы подписываете XML? JAX-WS что-нибудь знает об этой подписи? Если нет, то за JAX-WS никакого криминала нет - оба приведенных варианта это абсолютно валидные XML, идентичные с точки зрения парсера.
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37847019
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
svenomИ как вы подписываете XML? JAX-WS что-нибудь знает об этой подписи?
Подписываю по http://www.w3.org/2001/04/xmldsig-more#gostr34102001-gostr3411. А как сказать JAX-WS что-нибудь об это подписи?
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37847974
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял что сам DOM меняет xml. Простой пример:
Есть файл soap.xml
Код: xml
1.
2.
3.
4.
5.
6.
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:NewOperationResponse xmlns:ns2="http://xmlintosoap.martynov.ru">
      </ns2:NewOperationResponse>
   </S:Body>
</S:Envelope>


и файл test.xml
Код: xml
1.
2.
3.
4.
5.
6.
<out>
<ns2:a xmlns:ns2="http://xmlintosoap.martynov.ru" >
	<ns2:b></ns2:b>
	<ns2:c>123</ns2:c>
</ns2:a>
</out>


Код, который в soap.xml вставляет test.xml через DOM:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
    		DocumentBuilderFactory dbfac = DocumentBuilderFactory.newInstance();
    		dbfac.setCoalescing(true);
    		dbfac.setIgnoringElementContentWhitespace(true);
    		dbfac.setNamespaceAware(true);
    		DocumentBuilder db = dbfac.newDocumentBuilder();
    		Document soap = db.parse(new File("D:/OZWS/ws/xmlIntoSoap/soap.xml"));

    		Document doc = db.parse(new File("D:/OZWS/ws/xmlIntoSoap/test.xml"));
    		
    		Element NewOperationResponse = (Element) soap.getDocumentElement().getElementsByTagNameNS("http://xmlintosoap.martynov.ru", "NewOperationResponse").item(0);
    		Node out = soap.importNode(doc.getDocumentElement(), true);
    		NewOperationResponse.appendChild(out);

    		Transformer trans = TransformerFactory.newInstance().newTransformer();
    		trans.transform(new DOMSource(soap.getDocumentElement()), new StreamResult(System.out));


Результат:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:NewOperationResponse xmlns:ns2="http://xmlintosoap.martynov.ru">
      <out>
<ns2:a>
	<ns2:b/>
	<ns2:c>123</ns2:c>
</ns2:a>
</out></ns2:NewOperationResponse>
   </S:Body>
</S:Envelope>


Декларация пространства имён исчезла, и тэг b схлопнулся. И как вставлять подписанный XML???
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37847983
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123,
я думаю, меньше всего корректив идёт в CDATA - им и надо стараться отправлять. Парсить подписанный документ не надо.
Если модификация, то его оттуда извлекать.
______________________________________________
"Сделай настолько просто, насколько это возможно, но не проще". © А. Эйнштейн.
AutoPOI.ru — ГИС-технологии для Oracle
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37848030
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

CDATA и BASE64 нельзя, веб сервис должен соответствовать метод. рекомендациям СМЭВ. Там утверждены xsd схема, где подписывается конкретный элемент AppData.
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37848078
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123CDATA и BASE64 нельзя
т.е. ты имеешь ввиду, что подписать документ а аттаче (word) нельзя?
http://www.sql.ru/forum/actualthread.aspx?tid=907922&hl=%ef%ee%e4%ef%e8%f1%fc%20xml
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37848133
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123, нет. Передаваемый документ должен быть именно частью soap-собщения, а не вложением CDATA или BASE64.
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37848140
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey123Petro123, нет. Передаваемый документ должен быть именно частью soap-собщения, а не вложением CDATA или BASE64.
ok. Я не догнал.
- soap-собщени НЕ может содержать ноду по стандарту XML?
- soap-собщени НЕ может передавать бинарный формат (в виде base....)?
...
Рейтинг: 0 / 0
Как передать ранее подписанный XML через web-сервис?
    #37849952
Alexey123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если подключить библиотеку xalan, то декларация пространства имён вложенного xml не исчезает:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<?xml version="1.0" encoding="UTF-8"?><S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
   <S:Body>
      <ns2:NewOperationResponse xmlns:ns2="http://xmlintosoap.martynov.ru">
      <out>
<ns2:a xmlns:ns2="http://xmlintosoap.martynov.ru">
	<ns2:b/>
	<ns2:c>123</ns2:c>
</ns2:a>
</out></ns2:NewOperationResponse>
   </S:Body>
</S:Envelope>


Как я понял, это возникает из-за другой реализации DocumentBuilderFactory в xalan-2.7.1.jar (org.apache.xpath.jaxp.XPathFactoryImpl)
Но тэг b всё-таки схлопывается. Может стоит использовать другие реализации DOM и XSLT?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как передать ранее подписанный XML через web-сервис?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]