如何使用Java XML中的引用URI加载外部资源

时间:2011-11-04 12:04:27

标签: java xml reference digital-signature

我正在尝试从URI引用中提取XML节点。此URI引用由XAdES4j签名者生成,可以引用同一XML文件或同一文件夹中的节点。

我希望加载引用就像

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

然而,这只是给我一个NullPointerException没有有用的消息。两个参数都是非null,在一个简单的例子中,URI属性是“data.xml”,referenceDoc基URI是“/Users/ryan/.../test-files/signature.xml.data.xml驻留在相同的test-files目录。

URI可以指向文件中的元素,所以我希望有一个参考加载器可以为我处理这种复杂性。我错过了什么?!

编辑:

我想加载的引用是:

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

2 个答案:

答案 0 :(得分:1)

黑暗中的总刺(你真的需要粘贴堆栈痕迹......),但是这里就是。

我快速浏览了一下ResourceResolver的来源: http://java2s.com/Open-Source/Java-Document/XML/xml-security-1.4.3/org/apache/xml/security/utils/resolver/ResourceResolver.java.htm

我可以看到,由于ResourceResolver中的非初始化_resolverVector字段,将会出现NullPointerException,除非已经在ResourceResolver上调用了静态init()方法。在init()方法之上,有一个注释:

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

ResourceResolver本身似乎没有触发该调用 - 你这样做了吗?如果没有,您应该在使用任何org.apache.xml.security之前尝试它。

答案 1 :(得分:0)

首先,您需要了解导致NullPointerException的确切原因,因此我建议将此代码拆分出来,以便您可以看到null值的位置。