Как загрузить внешние ресурсы, используя ссылочный URI в Java XML - PullRequest
10 голосов
/ 04 ноября 2011

Я пытаюсь извлечь узел XML из ссылки на URI. Эта ссылка на URI генерируется подписывающим лицом XAdES4j и может ссылаться на узел в том же файле XML или в той же папке.

Я надеялся, что загрузка ссылки будет такой же простой, как

XMLSignatureInput referencedXML = ResourceResolver.resolveStatic(referenceNode.getAttributeNode("URI"), referenceDoc.getBaseURI());

Однако это просто дает мне исключение NullPointerException без полезного сообщения. Оба аргумента не равны NULL, и в простом случае атрибут URI был «data.xml», а базовый URI referenceDoc был «/Users/ryan/.../test-files/signature.xml. Data.xml находится в тот же каталог с тестовыми файлами.

URI может указывать на элемент в файле, поэтому я надеюсь, что есть загрузчик ссылок, который решает эту сложность для меня. Что я пропустил?!

редактирование:

Ссылка, которую я пытаюсь загрузить:

<ds:Reference Id="xmldsig-c6050e36-d9e7-46d9-ac5f-447d1bbb405f-ref0" URI="lote.xml" xmlns:ds="http://www.w3.org/2000/09/xmldsig#">

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Всего ударов в темноте (вам действительно нужно вставить следы стека ...), но здесь все идет.

Я быстро взглянул на источник ResourceResolver по адресу: http://java2s.com/Open-Source/Java-Document/XML/xml-security-1.4.3/org/apache/xml/security/utils/resolver/ResourceResolver.java.htm

Я вижу, что возникнет исключение NullPointerException из-за неинициализированного поля _resolverVector в ResourceResolver, если только статический метод init () уже был вызван для ResourceResolver.Над методом init () есть комментарий:

The init() function is called by org.apache.xml.security.Init.init()

Сам ResourceResolver, по-видимому, не запускает этот вызов - вы это делаете?Если нет, попробуйте это, прежде чем использовать какой-либо материал org.apache.xml.security.

0 голосов
/ 15 ноября 2011

Во-первых, вам нужно понять, что именно вызывает исключение NullPointerException, поэтому я бы предложил разделить этот код, чтобы вы могли видеть, где находится нулевое значение.

...