当前位置: 首页 > 知识库问答 >
问题:

如果定义了带前缀的布尔方法,JAXB将忽略属性

李凯定
2023-03-14

这个简单的单道具类可以很好地工作,并且可以使用Ummarshale

@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class AdditionalGetter {
    private float a;

    @XmlElement(name = "my_prop_a", required = false)
    public float getA() {
        return a;
    }

    public void setA(float a) {
        this.a = a;
    }

    // public boolean isA() {
    //    return true;
    // }
}

输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<additionalGetter>
    <my_prop_a>7.0</my_prop_a>
</additionalGetter>

但是,如果我用方法isA()取消注释该行,它将不再工作,并且输出仅为(on win):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<additionalGetter/>

所以它看起来像是JAXB的命名冲突。实际上,acessor类型none应该忽略othef字段,但是isA()方法阻止了a字段被标记。

所以,一种不经意的修复方法,就是重命名方法isA(),以避免冲突。但我想知道:

1)这真的被JAXB禁止吗?如果是,这是在哪里描述的?

2) 有没有什么方法可以使封送工作正常,而不必重命名这个方法(并破坏现有的jar接口)?我试过@xmltransive,但没有效果。

共有1个答案

权浩阔
2023-03-14

只需将@xmltransive添加到public boolean isA()前面,就可以防止jaxb在生成的xml中包含该方法

@XmlTransient
public boolean isA() {
    return true;
}
 类似资料:
  • 我们想断言,自定义对象列表包含一个对象,其某些字段具有特定的值,以及一系列类似这样的断言 然而,自定义对象也有布尔类型字段,其中getter方法有一个“is”前缀而不是“get”,在那里断言似乎在以下情况下失败 是否有现成的解决方案来克服这一点,或者它应该用某种自定义匹配器来处理?

  • 我需要在我的项目中实现本地化。我添加了一个带有前缀的组。 中间件setlocale 路由器列表 一切都很完美。但有一个问题。当我打开路线时: http://127.0.0.1:8000/en/projects/1 (展览项目) 我犯了一个错误 传递给App\Http\Controllers\ProjectsController::show()的参数1必须是App\Project的实例,字符串为 我

  • 我有课 并希望将其转换为XML。但是,如果flag不为true,我需要在序列化期间忽略flag字段。 因此,如果flag=true,我希望得到:

  • 使用jaxb2-maven-plugin和jaxb-xjc,在生成类时,jaxb创建带有get前缀的布尔访问器,但是我希望它使用java约定"is"创建。 这里是xsd: 创建的方法是; 但是我想要; 我试过了

  • 当目标WSDL/XSDS放在某些特定路径下时,wsimport和xjc命令(都是作为Java JDK的一部分下载的)将忽略提供的jaxb绑定文件。

  • 问题内容: 除了包级别注释外,还有其他方法可以使用注释来控制自定义名称空间前缀。 可以在元素级别完成吗?也可能有一个带有多个前缀的名称空间吗? 问题答案: 您实际上想做什么?为什么名称空间前缀对您很重要? 对于命名空间前缀,没有标准的元素级注释。 我知道的控制名称空间前缀的选项是: 你已经提到过。 提供习俗。 XML的低级处理(例如,在StAX,SAX或DOM级别)。 我也可以想象: / 通常使用