добавить xmlns: mdssi в XMLObject - PullRequest
       2

добавить xmlns: mdssi в XMLObject

0 голосов
/ 02 апреля 2011

Я делаю Java-проект о цифровой подписи в файлах Microsoft Office (docx, xlsx, pptx).

Я могу создать объект, который будет добавлен в подпись xml, используя:

XMLSignatureFactory xml_fac = XMLSignatureFactory.newInstance("DOM");

XMLObject xml_object = XMLSignatureFactory.newXMLObject(...
ArrayList<XMLObject> obj_list = new ArrayList<XMLObject>();
obj_list.add(xml_object);

XMLSignature xml_sig = xml_fac.newXMLSignature(...,...,obj_list,...

однако эта xml-подпись, сгенерированная java, не содержит xmlns для типа XMLObject

для Microsoft Office для распознавания этого объекта xml:

<Object>
  <SignatureProperties>
    <SignatureProperty Id="idSignatureTime" Target="#idPackageSignature">
      <mdssi:SignatureTime>
        <mdssi:Format>YYYY-MM-DDThh:mm:ssTZD</mdssi:Format>
        <mdssi:Value>2011-04-02T10:10:10Z</mdssi:Value>
      </mdssi:SignatureTime>
    </SignatureProperty>
  </SignatureProperties>
</Object>

я должен добавить:

xmlns:mdssi="http://schemas.openxmlformats.org/package/2006/digital-signature"

в открывающий тег <Object>

, но XMLObject в Java не может добавить это, он имеет только Id, MimeTypeEncoding и Content

есть предложения?

1 Ответ

0 голосов
/ 10 мая 2011
SignatureProperty property = XML_SIGNATURE_FACTORY.newSignatureProperty(
    ...);

SignatureProperties properties = XML_SIGNATURE_FACTORY.newSignatureProperties(
    Collections.singletonList(property), ...);

XMLObject object = XML_SIGNATURE_FACTORY.newXMLObject(
    Collections.singletonList(properties), ...);

Версия 2:

Вот и история.Я использую Java.(JSR-105) Я копаю цифровую подпись XML для виджетов W3C.

  1. для подписи / объекта
    - Кажется, легко, когда я впервые увидел API.Я только что создал XMLObject, как указано выше.

  2. Но, как сказано в спецификации, я должен вставить Reference, ссылаясь на XMLObject, созданный 1.
    - Что?Как сделать ссылку на выходной узел?
    - Как вернуть данные для узлов, которые еще не созданы?

  3. Я понял, что должен подготовить org.w3c.dom.Document содержащий элемент <Object> (и его дочерние элементы по назначению) и используйте его для ссылки.
    -> С помощью URIDereferencer вы можете вернуть NodeSetData из результата getDocumentElement () этого документа.


Итак, вот решение:

  1. Создайте экземпляр org.w3c.dom.Document, содержащий элемент <Object> в качестве корневого элемента.Вы можете добавлять любые атрибуты и дочерние элементы по своему желанию.
  2. И вы можете генерировать XML-подпись как отдельную или enveloping схему.

Проверьте это.Вот где я нашел решение.И я думаю, что ваша проблема будет решена.
http://today.java.net/pub/a/today/2006/11/21/xml-signature-with-jsr-105.html#generate-an-enveloping-signature

Извините за мой плохой английский.Я кореец.:)

Мои наилучшие пожелания.Джин Квон

...