为什么jaxb会生成这样的代码?

时间:2013-11-07 15:53:38

标签: java xml design-patterns jaxb

为什么jaxb会在下面生成一个名为Result的类型参数?

生成像这样的getter / setter是不是更清晰:

  protected Result result;

         public void setResult(Result value) {
            this.approveRequestResult = (Result value);
        }

        public Result getResult() {
            return result;
        }

此文件由JavaTM Architecture for XML Binding(JAXB)参考实现生成:

 protected JAXBElement<Result> result;

     public void setResult(JAXBElement<Result> value) {
        this.approveRequestResult = ((JAXBElement<Result> ) value);
    }

    public JAXBElement<Result> getResult() {
        return result;
    }

也许这是一个我不知道的设计模式?

1 个答案:

答案 0 :(得分:1)

当JAXB自身的值无法正确表示XML表示时,它将生成类型为JAXBElement的字段/属性。以下是一些案例:

  1. 元素既可以是可填充的也可选的。如果该值为null,则其中一个场景对应于(参见:JAXB element that is both optional and nillable)。
  2. 表示xsd:choice结构,其中属性可以对应于相同类型的不同XML元素(即foobar)(即xsd:string)。如果值为Hello World,您会将其编组为元素foobar
  3. 处理可归属且具有属性的元素(请参阅:Creating an XML element with xsi:nil and attributes in .Net/Jaxb