我已经为我的项目中的一些类实现了Moxy。但我不希望所有现有类都默认使用Moxy。但我面临的问题是,Moxy正被用于所有其他现有类。我怎么才能避免这种情况?
我已经确保jaxb.properties与我希望它用于的类在同一个包中,而且其中没有其他类。我的包结构如下:
包:com.tityy.a com.party.b com.tityy.c com.entity y.d com.entity.d.moxy。
jaxb.properties存在于com.entity.d.moxy中,com.entity.d.moxy中的所有类都应该只使用它。但是所有的类都会产生异常。
有人能帮忙吗?
发布于 2013-07-15 13:53:42
返回的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.JAXBContextFactoryFoo
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软件包#2 -forum17649220.
Bar
Bar包含对Foo的引用。这意味着,无论JAXBContext是如何创建的,在处理Bar时,也将为Foo创建元数据。
package forum17649220.bar;
import forum17649220.foo.Foo;
public class Bar {
public Foo foo;
}jaxb.index
Bar演示代码
我们将以几种不同的方式创建JAXBContext实例,以查看作为JAXB提供者获得的内容。注意,由于Foo和Bar相互引用,所以无论使用哪个JAXB提供程序,都将处理两个类的元数据。
Demo
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());
}
}输出
我们可以从输入中看到,在创建JAXBContext时,无论何时包含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.JAXBContextImplhttps://stackoverflow.com/questions/17649220
复制相似问题