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

如果定义了带前缀的布尔方法,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绑定文件。

  • 我一直在使用Metro,遇到了一个问题,wsgen似乎忽略了我在web方法响应类上添加的任何JAXB注释。 我试图返回一组实体类,我想通过网络服务向外部客户端公开,但是我只想让某些类属性和方法对外部客户端可见,所以将类存取类型设置为PROPERTY,并进行注释所有属性我想成为@XmlElement类的XML版本的一部分。 我可以使用schemagen ant任务为实体类创建XML模式,该任务正确地