Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何用XML绑定Apache Cayenne生成的类_Xml_Xml Binding_Apache Cayenne - Fatal编程技术网

如何用XML绑定Apache 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

首先,为这个冗长的问题道歉

我有许多由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 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>