2009-08-10 14 views
14

Java 1.5で約1年間はうまく動作しているアプリケーションがあります。ボックスを更新し、Java 1.6をインストールしました。Javaメソッドは1.5では動作しますが、1.6では動作しません

新しいサーバーにアプリケーションをデプロイした後、アプリケーションはXMLを変換しようとすると例外をスローしています。なぜこれがローカルに展開され、同じことが起こるまでこれが起こったのか理解できませんでした。 SDKをv1.5に変更すると、問題は停止し、アプリケーションは正常に動作します。 "transformer.transform(ソース、結果);" それは上のクラッシュだ

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; 
    } 

:ここ

は、メソッドのソースです行の例外:

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) 

これを引き起こす2つのバージョンの間でJavaに加えられた変更を知っている人はいますか?一番簡単な修正は何ですか?

ありがとうございました。

+4

クラスパスのどこかにXerxesの実装が矛盾しているようです。 – akarnokd

+1

xml関連のjarファイルはクラスパスに含まれていますか? – Yishai

答えて

18

1.4から1.5または1.5から1.6の間であったのを覚えていませんが、SunからJVMに同梱されているXalanライブラリがパッケージ名を変更しました。私は約2年前に同様のものに遭遇しました。私は、問題を解決するために自分自身のxalan実装を明示的に出荷するしかないと思います。

UPDATE:これは、それはまだあなたの問題link text

+7

JAXP APIのみを使用するか、xercesライブラリ自体に依存することになっています。これは、リリースによって異なります。 – wds

+1

私はこれが起こっているケースを見て、コードがTransformerを作成するためにTransformerFactoryを呼び出してからTransformerをtransform()し、この例外をスローしています。これは正しい方法です。コードはJava 5で正常に動作していましたが、Java 6にアップグレードした後、この例外がスローされます。私自身のxalanのコピーを含めて、問題を修正しました。 –

+0

xalanのコピーはどこにありますか?どのように私はoracleによって与えられたものを取り込み、置き換えるのですか? –

3

それが原因瓶(Xalanの)バージョンの競合の問題があるに関連している可能性がけれども私は、考えていた何だったかもしれません。 jarファイルを削除して試してみるあなたがXercesのから最新バージョンを使用したい場合があり

+0

新しいXerces JARを追加しようとしましたが、これはトップアップの回答ごとに解決しなかったので、あなたの提案を試して、Xerces JARをビルドパスから削除しました。 – Kairan

+0

XALANはrt.jarに入っていますあなたはjre/libパスからjarファイルを削除するべきですか? –

0

を与える。この問題は、古いのXercesとJDK 1.6で発生することが知られている

7

(私はそれがJDK1.6でcompitableべきであると考えています)。 jar。クラスパス上にあるときに、独自のDocumentBuilderFactoryを提供します。

プラットフォームのデフォルトファクトリを使用しているときに問題は発生しません。

WEB-INF/libまたはそれに相当するものをチェックしてください。

2

私はこの同じ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(); 

今、私はもはや例外を取得していません。

+0

素晴らしい! jarの競合に対処する必要はありません。ありがとうございました。 –

0

私はxercesImpl-2.0.2の代わりに&と同じ問題がありました。私のアプリケーションのクラスパスにあるxercesImpl-2.11.0.jarのjarファイルそのうまく動作します。

0

これは私のために働いた。

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); 
関連する問題