0

プロジェクトのいくつかのクラスに Moxy を実装しました。しかし、Moxy を既存のすべてのクラスのデフォルトにしたくありません。しかし、私が直面している問題は、Moxy が他のすべての既存のクラスに使用されていることです。どうすればこれを回避できますか?

jaxb.properties が、使用したいクラスと同じパッケージにあり、その中に他のクラスがないことを確認しました。私のパッケージ構造は次のようなものです:

パッケージ:com.entity.a com.entity.b com.entity.c com.entity.d com.entity.d.moxy.

jaxb.properties は com.entity.d.moxy に存在し、com.entity.d.moxy のすべてのクラスはそれのみを使用する必要があります。しかし、すべてのクラスがモクシーを拾い、例外を引き起こしています。

誰でも助けてもらえますか?

4

1 に答える 1

0

返されるのJAXBContextは、常に単一のプロバイダーからのものです。以下に、プロバイダーがどのように決定されるかを例で示します。

パッケージ #1 - forum17649220.foo

jaxb.properties

このパッケージには、jaxb.propertiesMOXy が JAXB プロバイダーであることを示す次のエントリを含むファイルが含まれています ( http://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.htmlを参照)。

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

フー

Fooへの参照が含まれていますBarJAXBContextこれは、 が処理されるときにがどのように作成されても、 のFooメタデータも作成されることを意味しBarます。

package forum17649220.foo;

import forum17649220.bar.Bar;

public class Foo {

    public Bar bar;

}

jaxb.in​​dex

JAXB 実装はパッケージのスキャンを行いません。jaxb.indexファイルを使用してJAXBContext、パッケージ名によるの作成を有効にすることができます。

Foo

パッケージ #2​​ - forum17649220.bar

バー

Barへの参照が含まれていますFooJAXBContextこれは、 が処理されるときにがどのように作成されても、 のBarメタデータも作成されることを意味しFooます。

package forum17649220.bar;

import forum17649220.foo.Foo;

public class Bar {

    public Foo foo;

}

jaxb.in​​dex

Bar

デモコード

JAXBContextJAXB プロバイダーとして何が選択されているかを確認するために、いくつかの異なる方法のインスタンスを作成します。使用されている JAXB プロバイダーに関係なく、両方のクラスのメタデータが相互に参照されているため、Fooとhave が処理されることに注意してください。Bar

デモ

package forum17649220;

import javax.xml.bind.JAXBContext;
import forum17649220.bar.Bar;
import forum17649220.foo.Foo;

public class Demo {

    public static void main(String[] args) throws Exception {
        System.out.println(JAXBContext.newInstance("forum17649220.foo").getClass());
        System.out.println(JAXBContext.newInstance("forum17649220.foo:forum17649220.bar").getClass());
        System.out.println(JAXBContext.newInstance("forum17649220.bar").getClass());

        System.out.println(JAXBContext.newInstance(Foo.class).getClass());
        System.out.println(JAXBContext.newInstance(Foo.class, Bar.class).getClass());
        System.out.println(JAXBContext.newInstance(Bar.class).getClass());
    }

}

出力

入力から、forum17649220.fooパッケージまたはそのパッケージのクラスが作成時に含まれる場合は常にJAXBContext、MOXy がjaxb.propertiesファイルのためにプロバイダーになることがわかります。

class org.eclipse.persistence.jaxb.JAXBContext
class org.eclipse.persistence.jaxb.JAXBContext
class com.sun.xml.bind.v2.runtime.JAXBContextImpl
class org.eclipse.persistence.jaxb.JAXBContext
class org.eclipse.persistence.jaxb.JAXBContext
class com.sun.xml.bind.v2.runtime.JAXBContextImpl
于 2013-07-15T13:53:42.760 に答える