La méthode Java fonctionne en 1.5 mais pas en 1.6
J'ai une application qui a été en cours d'exécution heureusement sous Java 1.5 pour environ une année. Nous avons juste eu les cases mis à jour et a la version 1.6 de Java installée.
Après le déploiement de l'application sur le nouveau serveur, nous avons trouvé que la demande est en train de lancer une exception lorsqu'il tente de transformer du XML. Nous ne pouvions pas comprendre pourquoi ce qui se passait jusqu'à ce que nous avons déployé localement et la même chose s'est produite. Après la modification de la SDK v1.5 le problème s'est arrêté et l'application s'exécute correctement.
Voici la méthode de la source:
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;
}
C'est de s'écraser sur le "transformateur.transformer(source, result);" la ligne, à l'exception:
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)
Personne ne sait de toute modification apportée à Java entre les deux versions qui serait à l'origine? Ce serait la meilleure solution?
Merci pour votre aide.
source d'informationauteur James Camfield
Vous devez vous connecter pour publier un commentaire.
Je ne me souviens pas si c'était entre 1.4 et 1.5 1.5 et 1.6, mais Xalan bibliothèques fournies avec la JVM de Sun changé leur nom de package. Je suis tombé sur quelque chose de similaire d'environ 2 ans. Je pense que ce que j'avais à faire était explicitement l'envoi de ma propre xalan mise en œuvre pour résoudre le problème.
Mise à JOUR: C'était peut-être ce à quoi je pensais, mais il pourrait être lié à votre problème texte du lien
Ce problème est connu pour survenir sur JDK 1.6 avec un vieux xerces.jar qui, quand sur le chemin de classe dispose de son propre DocumentBuilderFactory.
Le problème ne se produit pas lors de l'utilisation de la plate-forme par défaut d'usine.
Vous voudrez peut-être vérifier votre WEB-INF/lib ou l'équivalent.
C'est le problème parce que de pot(Xalan) conflit de version. Retirez les pots et essayez de donner une
Je rencontre ce même java.lang.AbstractMethodError dans mon code.
Au moment de changer la version des bibliothèques n'était pas une option, mais j'ai trouvé une solution de contournement en comparant avec d'autres code qui a mystérieusement travaillé. Peut-être que cela pourrait aider d'autres.
Tout cela avait à voir avec le Document que j'ai passé dans DOMSource(). À l'originej'avais créé un document de façon standard:
À contourner ce problèmej'ai changer la ligne de l'usine comme suit:
Maintenant je n'ai plus l'exception.
Vous pouvez utiliser la dernière version de Xerces (je crois qu'il devrait être compitable avec le JDK1.6)
J'ai eu le même problème & a remplacé l'xercesImpl-2.0.2.jar fichier avec xercesImpl-2.11.0.jar dans le chemin de classe de ma demande. Son travail très bien.
Cela a fonctionné pour moi.