我有一个包,里面有多个java类。我需要读取包含包类数据的xml文件。是否有一种自动的方法(使用maven)从包的内容生成ObjectFactory类或jaxb.index文件?我知道我可以用特定的类初始化jaxb上下文,但这将迫使我在每次添加新类时更改代码。提前感谢,Avner
bgibtngc1#
你必须使用jaxb 2-maven插件来生成其他东西。如果类有适当的注解,这不应该是一个问题。
<groupId>org.codehaus.mojo</groupId> <artifactId>jaxb2-maven-plugin</artifactId> <version>1.3.1</version>
标签:http://mojo.codehaus.org/jaxb2-maven-plugin/
xxhby3vn2#
在做了一些研究之后,我选择使用API JAXBContext.newInstance,它接受一个类数组。我已经编写了一个简短的 Package 器,它接受包名称并使用spring扫描它们以获得相关的类(基于XmlRootElement注解)。然后使用上面的API创建jaxb上下文。因为这是一个开销很大的操作,所以你应该考虑缓存这些上下文(它们是线程安全的)以备将来使用。
1zmg4dgp3#
最简单的方法是使用Atteo的类索引。有这个Maven依赖:
<dependency> <groupId>org.atteo.classindex</groupId> <artifactId>classindex</artifactId> <version>3.13</version> </dependency>
将向构建添加注解处理器。将@IndexSubclasses注解添加到相应的package-info.java将使注解处理器生成jaxb.index文件。即:
@IndexSubclasses
package-info.java
jaxb.index
@XmlSchema( namespace = "https://schemas.com/super.xsd", elementFormDefault = XmlNsForm.QUALIFIED ) @XmlAccessorType(XmlAccessType.FIELD) @IndexSubclasses package pkg.with.my.schema; import org.atteo.classindex.IndexSubclasses; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlNsForm; import javax.xml.bind.annotation.XmlSchema;
重要这种方法的一个大缺点是Atteo的注解具有运行时保留;因此,依赖关系必须作为运行时依赖关系和编译时依赖关系包含在内。如果您正在构建一个自包含的jar,那么使用Atteo的类索引将不再可能,除非您使用依赖项屏蔽或构建jar。
3条答案
按热度按时间bgibtngc1#
你必须使用jaxb 2-maven插件来生成其他东西。如果类有适当的注解,这不应该是一个问题。
标签:http://mojo.codehaus.org/jaxb2-maven-plugin/
xxhby3vn2#
在做了一些研究之后,我选择使用API JAXBContext.newInstance,它接受一个类数组。我已经编写了一个简短的 Package 器,它接受包名称并使用spring扫描它们以获得相关的类(基于XmlRootElement注解)。然后使用上面的API创建jaxb上下文。因为这是一个开销很大的操作,所以你应该考虑缓存这些上下文(它们是线程安全的)以备将来使用。
1zmg4dgp3#
最简单的方法是使用Atteo的类索引。有这个Maven依赖:
将向构建添加注解处理器。
将
@IndexSubclasses
注解添加到相应的package-info.java
将使注解处理器生成jaxb.index
文件。即:重要这种方法的一个大缺点是Atteo的注解具有运行时保留;因此,依赖关系必须作为运行时依赖关系和编译时依赖关系包含在内。如果您正在构建一个自包含的jar,那么使用Atteo的类索引将不再可能,除非您使用依赖项屏蔽或构建jar。