@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "AccountResponse")
public class AccountResponse {
@XmlElement(name = "AccountNumber")
protected long accountNumber;
public long getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(long value) {
this.accountNumber = value;
}
}
在上面提到的代码片段中,我试图用 AccountNumber 使用@XmlElement annotation修饰 accountNumber .Code正在执行而不会抛出任何异常。但没有得到预期的产出。 如何解决这个问题?
预期产出:
<AccountResponse>
<AcconutNumber>1234</AccountNumber>
</AccountResponse>
实际输出(我得到的):
<AccountResponse>
<acconutNumber>1234</accountNumber>
</AccountResponse>
注意:我正在使用来自Mule Runtime Library 3.4的JAXB jar。
提前致谢!
答案 0 :(得分:1)
在我看来,你所做的几乎是正确的,但你应该尝试在getter而不是Field上使用你的注释:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name = "AccountResponse")
public class AccountResponse {
protected long accountNumber;
@XmlElement(name = "AccountNumber")
public long getAccountNumber() {
return accountNumber;
}
public void setAccountNumber(long value) {
this.accountNumber = value;
}
}
根据您的配置,可能会从getter而不是字段名称创建xml标记名称。在这种情况下,我猜它发生了。
答案 1 :(得分:0)
在您的问题的AccountResponse
课程中运行以下代码:
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(AccountResponse.class);
AccountResponse ar = new AccountResponse();
ar.setAccountNumber(1234);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(ar, System.out);
}
}
将为您提供您期望的XML响应:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AccountResponse>
<AccountNumber>1234</AccountNumber>
</AccountResponse>
确定问题
AccountResponse
课程运行此演示代码时获得相同的输出,则问题在于Mule。AccountResponse
注释而未重新编译@XmlElement(name = "AccountNumber")
类。