【问题标题】:Using Moxy as JAXB Implementation and setting jaxb.properties with more than one POJO package使用 Moxy 作为 JAXB 实现并使用多个 POJO 包设置 jaxb.properties
【发布时间】:2014-10-16 11:21:58
【问题描述】:

我目前正在尝试使用 EclipseLink Moxy 作为我的 JAXB 实现。我正在尝试这个,因为 JDK 中包含的默认实现似乎具有 UTF-8 编码的硬编码缩进级别 8。

我的问题是,我似乎必须将 jaxb.properties 文件放入每个包含 JAXB POJO 的包中。我的 JAXB POJO 由 xjc 生成,特别是由“jaxb2-maven-plugin”生成。 POJO 被生成到许多包中。是否可以在不在这些包中创建冗余 jaxb.properties 文件的情况下设置使用的实现?

【问题讨论】:

  • 如果您可以自动生成这些jaxb.index 文件会有帮助吗?
  • 是的,这会有所帮助。但这对我来说似乎也很多余,一次又一次地生成具有同一行的相同文件。
  • 哦,抱歉,打错了,我把jaxb.index 误认为jaxb.properties

标签: maven jaxb moxy


【解决方案1】:

我正在尝试这个,因为默认实现包含在 JDK 似乎使用 UTF-8 硬编码缩进级别为 8 编码。

JAXB 参考实现确实有一个扩展属性,允许您控制缩进:


jaxb.properties而言,当使用单个JAXBContext处理多个包时,只有一个包需要包含jaxb.properties文件。

为了让您更轻松地使用 MOXy,可以采取一些不同的措施:

使用 MOXy 的 XJC Wrapper

MOXy 提供了一个封装 XJC 的脚本,它将在适当的位置添加 jaxb.properties 文件。

<ECLIPSELINK_HOME>/bind/jaxb-compiler.sh

使 MOXy 成为您环境中的默认 JAXB 提供程序

您还可以利用 META-INF/services 机制将 MOXy 指定为默认 JAXB 提供程序:

  1. 在目录META-INF/services 中创建一个包含名为javax.xml.bind.JAXBContext 的文件的JAR
  2. javax.xml.bind.JAXBContext 文件的内容必须是org.eclipse.persistence.jaxb.JAXBContextFactory
  3. 将该 jar 添加到您的类路径中。

使用原生 MOXy API

import java.io.File;
import javax.xml.bind.*;
import org.eclipse.persistence.jaxb.JAXBContextFactory;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContextFactory.createContext("com.example.pkg1:org.example.pkg2", null, null);

        Unmarshaller unmarshaller = jc.createUnmarshaller();
        File xml = new File("input.xml");
        Object object = unmarshaller.unmarshal(xml);

        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(object, System.out);
    }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-07-31
    • 2023-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    相关资源
    最近更新 更多