java - 如何在 Java XML 中使用引用 URI 加载外部资源

标签 java xml reference digital-signature

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

我希望加载引用会像

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

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

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

编辑:

我要加载的引用是:

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

最佳答案

完全是在摸黑(你真的需要粘贴堆栈跟踪...),但现在开始了。

我快速查看了 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 东西之前尝试一下。

关于java - 如何在 Java XML 中使用引用 URI 加载外部资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8008925/

相关文章:

c++ - 如何设计可反弹的大对象的类依赖?

java - 如何使用 Java 在 XML 中考虑标签名称及其属性来获取值

没有 schemaLocation 的 XMLSchema 和 XMLSchema 实例 namespace

c++ - 枚举引用参数传输而不是 int 引用参数

java - 从jsp调用java类中的main方法?

java - 使用 jConsole 连接远程 tomcat JMX 实例

java - 为什么以下 Java 8 管道在 Eclipse 中报告类型不匹配?

java.sql.BatchUpdateException : Unknown column 'xxx' in 'field list'

xml - 嵌入式设备GUI设计工具

c - 使用 GCC 编译时出错