2

JAXBを使用してJavaオブジェクトをマーシャリングしているときに問題が発生しました。Webサービスを独立したアプリケーションとして実行すると、正常に機能します。

プロジェクトと統合し、生成されたJavaクラスを使用すると、マーシャリング中に例外が発生します

RequestImplクラスもそのスーパークラスも、このコンテキストのいずれにも認識されていません。

JAXBインスタンスを生成するときに、次のステートメントを使用します。

JAXBContext jaxb = JAXBContext.newInstance("com.eos.hotels.API.Request");

私は2つの別々のxsdsを持っています。1つは用Request、もう1つは用Responseです。

生成されたJavaクラスは、次のようにフォルダ構造に格納されます。

API->リクエスト
API->応答

上記の両方のフォルダに、ObjectFactory.javaが作成され、jaxb.propertiesそこにもあります。

また、上記の各フォルダ内implにすべてのImplファイルを含むフォルダが作成され、このimplフォルダ内にruntimeフォルダが作成されます。

XSDからのすべてはxs:elementインターフェースとして作成され、Implsクラスのみです。また、生成されたJavaファイルにはXML注釈はありません。

ここで何が悪いのか誰か教えてもらえますか?

この問題は、フォルダー構造が原因ですか、それともXML注釈が存在しないために発生していますか?

注釈がなくても問題ないことをインターネットで読んだ。

生成されたimplクラスをと同じフォルダーにコピーしようとしましたObjectFactory.javaが、それも機能しませんでした。

4

4 に答える 4

1

JAXBContextオブジェクトでtoStringメソッドを呼び出してみてください。JAXB1クラスを使用しているため、com.eos.hotels.API.impl.runtime.DefaultJAXBContextImplのようなものが表示されます。そうでない場合は、com.eos.hotels.APIパッケージにjaxb.propertiesファイルがないか、com.eos.hotels.API.impl.runtimeパッケージを削除した可能性があります。

于 2013-01-23T14:54:01.513 に答える
0

複数のディレクトリから生成されたクラスでJAXBContextを作成する場合は、コロン「:」で区切られたすべてのパッケージ名を含める必要があります。

 JAXBContext jaxb = JAXBContext.newInstance("com.example.package1:org.example.package2");
于 2012-04-27T12:37:43.693 に答える
0

したがって、jaxb1を使用し、2つの異なるXSDからjaxbクラスを生成し、2つの別々の名前空間URIを宣言することをお勧めします(そうしないと、JAXBが台無しになります)。

まず、2つのXSDを組み合わせて、単一の名前空間URIを使用することを検討します。同じパッケージ構造を使用することも、単一のパッケージ構造にすることもできますが、さらに重要なことに、単一のランタイムフォルダーになります。また、最終的には単一のObjectFactoryになり、同じクラスの両方のObjectFactoryクラスを使用するときにFQCN(完全修飾クラス名)を使用する必要がなくなります(これにより、インポートステートメントが使用できなくなります。これはトラップになる可能性があります。ここでもプレイ中)。

JAXBContextをビルドするときは、必ずすべてのルートパッケージ(implパッケージではない)をリストしてください。

これを試して、何が得られるかをお知らせください。幸運を。

于 2012-04-27T23:39:00.317 に答える
0

作成中にJAxbContext 私は以下を使用しました:

JAXBContext jaxb = new DefaultJAXBContextImpl(packagename, ObjectFactory.class                 .getClassLoader());

理由はわかりませんが、問題なく動作しているようです。

于 2012-05-08T09:11:35.300 に答える