Ключевое слово в защите информации
КЛЮЧЕВОЕ СЛОВО
в защите информации
Получить ГОСТ TLS-сертификат для домена (SSL-сертификат)
Добро пожаловать, Гость! Чтобы использовать все возможности Вход или Регистрация.

Уведомление

Icon
Error

Опции
К последнему сообщению К первому непрочитанному
Offline martynovas  
#1 Оставлено : 21 июня 2012 г. 14:04:44(UTC)
martynovas

Статус: Новичок

Группы: Участники
Зарегистрирован: 21.06.2012(UTC)
Сообщений: 1
Откуда: Москва

Сотрудник организации должен своей ЭЦП подписать XML документ (по СМЭВ элемент AppData).
Далее этот подписанный XML документ должен стать частью исходящего SOAP-сообщения веб-сервиса.
Проблема в том, что при включения xml в SOAP собщение xml меняется.
Пример как это делает DOM:
Есть файл soap.xml
Код:
<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
Код:
<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:
Код:
    		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 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 через WebService?
(JAX-WS 2.1, JDK6, TomCat6)
RSS Лента  Atom Лента
Пользователи, просматривающие эту тему
Guest
Быстрый переход  
Вы не можете создавать новые темы в этом форуме.
Вы не можете отвечать в этом форуме.
Вы не можете удалять Ваши сообщения в этом форуме.
Вы не можете редактировать Ваши сообщения в этом форуме.
Вы не можете создавать опросы в этом форуме.
Вы не можете голосовать в этом форуме.