如何在JAXB中使xml字段不可编辑

时间:2014-08-10 14:00:09

标签: java xml jaxb

是否有任何注释可以禁用更新一个属性?

我想更新xml文件中除一个属性之外的所有其他字段。我想让它只读字段。是不是可以通过jaxb?

3 个答案:

答案 0 :(得分:2)

您可以声明如下属性:

@XmlAttribute(name = "identifier", required = true)
private String identifier;
public String getIdentifier() { return identifier; }
private void setIdentifier(String value) { this.identifier = value; }

和JAXB将解组并整理它。当然,调用setIdentifier的应用程序代码是不可能编写的。 (反思当然可以克服这个障碍。)

没有JAXB功能来实现这一目标。如果从XML模式生成Java代码,则必须编辑Java类并至少将setter的public更改为private。

答案 1 :(得分:0)

即使可以使用注释,我仍然建议使用setter函数。

  
      
  1. 将Java中的变量初始化为null,将其标记为未设置。
  2.   
  3. 在公共setter函数中验证变量是否为null。   
        
    • 如果为null,则允许设置。
    •   
    • 如果它不为null,则允许设置它,或忽略新值,或抛出异常。
    •   
  4.   

决定是否要接受要设置的新字段值,或者是否要忽略新值,或者是否要通过异常取消整个解组,可以基于运行时决策,在其他更复杂的程序状态。因此,注释可能不太理想。

之后您可能会遇到其他组件调用setter的情况。

在我看来,在这种情况下,将决策逻辑放入设置器就应该是这样的。

答案 2 :(得分:0)

默认情况下,JAXB会将属性和公共字段视为已映射。一个属性需要公众获得&设定方法。如果这两种方法都不存在,那么它不会被视为映射属性。

您还可以注释一个字段,使其被视为已映射。我建议你注释该字段并仅提供访问数据的get方法。