Java方法工作在1.5而不是1.6
-
12-09-2019 - |
题
我已幸福地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);