如何用XML绑定Apache Cayenne生成的类
首先,为这个冗长的问题道歉 我有许多由Cayenne生成的类,如下所示如何用XML绑定Apache Cayenne生成的类,xml,xml-binding,apache-cayenne,Xml,Xml Binding,Apache Cayenne,首先,为这个冗长的问题道歉 我有许多由Cayenne生成的类,如下所示 public abstract class _Form extends CayenneDataObject { public static final String NAME_PROPERTY = "name"; public static final String FORM_ELEMENT_PROPERTY = "formElement"; public static final String F
public abstract class _Form extends CayenneDataObject {
public static final String NAME_PROPERTY = "name";
public static final String FORM_ELEMENT_PROPERTY = "formElement";
public static final String FORM_ELEMENT1_PROPERTY = "formElement1";
public static final String FORM_ELEMENT2_PROPERTY = "formElement2";
public static final String ID_PK_COLUMN = "ID";
public void setName(String name) {
writeProperty("name", name);
}
public String getName() {
return (String)readProperty("name");
}
public void addToFormElement(FormElement obj) {
addToManyTarget("formElement", obj, true);
}
public void removeFromFormElement(FormElement obj) {
removeToManyTarget("formElement", obj, true);
}
@SuppressWarnings("unchecked")
public List<FormElement> getFormElement() {
return (List<FormElement>)readProperty("formElement");
}
}
本质上,我希望将这个类和其他几个类转换为XML,就像我在下面这个简单的类示例中使用XML绑定所做的那样
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "Form")
public class Form {
String name;
long ID;
@XmlElement
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@XmlAttribute
public long getID() {
return ID;
}
public void setID(long formID) {
this.ID = formID;
}
}
我应该对生成的类进行哪些更改以生成以下XML
<Form id="1">
<name>test</name>
</Form>
如果只需要将表单实体序列化为XML,而不需要任何关系,则可以使用自定义类生成器模板。以下模板示例适用于Cayenne 3.1。您需要的一些自定义设置: 通过复制所有内容并将JAXB注释添加到属性部分的getter中,创建一个超类模板,循环以“Create attribute set/get methods”开头 在自定义方法中,您可以添加引用超类的“getId”方法和“@xmlseealway”注释。当然,因为您可以更改子类,所以您可以手动添加这些子类,而不是自定义模板。”getId'可能如下所示: 公共整数getId{ 返回Cayenne.intPKForObjectthis; } 然后为类生成器选择一个自定义模板,可以是Maven、Ant或Modeler。例如,用于使用“superTemplate”参数 现在,如果您像我经常做的那样需要更复杂的序列化,它包括各种关系,并且请求之间甚至对于同一个对象也有所不同,那么JAXB注释对此太有限了。如果使用JAX-RS,则需要编写一些上下文敏感的JAXB marshaller或JAX-RS MessageBodyWriter
<Form id="1">
<name>test</name>
</Form>