2017-11-22 37 views
3

正確には私の質問は、の代替方法は何ですか?Digester3Digester3のDigesterLoader.createDigester(url)の代わりに

コモンズ-消化:1.8.1コード

URL url; 
    ClassLoader curClassLoader = this.getClass().getClassLoader(); 
    url = curClassLoader.getResource("filepath"); 

    if (url != null) {   
     Digester tempDigester = DigesterLoader.createDigester(url); 
     ---- 
     ---- 
     } 

今、私はorg.apcahe.commons.Digester3-3.2commons-digester-1.8.1をアップグレードしているし、新しいjarファイルに私はDigesterLoader.createDigester(url)を置き換えることができますどのようにcreateDigester(ur);

として任意の方法が表示されません新しいAPIを使用してDigesterオブジェクトを取得します。

コモンズ-消化:3.2コード事前に

URL url; 
    ClassLoader curClassLoader = this.getClass().getClassLoader(); 
    url = curClassLoader.getResource("filepath"); 

    if (url != null) {   
     Digester tempDigester = ???; 
     ---- 
     ---- 
     } 

感謝。

答えて

1

は1.8バージョンが何をするかを正確に確認しますが、あなたのURLを仮定すると、このようなものは、トリックを行う必要があるXMLベースのルールのストリームに解決はないか:

import org.apache.commons.digester3.Digester; 
import org.apache.commons.digester3.binder.DigesterLoader; 
import org.apache.commons.digester3.binder.RulesModule; 
import org.apache.commons.digester3.xmlrules.FromXmlRulesModule; 

final URL url = curClassLoader.getResource("filepath"); 

RulesModule rules = new FromXmlRulesModule() { 
    @Override 
    protected void loadRules() { 
    loadXMLRules(url); 
    } 
}; 

DigesterLoader loader = DigesterLoader.newLoader(rules); 
Digester digester = loader.newDigester(); 

あなたはおそらくあなたを確認する必要があります匿名サブクラス内で使用するための最終的なURL。次の簡単なルールでテスト

ファイル:

<?xml version='1.0'?> 
<!DOCTYPE digester-rules PUBLIC '-//Apache Commons //DTD digester-rules XML V1.0//EN' 'http://commons.apache.org/digester/dtds/digester-rules-3.0.dtd'> 
<digester-rules> 
    <pattern value='data'> 
    <object-create-rule classname='test.digester.BasicTest$ClassA'/> 
    <bean-property-setter-rule pattern='name' propertyname='name'/> 
    </pattern> 
</digester-rules> 

はDOCTYPE宣言が必要ですが、またはXML宣言なしで動作します。 DOCTYPEを使用せずに実行すると、次のようになります。

Parse Error at line 1 column 17: Document root element "digester-rules", must match DOCTYPE root "null" 
+0

@PraveenKumarMekalaは簡単なテストファイルで動作します。読みたいxmlルールの内容は何ですか? – Barney

+0

私の例外を掘り下げて疑問に思っていますが、<!DOCTYPE digester-rules PUBLIC "を定義することは必須ですか? - // Apache Commons // DTD digester-rules XML V1.0 // EN" "http:// commons .apache.org/digester/dtds/digester-rules-3.0.dtd ">私のXMLファイルには? –

+0

@PraveenKumarMekalaはい、DOCTYPEは必須です。上記のサンプルルールを参照してください。ロードしようとしているルールファイルの簡単なバージョンを投稿できますか? – Barney

関連する問題