我正在将应用程序从Java 8迁移到Java 11。在Java 8中,我的输入XML文件被正确解析,但是在Java 11中
nodeList.getLength()
正在回归
0
.
请参考我总是得到错误的代码:
Cannot find signature
.
我试过用
document.getElementsByTagName("Signature")
而不是
getElementsByTagNameNS()
,返回正确的
length
. 然而
unmarshalXMLSignature()
然后,方法给出了一个错误,文档实现必须支持DOM级别2,并且具有名称空间意识。
使用有什么挑战吗
GetElementsByTagnamens()。
Java 11中的方法?
private DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance();
. . .
document = documentBuilderFactory.newDocumentBuilder().parse(input);
final NodeList nodeList = document.getElementsByTagNameNS(XMLSignature.XMLNS, "Signature");
if (nodeList.getLength() == 0) {
throw new SecurityException("Cannot find signature");
}
final XMLValidateContext validateContext = new DOMValidateContext(newX509KeySelector(), nodeList.item(0));
final XMLSignature signature = getXMLSignatureFactory().unmarshalXMLSignature(validateContext);
. . .
编辑1:输入XML是
999
TRXX
01-01-2016
never
drwwy
true
drwwy module
pnp
true
Index Number Management module
l5Cl4E=R3zBkE=
CN=TRXX Inc,OU=Product Development,O=TRXX Inc,L=Scotle,ST=Atlanta,C=USMIY
编辑2:我想,早些时候我正在注入DojtBuffDeDeFrand工厂,这是JDK的一部分,但是它不再被允许在Java 11中使用。这就是我使用documentBuilderFactory.newInstance()实例化它的原因,但使用这个实例,节点列表的长度为零。我们是否可以使用其他方法来实例化DocumentBuilderFactory对象?