我正在尝试从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#">
答案 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值的位置。