Java JAXB:仅将所需的属性复制到对象

Java JAXB:仅将所需的属性复制到对象,java,jaxb,Java,Jaxb,我有一个带有JAXB注释的类。 类的强制属性具有注释@XmlElement(required=true)。 是否有一种方法可以将类的一个对象复制到同一类的另一个对象,以便只复制所需的属性,而可选的属性为空 谢谢 更新:我想我需要澄清的是,我正在寻找一个通用的解决方案,即不需要事先知道类和属性的解决方案 copy()方法的一个示例: …以及使用反射的通用版本: static class JaxbUtil { static <T> T copy(Class<T> cls,

我有一个带有JAXB注释的类。 类的强制属性具有注释@XmlElement(required=true)。 是否有一种方法可以将类的一个对象复制到同一类的另一个对象,以便只复制所需的属性,而可选的属性为空

谢谢

更新:我想我需要澄清的是,我正在寻找一个通用的解决方案,即不需要事先知道类和属性的解决方案

copy()方法的一个示例:

…以及使用反射的通用版本:

static class JaxbUtil {
  static <T> T copy(Class<T> cls, T obj) throws InstantiationException, IllegalAccessException{
    T copy = cls.newInstance();
    for(Field f:cls.getDeclaredFields()){
      XmlElement annotation = f.getAnnotation(XmlElement.class);
      if(annotation != null && annotation.required()){
        f.setAccessible(true);
        f.set(copy, f.get(obj));
      }
    }
    return copy;
  }
}

我认为你必须编写自己的
copy()
method是的,有。或者按照@Dimi的建议编写自己的方法,或者,如果你想一般地使用反射(这不是一个好的做法)。你能提供这样一个复制()的例子吗?我在f.set上遇到一个异常(…使用JaxbUtil无法访问修饰符为“protected”的类MyTest类型的成员。是否可以通过getter/setter修改它以使用受保护的属性?通过添加
setAccessible(true);
static class JaxbUtil {
  static <T> T copy(Class<T> cls, T obj) throws InstantiationException, IllegalAccessException{
    T copy = cls.newInstance();
    for(Field f:cls.getDeclaredFields()){
      XmlElement annotation = f.getAnnotation(XmlElement.class);
      if(annotation != null && annotation.required()){
        f.setAccessible(true);
        f.set(copy, f.get(obj));
      }
    }
    return copy;
  }
}
YourJaxbClass theCopy = JaxbUtil.copy(YourJaxbClass.class, yourObjectToBeCopied);