编程语言
首页 > 编程语言> > java-将自定义ObjectFactory与JAXB一起使用:是否存在已建立的“转到”模式?

java-将自定义ObjectFactory与JAXB一起使用:是否存在已建立的“转到”模式?

作者:互联网

我知道使用JAXB时ObjectFactory通常是自动生成的,因为可能首先定义架构和XML.但是,这不是我进行项目的方式.

我有现有的代码,需要对其进行注释和扩展以使用JAXB,然后将其与REST服务结合使用.我只有少数几个课程,并且已经对其进行了注释.据我了解的文档(我是JAXB的新手),我需要一个由ObjectFactory实现的程序包,以便在程序包级别自动调用,或者需要多个实现(当直接引用而不是由程序包上下文引用时).

我不确定最好的方法是什么.如果我要对每个包使用一个实现,那么管理器将是相当抽象的,实例化许多类.但是,我不确定这是否是正确的方法.我个人选择将实例化的关注点分离到ObjectFactory的单独实例中,即每个类有一个工厂.因此,我将实现类似于Data Access Object模式的内容.

我的工程背景告诉我,将关注点分离并选择扩展而不是修改将是更好的选择.因此,我的直觉告诉我,仅由于基于XML而不是代码的方法而使用整体ObjectFactory时才使用它.但是我没有足够的经验来做出明智的选择.

我不仅要问您在技术和建议方面的经验(将基于观点),而且还想问一下这种方法是否会引入我遗漏的任何风险以及可能遇到的关于JAXB的技术限制我遵循我的行动方针.谢谢!

解决方法:

在包名称上创建JAXBContext

在包名称上创建JAXBContext时:

JAXBContext jc = JAXBContext.newInstance("com.example.foo");

JAXB实现不进行程序包扫描,因此需要在该程序包中查找一些内容,以便从中得出模型的其余部分.可以是:

> ObjectFactory类,其中包含引用域模型的create方法.当您的模型是从XML Schema生成时,最好进行自举
>一个jaxb.in​​dex文件,它只是要在其上引导JAXBContext的类的短类名(非包限定)的回车分隔符列表.这不必是整个列表,因为JAXB会引入引用的类.从Java类开始时,最好使用这种方法.

什么ObjectFactory用于

就元数据而言,ObjectFactory具有:

>从可以确定域模型的签名中创建方法(如果仅在ObjectFactory上自举.
> @XmlElementDecl批注. @XmlElementDecl批注类似于@XmlRootElement批注,但用于具有命名类型的顶级元素(见:http://blog.bdoughan.com/2012/07/jaxb-and-root-elements.html).

什么不用于ObjectFactory

在umarshal操作期间,不使用ObjectFactory创建域类的实例.有关更多信息,请参见下面的链接的问题:

> Why is the ObjectFactory not used during unmarshalling?

在JAX-RS环境中创建JAXBContext

您提到您正在执行REST.如果为此使用JAX-RS实现(例如Jersey),则建议使用ContextResolver创建您的JAXBContext.以下是我的博客中的示例.在该示例中,MOXy JAXB impl中的扩展用于提供元数据,但是无论如何您都可以创建该JAXBContext.

> http://blog.bdoughan.com/2011/04/moxys-xml-metadata-in-jax-rs-service.html

标签:jaxb,objectfactory,java
来源: https://codeday.me/bug/20191121/2048841.html