2013-07-15 81 views
0

我在我的项目中为某些类实现了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中的所有类都只应用它。但是,所有的课程都在采用moxy并导致例外。

任何人都可以帮忙吗?

+0

欢迎来到Stack Overflow!您不必在帖子中包含签名 - 您的用户卡始终自动发布在帖子的底部。 – Artemix

回答

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的参考。这意味着无论在处理Foo时如何创建JAXBContext元数据也将为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参考。这意味着无论在处理Bar时如何创建JAXBContext元数据也将为Foo创建。

package forum17649220.bar; 

import forum17649220.foo.Foo; 

public class Bar { 

    public Foo foo; 

} 

jaxb.in​​dex

Bar 

演示代码

我们将创建的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然后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