我已经在我的项目中为某些类实现了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中的所有类都应该只使用它。但是所有课程都在崛起并导致例外。
有人可以帮忙吗?
答案 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.index 强> 的
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.index 强> 的
Bar
DEMO CODE
我们将创建JAXBContext
个实例,以几种不同的方式来查看作为JAXB提供程序的内容。请注意,由于Foo
和Bar
相互引用,因此无论使用何种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