Я использую xades4j для создания сигнатур xades. Я хочу включить преобразование xpath в ссылку. Моя проблема заключается в том, что это отстраненно подписи и имеет пространство имен XPath ...Ошибка при использовании XAdES4j для создания отдельной сигнатуры с преобразованием xpath
Я попытался с помощью следующего XML (отрывок):
<collection xmlns:t="http://test.xades4j/tracks" Id="root">
<album>
<title>Questions, unanswered</title>
<artist>Steve and the flubberblubs</artist>
<year>1989</year>
<t:tracks xmlns:t="http://test.xades4j/tracks">
<t:song length="4:05" tracknumber="1">
<t:title>What do you know?</t:title>
<t:artist>Steve and the flubberblubs</t:artist>
<t:lastplayed>2006-10-17-08:31</t:lastplayed>
</t:song>
<t:song length="3:45" tracknumber="2">
<t:title>Who do you know?</t:title>
<t:artist>Steve and the flubberblubs</t:artist>
<t:lastplayed>2006-10-17-08:35</t:lastplayed>
</t:song>
Если я пытаюсь к оболочечной подписи этот документ, с кодом:
String xpathString = "/collection/album/t:tracks/t:song[ @tracknumber = 1 ]";
DataObjectDesc obj1 = new DataObjectReference("");
obj1.withTransform(new EnvelopedSignatureTransform());
obj1.withTransform(XPath2Filter.intersect(xpathString));
SignedDataObjects objs = new SignedDataObjects(obj1);
Document doc = getDocument(path+fileName);
signer.sign(objs, doc.getDocumentElement());
Он прекрасно работает и эталонным выглядит следующим образом:
<ds:Reference Id="xmldsig-44c42d30-9a42-4290-afba-b89dc807a668-ref0" URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/2002/06/xmldsig-filter2">
<dsig-xpath:XPath xmlns:dsig-xpath="http://www.w3.org/2002/06/xmldsig-filter2" Filter="intersect">/collection/album/t:tracks/t:song[ @tracknumber = 1 ]</dsig-xpath:XPath>
</ds:Transform>
</ds:Transforms>
НО, если я пытаюсь снятую версию, с кодом:
String xpathString = "/collection/album/t:tracks/t:song[ @tracknumber = 1 ]";
DataObjectDesc obj1 = new DataObjectReference(fileName);
obj1.withTransform(XPath2Filter.intersect(xpathString));
SignedDataObjects objs = new SignedDataObjects(obj1);
objs.withBaseUri("file:///"+path);
signer.sign(objs, db.newDocument());
Я получаю ошибку: Приставка должна разрешаться в пространстве имен: т
Моя проблема аналогична той, которая описана здесь: namespace and xpath Но ответов нет, а у меня немного другое. Я гость, что ответ на эту проблему может помочь мне ...
Итак, как я могу задать пространство имен для преобразования в xades4j?
Да, я огляделся, чтобы посмотреть, где я могу установить setXPathNamespaceContext. Я видел пример, где элемент xpath имел пространство имен: –
brun0sa
Добавлена поддержка пространств имен в запросах XPath. – lgoncalves