Java JAXB和应用程序其余部分之间的方法冲突

Java JAXB和应用程序其余部分之间的方法冲突,java,jaxb,pojo,Java,Jaxb,Pojo,我正在将现有的POJO转换为与JAXB兼容的POJO。除了pojo的一个getter方法之外,其他方法都可以正常工作,我需要一个特定于呈现XML的附加逻辑。但是,这个getter已经在应用程序中的某个地方被调用,我无法修改这个方法的行为。 我通常如何处理这种方法名冲突?有没有一种方法可以仅仅为JAXB目的创建一个单独的方法,并将currentmethod标记为XMlTransient 谢谢是的,正是你所说的会起作用。将一个方法设为@xmltransive,然后编写另一个方法,并将其设为@xmle

我正在将现有的POJO转换为与JAXB兼容的POJO。除了pojo的一个getter方法之外,其他方法都可以正常工作,我需要一个特定于呈现XML的附加逻辑。但是,这个getter已经在应用程序中的某个地方被调用,我无法修改这个方法的行为。 我通常如何处理这种方法名冲突?有没有一种方法可以仅仅为JAXB目的创建一个单独的方法,并将currentmethod标记为XMlTransient


谢谢

是的,正是你所说的会起作用。将一个方法设为@xmltransive,然后编写另一个方法,并将其设为@xmlementname=任意元素名称。

是的,正是您所说的。将一个方法设为@XmlTransient,然后编写另一个方法,并将其设为@XmlElementname=任何元素名称。

您可以将XMLAccessortTypeXMLAccessType.FIELD放在类上。然后,JAXB注释将从字段名中提取,而不是从方法名中提取。例如:

@XmlAccessorType(XmlAccessType.FIELD)
public class MyType {
    @XmlElement String f1;
    @XmlElement Integer f2;

    // JAXB doesn't care about these:
    public String getF1() {return f1;}
    public String getF2() {return f2;}
    public void setF1(String f1) {this.f1 = f1;}
    public void setF2(Integer f2) {this.f2 = f2;}
}

您可以将XmlAccessorTypeXmlAccessType.FIELD放在类上。然后,JAXB注释将从字段名中提取,而不是从方法名中提取。例如:

@XmlAccessorType(XmlAccessType.FIELD)
public class MyType {
    @XmlElement String f1;
    @XmlElement Integer f2;

    // JAXB doesn't care about these:
    public String getF1() {return f1;}
    public String getF2() {return f2;}
    public void setF1(String f1) {this.f1 = f1;}
    public void setF2(Integer f2) {this.f2 = f2;}
}

我只想要f1字段的thw字段行为,而不是其他属性。有没有办法在字段级别而不是类级别定义XmlAccessType.FIELD?谢谢Blaise。是的,我最终按照你的建议做了。我只想要f1字段的字段行为,而不是其他属性。有没有办法在字段级别而不是类级别定义XmlAccessType.FIELD?谢谢Blaise。对我最终按照你的建议做了。我现在得到了一个与更改相关的错误:com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:2个IllegalAnnotationExceptions属性元素,JAXb从我的新getter方法派生而来,但没有在@XmlType.proporder中指定。我刚刚意识到我必须使用getter的派生属性元素属性作为Propoder列表中的属性名称。我现在得到一个与更改相关的错误:com.sun.xml.bind.v2.runtime.IllegalAnnotationsException:JAXb从我的新getter方法派生的2个IllegalAnnotationExceptions属性元素1存在,但未在@XmlType.Propoder中指定。我刚刚意识到我必须使用将getter的派生属性作为proporter列表中的属性名称。