2017-02-15 7 views
0

以前のWebSphere Java EEアプリケーションをJBoss EAP 6.3に移行するとき、Castor 1.0のorgのmarshall(Object)メソッドを呼び出すときにランタイム例外がスローされました。 exolab.castor.xml.Marshallerオブジェクト:JBoss EAP 6.3/Castor 1.0 - MappingException:クラスが見つかりません

org.exolab.castor.mapping.MappingException: Nested error: org.exolab.castor.mapping.MappingException: Could not find the class {fully qualified Java class name}

(。マーシャラーはXMLにオブジェクトをシリアル化しようとしている)

私は明白なクラスパスの問題を見ません。 JBoss Developer Studioを使用してうまくコンパイルされたこのアプリケーションが実行時に失敗する理由はまったくありません。

この問題は、偶然にもmapping.xmlファイルの最初のクラスでない限り、私がシリアライズしようとしているクラスではなく、mapping.xmlファイルで説明されている最初のJavaクラスで発生します。

問題は何か、解決策は何ですか?

答えて

0

グーグルを精練した後、私は2002年から、このディスカッションスレッドで解決策を見つけた:そのディスカッションスレッド内

https://developer.jboss.org/thread/21611

パーフレッドロニー:

のJBossのlib castor.jarが常駐あなたのwebappクラスローダーの親であるクラスローダー。 Castorはイントロスペクションに依存し、Webappやスレッドコンテキストではなく、クラスローダーコンテキストを使用してマッピングされたクラスを解決しようとします。したがって、マップされたアプリケーションクラスは見つかりません.... Castorはデフォルトで現在のスレッドコンテキストクラスローダーを使用する必要がありますが、そうではありません。これは、イントロスペクションに頼っている他のオープンソースミドルウェアプロジェクトの失敗した共通点です。カクタス。

そのスレッドで推奨アドバイスに続いて、私の代わりにクラスローダ引数を受け取るコンストラクタを使用し、org.exolab.castor.mapping.Mappingのデフォルトコンストラクタを使用するのではなく、に私のコードを変更し、私が使用私が直列化しようとしているオブジェクトのクラスのClassLoader。

Object objectToSerialize = ... 

// I previously used Mapping's default constructor 
Mapping mapping = new Mapping(objectToSerialize.getClass().getClassLoader()); 
// Set other properties of mapping, such as entityResolver, mapping file, etc. 

StringWriter stringWriter = new StringWriter(); 
Marshaller marshaller = new Marshaller(stringWriter); 
marshaller.setMapping(mapping); 
marshaller.marshal(objectToSerialize); 

// stringWriter now contains the serialized data from objectToSerialize 

フレッド・ロニーのヒントが誰かを助けてくれることを願っています。問題と解決策をオンラインで見つけるのに私はしばらく時間がかかりました!

関連する問題