java - (如何)我可以让 JAXB (MOXy) 接受非 setter/getter 进行编码?

标签 java interface marshalling getter moxy

JAXB 可以有效地用于将结构转储到 XML 中,只需很少的注释。 JAXB 的妙处在于不需要创建一些 DTO 或用样板代码过多地扰乱编码类。

但经常会发生提供数据的方法不是 getter,而是类似 formatDescription() 甚至 toString() 的方法。

如果它只是一个类,这无关紧要,因为它可以通过添加 getDescription() 进行子类化。 但是,当利用 MOXy 的功能来编码接口(interface)时,这变得更难了——必须将方法添加到接口(interface)并且更改所有实现;或接口(interface)的子类化和所有 impls。

// @XmlElement(name = "desc") // DOESN'T WORK.
String toDescription();

// JAXB needs getter :/
@XmlElement(name = "desc")
String getDescription();

有没有办法让 MOXy 接受不以 get* 开头的方法?

最佳答案

我发现 MOXy allows external metadata in XML files (而不是注释)。 也在 Jaxb EclipseLink/MOXy : Is it possible to specify the names of get/set methods 中描述.

所以在这种情况下,我会设置

<xml-bindings xmlns="http://www.eclipse.org/eclipselink/xsds/persistence/oxm"
    package-name="forum8834871">
    <java-types>
        <java-type name="ServerInfo" xml-accessor-type="PUBLIC_MEMBER">
            <xml-root-element/>
            <java-attributes>
                <xml-element name="desc" java-attribute="description" >
                    <xml-access-methods get-method="toDescription"/>
                </xml-element>
            </java-attributes>
        </java-type>
    </java-types>
</xml-bindings>

未经测试,如果我省略 set-method 可能无法正常工作。

无论如何 - 这只是一种解决方法,所以我 filled a feature request .

关于java - (如何)我可以让 JAXB (MOXy) 接受非 setter/getter 进行编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16971799/

相关文章:

java - 实现接口(interface)

java - 使用基于注解的 MOXY 的 JAXB 实现 + 动态映射

c# - 结构重叠或错误对齐

java - 如果用户插入整数以外的字符,程序应该再给他一次写入整数的机会

java - Trove jar THashMap 类未找到异常

java - 公共(public)属性(property) VS 私有(private)属性(property)与 setter/getter ?

java - IntelliJ IDEA 代码折叠

interface - 强制转换为接口(interface)和契约(Contract)实例之间有区别吗?

c# - 将 setter 添加到派生接口(interface)

c# - 如何将 C++ 结构从 dll 传输到 C# 程序?