加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML dig sig错误升级到java7u25后

发布时间:2020-12-16 08:03:13 所属栏目:百科 来源:网络整理
导读:我有一个用于签署XML文档的Java应用程序。将Java升级到最新版本(Java7u25)后,它将停止工作。我收到以下错误: javax.xml.crypto.dsig.XMLSignatureException:javax.xml.crypto.URIReferenceException: com.sun.org.apache.xml.internal.security.utils.reso
我有一个用于签署XML文档的Java应用程序。将Java升级到最新版本(Java7u25)后,它将停止工作。我收到以下错误:
javax.xml.crypto.dsig.XMLSignatureException:
javax.xml.crypto.URIReferenceException: 
com.sun.org.apache.xml.internal.security.utils.resolver.ResourceResolverException:
Cannot resolve element with ID ...

回到java7u21解决问题。 XML Dig Sig API是否有任何改变导致此错误?

同样的问题在这里由于演进,JVM似乎是一个bug。

我已经把它调到了com.sun.org.apache.xml.internal.security.utils.resolver.implementations.ResolverFragment

在java 7u21&之前:

91: // Element selectedElem = doc.getElementById(id);
92: selectedElem = IdResolver.getElementById(doc,id);

在java 7u25:

87: selectedElem = doc.getElementById(id);
    //...
93: if (secureValidation) {

secureValidation是指Java Sig验证的Java 7u25演进(见changelog),所以在进行这一演变的同时,他们必须已经破坏了其他的东西。

我们已经解决了这个问题,提供了一个自定义javax.xml.crypto.URIDereferencer到javax.xml.crypto.dom.DOMCryptoContext.setURIDereferencer(URIDereferencer),它能够解析尚未在DOM文档树中的节点(片段在XMLObject中)。

我现在向Oracle报告这个问题,我会用错误ID更新答案。

编辑:在apache SVN发现

编辑2:感谢this bug report我已经明白,这是XML“Id”属性处理中的演变。

以前版本的java / JSR-105 / SANTUARIO过去对document.getElementById(…)中使用的“Id”属性非常宽容,但是这个新版本需要一个标识为ID XML的属性。我的意思是命名属性“Id”或“ID”不够,您需要将其标记为ID,最终通过XSD / DTD模式验证。

不幸的是,我遵循一个无效的模式,因此不能被Java解析。

如果您处于同一情况,请参阅我的解决方案。否则,如果您的XML文档确实有一个有效的模式,请查看@sherb solution http://stackoverflow.com/a/17437919/233906

幸运的是,您可以使用像Element.setIdAttributeNode(org.w3c.dom.Attr,boolean)这样的方法将属性标记为ID。

结合一些XPath,如descendant-or-self :: * / @ Id来获取Attr“Id”节点加上一些Java((Element)attr.getParentNode())。setIdAttributeNode(attr,true)应该让你离开麻烦。

但要小心:setIdAttributeXXX()仅对当前文档&节点。如果克隆/采用/导入,则需要在每个DOM树的新节点上执行setIdAttributeXXX()

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读