簡體   English   中英

Java方法適用於1.5但不適用1.6

[英]Java method works in 1.5 but not 1.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;
   }

它正在崩潰“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.4和1.5還是1.5和1.6之間,但是Sun附帶的JVM附帶的Xalan庫改變了它們的包名。 大約兩年前我碰到了類似的東西。 我認為我必須做的是明確地發布我自己的xalan實現來解決問題。

更新:這可能是我想到的,雖然它仍然可能與您的問題鏈接文本有關

已知這個問題發生在具有舊xerces.jar的JDK 1.6上,當在classpath上時,它提供了自己的DocumentBuilderFactory。

使用平台默認工廠時不會發生此問題。

您可能需要檢查WEB-INF / lib或同等產品。

這是因為jar(Xalan)版本沖突的問題。 取出罐子試一試

我在代碼中遇到了同樣的java.lang.AbstractMethodError

當時更改任何庫的版本不是一個選項,但我通過與神秘工作的其他代碼進行比較找到了一種解決方法。 也許這可能會幫助其他人。

這一切都與我傳入DOMSource()的Document有關。 最初我以標准方式創建了一個文檔:

    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();

現在我不再得到例外。

我遇到了同樣的問題,並在我的應用程序的類路徑中用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);

您可能想要使用Xerces的最新版本(我相信它應該與JDK1.6兼容)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM