1

xml データをマーシャリングするコードを書きました。データをマーシャリングして出力する前に、Blaise Doughan がここで提案する方法でデータを検証します

Eclipse で簡単なテスト (データのマーシャリングと検証) を実行すると問題なく動作しますが、コンソール (mvn テスト) でテストを実行するとすぐに、「@XmlRootElement 注釈がありません」というメッセージが表示されます。

この注釈なしで、コードはmoxyによって生成されます。私の質問は、なぜEclipseで動作するのですか? または、コンソールでも動作させる方法は? 私が持っている唯一の説明は、いくつかの依存関係が異なるということです(おそらくEclipseはいくつかの内部xmlのものを使用していますか?)

ルート要素を JAXBElement でラップする可能性があることは認識していますが、何らかの理由で、注釈やラップなしで Eclipse で動作します。

4

2 に答える 2

1

Blaise は正しいです。jaxb.properties は、src/main/java フォルダーと同じフォルダー構造 (パッケージ) のリソースの下にある必要があります。私の場合、20 個のファイル (および 20 個の xsd の jaxb-classes) があります。手動で add を pom にコピーせずに機能させるには:

<build>
...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/jaxb.properties</include>
            </includes>
        </resource>
    </resources>
...
</build>

最初の「リソース」は、通常のリソース フォルダーを追加します。2 つ目は src/main/java を追加しますが、すべての jaxb.properties のみが含まれます。

于 2013-05-16T09:01:03.073 に答える
1

EclipseLink JAXB (MOXy)は注釈なしでマーシャリング@XmlRootElementし、JAXB参照実装は不平を言います。

jaxb.propertiesMaven セットアップの正しい場所にファイルがないと思われます。ドメイン モデルがcom.example.fooパッケージに含まれている場合、jaxb.propertiesファイルは次の場所にあります。

src/main/resources/com/example/foo/jaxb.properties 

サンプル プロジェクトについては、次を参照してください。

アップデート

moxy/マーシャラーに、固定されたjaxb.propertiesを使用し、パッケージフォルダーの奥深くで検索しないように指示することは可能ですか?

MOXy を常に JAXB (JSR-222) プロバイダーとして使用する場合は、クラスパスに以下を追加できます。

META-INF/services/javax.xml.bind.JAXBContext

javax.xml.bind.JAXBContextファイルには次の内容が含まれます。

org.eclipse.persistence.jaxb.JAXBContextFactory

それ以外の場合は、いつでもネイティブ MOXy API を使用して JAXBContext を作成できます。

    JAXBContext jc = org.eclipse.persistence.jaxb.JAXBContextFactory.createContext(new Class[] {Foo.class}, null);
于 2013-05-15T16:58:04.943 に答える