Moxy类路径问题

时间:2013-07-15 07:51:19

标签: java moxy

我已经在我的项目中为某些类实现了Moxy。但我不希望Moxy成为所有现有类的默认值。但我面临的问题是Moxy被用于所有其他现有的类。我怎么能避免这个?

我确保jaxb.properties与我想要它使用的类在同一个包中,并且没有其他类。我的包结构是这样的:

  

package: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中的所有类都应该只使用它。但是所有课程都在崛起并导致例外。

有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

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

PACKAGE#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

PACKAGE#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

DEMO CODE

我们将创建JAXBContext个实例,以几种不同的方式来查看作为JAXB提供程序的内容。请注意,由于FooBar相互引用,因此无论使用何种JAXB提供程序,都将处理这两个类的元数据。

演示

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包或该包中的类时,由于jaxb.properties文件,MOXy将成为提供者。

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