1

次の場所にあるバリデータ xsd ファイルから使用できるクラスを生成しようとしています。

C:\Program Files\Intuit\IDN\Common\tools\validator

走る:

xjc qbxmltypes.xsd qbxml.xsd qbxmlso.xsd qbxmlops.xsd

ツールは、期待どおりに「生成された」ディレクトリとクラス ファイルを生成します。ただし、これらのクラスは正しく機能していないようです。クラスをプロジェクトに追加して再パッケージ化すると、すべてが正常にコンパイルされます。したがって、新しい JAXBContext オブジェクトを作成すると:

JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);

通常の方法では、これは問題なくコンパイルされますが、次のように System.err で実行時エラー (多くの場合、同じ行が繰り返されます) が発生します。

No XmlSchema annotation found for [packagenamehere]

パッケージ パスで XmlSchema の使用箇所を検索しましたが、何も見つかりませんでした。JAXB は明らかに実行時にこれを必要とします。

間違った .xsd ファイルを使用していますか? XmlSchema 注釈を ObjectFactory.java クラスに追加する必要がありますか? 私はここで何が間違っていますか?xjc で間違ったクラスを構築しているだけだと思います。どの .xsd ファイルをコンパイルする必要がありますか?

4

1 に答える 1

1

XJCユーティリティは、ターゲットの名前空間に基づいてクラスをパッケージ名に生成します。デフォルトで存在しない場合は、生成されたというパッケージに入れられます。パッケージ名をパラメータとして指定できます。

xjc -p com.example.foo schema.xsd

各スキーマを個別のパッケージに生成することをお勧めします。JAXBContextXMLスキーマから生成されたfromクラスを作成するときは、常にパッケージ名でこれを行うことをお勧めします。複数のパッケージ名がある場合は、それらを.文字で区切るだけです。

JAXBContect jc = JAXBContext.newInstance("com.example.foo:com.example.bar");
于 2012-11-25T19:59:10.583 に答える