首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Moxy类路径问题

Moxy类路径问题
EN

Stack Overflow用户
提问于 2013-07-15 07:51:18
回答 1查看 167关注 0票数 0

我已经为我的项目中的一些类实现了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中的所有类都应该只使用它。但是所有的类都会产生异常。

有人能帮忙吗?

EN

回答 1

Stack Overflow用户

发布于 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)。

代码语言:javascript
复制
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

Foo

Foo包含对Bar的引用。这意味着,无论JAXBContext是如何创建的,在处理Foo时,也将为Bar创建元数据。

代码语言:javascript
复制
package forum17649220.foo;

import forum17649220.bar.Bar;

public class Foo {

    public Bar bar;

}

jaxb.index

JAXB实现不进行包扫描。可以使用jaxb.index文件根据包名创建JAXBContext

代码语言:javascript
复制
Foo

软件包#2 -forum17649220.

Bar

Bar包含对Foo的引用。这意味着,无论JAXBContext是如何创建的,在处理Bar时,也将为Foo创建元数据。

代码语言:javascript
复制
package forum17649220.bar;

import forum17649220.foo.Foo;

public class Bar {

    public Foo foo;

}

jaxb.index

代码语言:javascript
复制
Bar

演示代码

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

Demo

代码语言:javascript
复制
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文件。

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17649220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档