3

私は依存関係を持つ Grails プロジェクトを持っています。これは私の別のプロジェクトであり、spring-oxm. 私の Grails プロジェクトは<import resource="some.xml">、.jar 内にある .xml を正常に処理できますが、次のエラーが表示されます。

Attribute 'context-path' is not allowed to appear in element 'oxm:jaxb2-marshaller'

Grails BuildConfig.groovy に次のような依存関係があります。

    compile ('org.springframework:spring-oxm:3.1.0.RELEASE')

そして、私の他の(Maven)プロジェクトへのこの依存関係:

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-oxm</artifactId>
        <version>3.1.0.RELEASE</version>
    </dependency>

oxm-marshaller の Bean を作成する方法は次のとおりです。

<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
     <property name="contextPath" value="com.somepackage.commons"/>
</bean>

また、Maven プロジェクトのテストを実行するたびに、Spring アプリケーション コンテキストが完全に読み込まれるため、スタンドアロンで確実に動作します。

ここで何が問題なのですか?両方のプロジェクトで同じ spring-oxm 依存関係を使用しましたが、これらのエラーがまだ発生するのはなぜですか? 助けが必要!

編集:簡単な回避策... Mavenプロジェクトを依存関係としてインポートする代わりに、MavenプロジェクトからGrailsプロジェクトに持っていたすべてのコードをコピーして貼り付けてみましたが、問題なく動作します...何がうまくいかなかったのか知りたいここ :(

編集 2: 別の方法で Bean を作成しようとしました... Spring Bean 自体を作成する代わりに、oxm 名前空間を使用しました。Maven プロジェクトでマーシャラーを作成すると、次のようになりました。

<oxm:jaxb2-marshaller id="marshaller" context-path="com.somepackage.commons"/>

おもしろいのは、私の Grails プロジェクト (以前にコピーして貼り付けたもの) では、次のようになっていることです。

<oxm:jaxb2-marshaller id="marshaller" contextPath="com.somepackage.commons"/>

contextPath 属性のキャメルケース規則に注意してください。なぜこのようになっているのですか?

4

1 に答える 1

1

クラスパス内の実際のSpring oxm jarが正しいxsdを指していることを確認してください。ポインタは META-INF/spring.schemas ファイルにあります。「context-path」属性は spring-oxm-3.x.xsd では定義されていません。spring-oxm-4.x.xsd で定義されています

于 2015-11-17T20:14:40.723 に答える