Java方法适用于1.5,但不适用于1.6

2022-09-03 18:04:46

我有一个应用程序,它已经在Java 1.5下愉快地运行了大约一年。我们刚刚更新了这些盒子,并安装了Java 1.6。

将应用部署到新服务器后,我们发现应用程序在尝试转换某些 XML 时会引发异常。我们无法理解为什么会发生这种情况,直到我们在本地部署它,并且同样发生了。将 SDK 更改为 v1.5 后,问题停止,应用程序运行正常。

以下是该方法的来源:

import java.io.StringWriter;
import javax.xml.transform.Result;
import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Element;
import org.w3c.dom.Node;


   public static String xmlToString(Node node) {
    try {
        Source source = new DOMSource(node);
        StringWriter stringWriter = new StringWriter();
        Result result = new StreamResult(stringWriter);
        TransformerFactory factory = TransformerFactory.newInstance();
        Transformer transformer = factory.newTransformer();
        transformer.transform(source, result);
        return stringWriter.getBuffer().toString();
    } catch (TransformerConfigurationException e) {
        e.printStackTrace();
    } catch (TransformerException e) {
        e.printStackTrace();
    }
    return null;
   }

它在“transformer.transform(source, result);”行上崩溃,但例外:

Exception in thread "main" java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.getXmlStandalone()Z
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.setDocumentInfo(DOM2TO.java:373)
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:127)
    at com.sun.org.apache.xalan.internal.xsltc.trax.DOM2TO.parse(DOM2TO.java:94)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:662)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:708)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:313)

有谁知道在两个版本之间对Java所做的任何更改都会导致这种情况?最简单的解决方法是什么?

感谢您的帮助。


答案 1

我不记得它是在1.4和1.5之间,还是1.5和1.6之间,但是Sun的JVM附带的Xalan库更改了他们的软件包名称。大约2年前,我遇到了类似的事情。我认为我必须做的是明确地发布我自己的xalan实现来解决问题。

更新:这可能是我想到的,尽管它仍然可能与您的问题链接文本有关


答案 2

已知此问题发生在具有较旧的 xerces 的 JDK 1.6 上.jar当在类路径上时,它会提供自己的 DocumentBuilderFactory。

使用平台默认出厂时不会出现此问题。

您可能需要检查您的 WEB-INF/lib 或等效项。


推荐