Ho un'applicazione che è stata eseguita felicemente in Java 1.5 per circa un anno. Abbiamo appena aggiornato le caselle e installato Java 1.6.Il metodo Java funziona in 1.5 ma non 1.6
Dopo aver distribuito l'applicazione sul nuovo server, è stato rilevato che l'applicazione genera un'eccezione quando tenta di trasformare un file XML. Non siamo riusciti a capire perché questo stava accadendo finché non lo abbiamo implementato localmente e lo stesso è successo. Dopo aver cambiato l'SDK in v1.5 il problema si è interrotto e l'applicazione funziona correttamente.
Ecco sorgente del metodo:
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;
}
Si infrangono sulla "transformer.transform (fonte, risultato);" linea con eccezione:
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)
Qualcuno sa di eventuali modifiche apportate a Java tra le due versioni che causare questo? Quale sarebbe la soluzione più semplice?
Grazie per il vostro aiuto.
Sembra che tu abbia un'implementazione di Xerx in conflitto da qualche parte nel tuo percorso di classe. – akarnokd
Quali jar relativi a xml si trovano nel classpath? – Yishai