powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно канонизировать xml?
6 сообщений из 6, страница 1 из 1
Как правильно канонизировать xml?
    #38948529
created4dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
//Подписываю
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
String xml="...." //soap сообщение
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
DocumentBuilder documentBuilder = dbf.newDocumentBuilder();
Document doc = documentBuilder.parse(new ByteArrayInputStream(xml.getBytes("UTF-8")));
WSSConfig.init();
Crypto crypto = CryptoFactory.getInstance("server.properties");
WSSecSignature builder = new WSSecSignature();
builder.setUserInfo("alias1", "123456");
builder.setKeyIdentifierType(WSConstants.ISSUER_SERIAL);
builder.setSignatureAlgorithm(signatureDigestAlgorithm);
builder.setDigestAlgo(signatureAlgorithm);
WSSecHeader secHeader = new WSSecHeader();
secHeader.insertSecurityHeader(doc);
Document signedDoc = builder.build(doc, crypto, secHeader);



//Проверяю
Код: java
1.
System.out.println(secEngine.processSecurityHeader(signedDoc, null, null, crypto));



- выдает true, а если конвертнуть в String а потом опять в Document - то получаю: The signature or decryption was invalid

Есть подозрение что либо я конвертирую не правильно и что-то теряется, либо надо канонизировать перед проверкой. Но как?
...
Рейтинг: 0 / 0
Как правильно канонизировать xml?
    #38949971
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С дибильной канализацией XML я пару месяцев матюгался (((

[src JAVA]
а если конвертнуть в String а потом опять в Document - то получаю: The signature or decryption was invalid
[/quot]
IMHO
Пробелы батенька, пробелы... Отступы перед тегами и прочие дурно пахнущие субстанции. Переводы строки при передачи через HTTP....

Все уроды. Как жить?

Самое прикольное, когда поведение Oracle XML parser'а на клиенте каким-то образом оказывается связанное с NLS кодировкой базы. При одной кодировке базы на сервере - отступы в XML добавляются. при другой - нет. Код не трассировал, т.ч. как объяснить такое шаманство - не знаю. Плюнул на String'и и XML и все стал делать через BLOB.
...
Рейтинг: 0 / 0
Как правильно канонизировать xml?
    #38949972
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С дибильной канализацией XML я пару месяцев матюгался (((

а если конвертнуть в String а потом опять в Document - то получаю: The signature or decryption was invalid

IMHO
Пробелы батенька, пробелы... Отступы перед тегами и прочие дурно пахнущие субстанции. Переводы строки при передачи через HTTP....

Все уроды. Как жить?

Самое прикольное, когда поведение Oracle XML parser'а на клиенте каким-то образом оказывается связанное с NLS кодировкой базы. При одной кодировке базы на сервере - отступы в XML добавляются. при другой - нет. Код не трассировал, т.ч. как объяснить такое шаманство - не знаю. Плюнул на String'и и XML и все стал делать через BLOB.[/quot]
...
Рейтинг: 0 / 0
Как правильно канонизировать xml?
    #38949976
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid Kudryavtsev, хм... интересно про NLS_*.

А можно кейс с дефектом?
...
Рейтинг: 0 / 0
Как правильно канонизировать xml?
    #38950013
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonА можно кейс с дефектом?
Нет.

В офисе все работало, всегда. У заказчика, при 100% том же Java-окружении (версия Java, JAR'ники) но, возможно. отличающемся Oracle-клиенте, при соединении с CL8MSWIN1251 инстансом и UTF8 инстансом поведение отличалось ((( У заказчика был RAC, в офисе просто Oracle + разные версии сервера.

Использовал тип XML Type в Oracle + в класспатчах был Xalan/Xerces. Т.ч. в проекте образовывался какой-то "падеж падежей" ( C ) из Oracle XML и Xalan/Xerces. В общем, похоже, в какой-то момент какие-то фабрики начинали не те классы выдавать.

Т.е. XML документ сделан на классах Oracle XML, а его сериализация идет через Xalan/Xerces.... Понять, в какой момент, какой именно тип у XML Document'а при работе... какой-то ужас. При этом поведение при сериализацией (с точки зрения отступов) совершенно другое.

Теоретически, фабриками можно управлять через параметры окружения, но я окончательно не разобрался. Проще оказалось вообще выкинуть нафиг XMLType и все через BLOB и Xalan/Xerces. Хоть понятно, в какой момент какая последовательность байт подписывалась и проверялась. Т.к. подписывается именно последовательность байт .

А над фактом, что стандарт канализации XML НИКАК не обрабатывает пробелы в документах - я долго смеялся сквозь слезы. Т.е. это ПЕРВАЯ вещь, которую хочется сделать над ТЕКСТОМ (xml). Убрать чехарду с пробелами и переводом строк (строка заканчивается просто \n или \n\r).

Проблем было 2-е:
1. Пробелы (отступы перед тегами). Теоретически можно попытаться настроить, практически мне оказалось проще плюнуть и работать как с последовательностью байт.

Я подробностей не помню, МОГУ ОШИБАТЬСЯ, но там есть еще "бяка" заложенная в стандарте Java. Стандарт канализации делался в тот момент, когда дефолтное поведение де-сериализатора (парсера) XML прописанное в стандарте было "удалять пробелы (отступы) при чтении". Т.ч. "бага" стандарта канализации, вроде, никак не сказывалась, при чтении эти проблемы радостно грохались IMHO. С какой-то версии Java (вроде от 1.5 к 1.6), стандарт для работы с XML поменяли. И сделали дефолтное поведение "сохранять отступы при чтении".

2. Кодирование перевода строки. При некоторых вариантах передачи по HTTP, Windows API начинал символ \n (стандарт Linux и Oracle) преобразовывать в \n\r. Понятное дело, что подпись документа (как бинарного файла) становилась не валидной.

Долго понять не мог, почему XML проходит тест на сайте, а при обращении через API, нет.

Приходилось пользоваться Windows API, т.к. авторизация на прокси была по последнему слову MS и ГОСТ техники. Кроме как через Windows API было не пробиться. Опять таки, проблему локализовал, но не помню, разбирался или нет.

Продакшен сервер напрямую включен в защищенную сеть, т.ч. там проблемы с прокси нет. При передачи через https://hc.apache.org/ все работает как надо.

AFAIK
...
Рейтинг: 0 / 0
Как правильно канонизировать xml?
    #38950016
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
p.s.
Помню два отличия Oracle XML от Xalan/Xersec:
1. отступы
2. Document.adoptNode()
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как правильно канонизировать xml?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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