【发布时间】:2011-10-31 17:20:09
【问题描述】:
我有以下 bean 类
@XmlRootElement(name = "book")
//Optional
@XmlType(propOrder = {"name" })
public class Book {
private String name;
private int num;
@XmlTransient
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
// name for your XML-Output:
@XmlElement(name = "bookName")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
以及对应的编组码
private static void marshalXML(Book bookstore) {
Writer w = null;
try {
// create JAXB context and instantiate marshaller
JAXBContext context = getContext();
if (context != null) {
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
m.marshal(bookstore, System.out);
w = new FileWriter(BOOKSTORE_XML);
m.marshal(bookstore, w);
}
} catch (Exception e) {
System.out.println("error in marshalling");
} finally {
try {
w.close();
} catch (Exception e) {
}
}
}
我想让属性在运行时可配置,我想在运行时在“num”上指定@xmltransient 而不是编译时。我该怎么做?
【问题讨论】:
-
最好的解决方案是拥有两个模型类 (
Y extends X):X 具有“正常”注释,Y 在num上具有@XmlTransient。 -
我希望通过一些 xml 或其他方式完成此配置
-
究竟是什么配置?从 XML 的角度来看(我在之前的评论中忽略了这一点),您可以在不同的命名空间中建模两个 XML 标记(
<ns1:book><num/></ns1:book>= X 和<ns2:book></ns2:book>= Y)。 -
我的代码在编译时将 attr "num" 指定为 @xmltransient,我希望他在运行时完成