我已幸福地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(源,结果);”与异常行:

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.4,1.5或1.5和1.6之间,但与JVM从孙运的Xalan库改变了他们的包名。我跑进大约2年前类似的东西。我想我要做的就是明确运输我自己xalan的实施来解决这个问题。

UPDATE:这可能是我在想什么的,虽然它仍然可能与您的问题的链接文本

其他提示

此问题已知与一个较旧的xerces.jar其中,当在类路径,提供了它自己的DocumentBuilderFactory上JDK 1.6发生。

使用平台默认出厂时,不会发生问题。

您可能要检查你的WEB-INF / lib或同等学历。

这是因为罐(Xalan的)版本冲突的问题。取出罐子,并给予一试

我会遇到这样的相同的 java.lang.AbstractMethodError 在我的代码。

在当时改变任何库的版本是不是一种选择,但我发现了一个解决方法通过与神秘合作等码比较。也许这力量帮助别人那里。

有均与我送入DOMSource的文档()做。的最初我已经建立了标准的方式的文件:

    private static Document documentFromInputStream(InputStream in) throws ParserConfigurationException, SAXException, IOException {
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(new InputSource(in));
    return doc;
}

工作解决此问题后,我改变了工厂生产线如下:

        DocumentBuilderFactory factory = new DocumentBuilderFactoryImpl();

现在我不再得到的异常。

您可能需要使用最新版本的Xerces从(我相信这应该是compitable与JDK1.6)

我有同样的问题和替换xercesImpl-2.11.0.jar的xercesImpl-2.0.2.jar文件在我的应用程序的类路径。它的工作的罚款。

这为我工作。

 TransformerFactory factory = TransformerFactory.newInstance();
    Transformer transformer = factory.newTransformer();
            transformer.setOutputProperty(OutputKeys.METHOD, "xml");
    DOMSource source = new DOMSource(doc);
            StreamResult result = new StreamResult(sWout);
            transformer.transform(source, result);
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top