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 中的所有类都应该只使用它。但是所有课程都在捡起moxy并导致异常。

有人可以帮忙吗?

4

1 回答 1

0

返回的JAXBContext将始终来自单个提供者。下面我将通过一个例子来演示如何确定提供者。

包 #1 - forum17649220.foo

jaxb.properties

此包包含jaxb.properties带有以下条目的文件,表明 MOXy 是 JAXB 提供程序(请参阅:http ://blog.bdoughan.com/2011/05/specifying-eclipselink-moxy-as-your.html )。

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

Foo包含对 的引用Bar。这意味着无论在处理JAXBContext时如何创建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包含对 的引用Foo。这意味着无论在处理JAXBContext时如何创建Bar元数据,也会为Foo.

package forum17649220.bar;

import forum17649220.foo.Foo;

public class Bar {

    public Foo foo;

}

jaxb.in​​dex

Bar

演示代码

我们将创建JAXBContext几种不同方式的实例,以查看作为 JAXB 提供者所选择的内容。请注意,无论使用何种 JAXB 提供程序,都将处理两个类的FooBar对彼此元数据的引用。

演示

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 回答