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

Jam*_*eld 14 java xml incompatibility java-5 java-6

我有一个应用程序,它已经在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;
   }
Run Code Online (Sandbox Code Playgroud)

它正在崩溃"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)
Run Code Online (Sandbox Code Playgroud)

有谁知道这两个版本之间对Java做出的任何改变会导致这种情况吗?什么是最容易解决的问题?

谢谢你的帮助.

Chr*_*ran 18

我不记得它是介于1.4和1.5还是1.5和1.6之间,但是Sun附带的JVM附带的Xalan库改变了它们的包名.大约两年前我碰到了类似的东西.我认为我必须做的是明确地发布我自己的xalan实现来解决问题.

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

  • 您应该只使用JAXP API或依赖于xerces库本身,而不是Sun提供的实现(在不同版本之间会有所不同). (7认同)

小智 7

已知这个问题发生在具有旧xerces.jar的JDK 1.6上,当在classpath上时,它提供了自己的DocumentBuilderFactory.

使用平台默认工厂时不会发生此问题.

您可能需要检查WEB-INF/lib或同等产品.