将xmlns:mdssi添加到XMLObject

时间:2011-04-02 10:06:07

标签: java xml openxml xml-namespaces

我在微软office文件(docx,xl​​sx,pptx)上做一个关于数字签名的java项目。

我可以使用:

创建一个将在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,...

然而,java生成的这个xml签名却没有 包含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>代码

但java中的XMLObject无法添加此内容,它只有IdMimeTypeEncodingContent

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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) 我正在为W3C Widgets挖掘XML数字签名。

  1. 签名/对象
    - 我第一次看到API似乎很容易。我刚刚创建了XMLObject,如上所述。

  2. 但是,正如规范所说,我必须插入一个Reference来引用由{1}创建的{1}}。 - 什么?如何引用输出节点参考?
    - 如何返回甚至尚未创建的节点数据?

  3. 我意识到我应该准备一个XMLObject包含org.w3c.dom.Document元素(及其子目的)并将其用作参考。
    - &GT;使用<Object>,您可以从此文档的getDocumentElement()结果中返回URIDereferencer


  4. 所以这就是解决方案。

    1. 创建一个包含NodeSetData元素的org.w3c.dom.Document实例作为其根元素。您可以根据需要添加任何属性和子元素。
    2. 您可以生成XML签名作为分离或<Object>方案。
    3. 检查一下。这是我找到解决方案的地方。我认为你的问题将得到解决 http://today.java.net/pub/a/today/2006/11/21/xml-signature-with-jsr-105.html#generate-an-enveloping-signature

      抱歉我的英语不好。我是韩国人。 :)

      我最诚挚的问候。 金权