2014-09-11 6 views
1

Я использую 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?

ответ

0

Nice catch! В настоящее время нет способа указать это. Тем не менее, я думаю, что базовый API Apache Santuario API поддерживает это, используя метод setXPathNamespaceContext. Похоже, что вывод XPath будет содержать объявления пространства имен. Я проверю это и добавлю поддержку, если это возможно.

+0

Да, я огляделся, чтобы посмотреть, где я могу установить setXPathNamespaceContext. Я видел пример, где элемент xpath имел пространство имен: brun0sa

+0

Добавлена ​​поддержка пространств имен в запросах XPath. – lgoncalves

 Смежные вопросы

  • Нет связанных вопросов^_^