使用maven自动生成jaxb.index文件

问题描述 投票:0回答:3

我有一个包,里面有多个java类。
我需要读取带有包的类数据的 xml 文件。
是否有一种自动方法(使用maven)从包的内容生成ObjectFactory类或jaxb.index文件?
我知道我可以使用特定的类启动 jaxb 上下文,但这将迫使我每次添加新类时都更改代码。
预先感谢,
阿夫纳

maven xml-serialization jaxb jaxb2
3个回答
1
投票

你必须使用jaxb2-maven插件来生成其他东西。如果类有适当的注释,那应该不是问题。

<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.3.1</version>

参见这里:http://mojo.codehaus.org/jaxb2-maven-plugin/


0
投票

经过一些研究,我选择使用 API JAXBContext.newInstance,它接受一组类。我编写了一个简短的包装器,它接受包名称并使用 spring 扫描它们以获取相关类(基于 XmlRootElement 注释)。然后我使用上面的 API 创建 jaxb 上下文。由于这是一项昂贵的操作,您应该考虑缓存这些上下文(线程安全)以供将来使用。


0
投票

“最简单”的方法是使用 Atteo 的类索引。 拥有这个 Maven 依赖:

<dependency>
    <groupId>org.atteo.classindex</groupId>
    <artifactId>classindex</artifactId>
    <version>3.13</version>
</dependency>

将在构建中添加注释处理器。

@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。

© www.soinside.com 2019 - 2024. All rights reserved.