実稼働環境で長い間実行されている Web アプリケーションの 1 つですが、ごく最近では、大量のトランザクションがあるときに奇妙なエラーが発生しています。問題の根本的な原因を正確に突き止めることはできませんでしたが、以前のバージョンである WebSphere 6 で、アプリ サーバーで使用される Xalan バージョンのバグに関連するいくつかの同様の問題が見つかりました。私たちのアプリケーション サーバーは実際には WebSphere 7 であり、内部で Xalan を使用していないことに加えて、修正されているはずです。私たちのアプリケーションには Xalan jar も埋め込まれていません。修正するには、アプリケーション自体を再起動するだけです。重要な注意事項の 1 つは、Document がキャッシュされ (docs.get(tableName))、XPath 評価を実行するために再利用されることです。毎回ドキュメントを解析するコストを回避するためにこれを行いました。
アプリコードは
Document doc = null;
try {
doc = docs.get(tableName);
if (doc == null)
return null;
XPathFactory xFactory = XPathFactory.newInstance();
XPath xpath = xFactory.newXPath();
XPathExpression expr = xpath.compile(toUpper(xPathQuery));
Object result = expr.evaluate(doc, XPathConstants.NODESET);
return (NodeList) result;
} catch (XPathExpressionException e) {
logger.error("Error executing XPath", e);
}
エラースタックはこちら
javax.xml.transform.TransformerException: Unknown error in XPath.
at java.lang.Throwable.<init>(Throwable.java:67)
at javax.xml.transform.TransformerException.<init>(Unknown Source)
at org.apache.xpath.XPath.execute(Unknown Source)
at org.apache.xpath.jaxp.XPathExpressionImpl.evaluate(Unknown Source)
Caused by: java.lang.NullPointerException
at org.apache.xerces.dom.ElementNSImpl.getPrefix(Unknown Source)
at org.apache.xml.dtm.ref.dom2dtm.DOM2DTM.processNamespacesAndAttributes(Unknown Source)
at org.apache.xml.dtm.ref.dom2dtm.DOM2DTM.nextNode(Unknown Source)
at org.apache.xml.dtm.ref.DTMDefaultBase._nextsib(Unknown Source)
at org.apache.xml.dtm.ref.DTMDefaultBase.getNextSibling(Unknown Source)
at org.apache.xml.dtm.ref.DTMDefaultBaseTraversers$ChildTraverser.next(Unknown Source)
at org.apache.xpath.axes.AxesWalker.getNextNode(Unknown Source)
at org.apache.xpath.axes.AxesWalker.nextNode(Unknown Source)
at org.apache.xpath.axes.WalkingIterator.nextNode(Unknown Source)
at org.apache.xpath.axes.NodeSequence.nextNode(Unknown Source)
at org.apache.xpath.axes.NodeSequence.runTo(Unknown Source)
at org.apache.xpath.axes.NodeSequence.setRoot(Unknown Source)
at org.apache.xpath.axes.LocPathIterator.execute(Unknown Source)
... 16 more
これは私が言及したのと同様の問題です。 http://www-01.ibm.com/support/docview.wss?uid=swg1PK42574
ありがとう。