spi*_*eap 10 java xml reference digital-signature
我试图从URI引用中提取XML节点.此URI引用由XAdES4j签名者生成,并且可以引用同一XML文件或同一文件夹中的节点.
我希望加载引用会很简单
XMLSignatureInput referencedXML = ResourceResolver.resolveStatic(referenceNode.getAttributeNode("URI"), referenceDoc.getBaseURI());
Run Code Online (Sandbox Code Playgroud)
然而,这只是给我一个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#">
Run Code Online (Sandbox Code Playgroud)
完全在黑暗中刺探(你真的需要粘贴堆栈跟踪......),但这里是。
我快速浏览了 ResourceResolver 的源代码: http://java2s.com/Open-Source/Java-Document/XML/xml-security-1.4.3/org/apache/xml/security/utils/resolver/资源解析器.java.htm
我可以看到,由于 ResourceResolver 中未初始化 _resolverVector 字段,将会出现 NullPointerException,除非已经在 ResourceResolver 上调用了静态 init() 方法。在init()方法上方,有一条注释:
The init() function is called by org.apache.xml.security.Init.init()
Run Code Online (Sandbox Code Playgroud)
ResourceResolver 本身似乎不会触发该调用 - 您会触发该调用吗?如果没有,您应该在使用任何 org.apache.xml.security 内容之前尝试一下。