要发布一个服务,返回一个xml对象,涉及的属性、元素非常多,我想通过annotation 注解一个javabean,生成xml。
现在的疑问是,对于简单的xml,如下面这个样子的
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
    <age>29</age>
    <name>mkyong</name>
</customer>
很容易就可以实现
@XmlRootElement
public class Customer {
 
String name;
int age;
int id;
 
public String getName() {
return name;
}
 
@XmlElement
public void setName(String name) {
this.name = name;
}
 
public int getAge() {
return age;
}
 
@XmlElement
public void setAge(int age) {
this.age = age;
}
 
public int getId() {
return id;
}
 
@XmlAttribute
public void setId(int id) {
this.id = id;
}
 
}但是对于这种呢
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<customer id="100">
    <age>29</age>
    <name>mkyong</name>
    <plan id="1">
        <name>篮球</name>
        <time>8:00</time>
     </plan >
     <plan id="2">
        <name>游泳</name>
        <time>16:00</time>
     </plan >
     <work type="">
         <name></name>
         <deadline>20:00</deadline>
         <detail>
             <leader>XX</leader>
             <eqmt>YY</eqmt>
         <detail>
     </work>
</customer>我想把涉及的属性、元素都放在一个bean里,怎么指定每个属性、元素在xml中所属的父节点呢?XMLjavabeanAnnotation序列化

解决方案 »

  1.   

    @XmlRootElement
    public class Customer {
      
        int age;
        String name;
        Plan plan;
        
         
          
        
      
    }@XmlRootElement
    public class Plan{
     
        int id;
        String name;
        String time;
        
         
          
      }
      

  2.   

    为什么不使用XStream把Bean输出成XML?简单又方便
      

  3.   

    涉及到父子节点关系的,只能通过定义多个bean,然后将子实体作为一个属性放到府实体中吗?
      

  4.   


    感觉和利用javax里的Annotation 差不多,我的疑惑主要在对于存在多个父子节点关系的xml,能否通过一个实体bean搞定。无论是xstream 还是直接用jdk的Annotation ,都需要解决这个问题
      

  5.   


    感觉和利用javax里的Annotation 差不多,我的疑惑主要在对于存在多个父子节点关系的xml,能否通过一个实体bean搞定。无论是xstream 还是直接用jdk的Annotation ,都需要解决这个问题
    xml是一棵树,树里是没有多个父结点的.
      

  6.   

    涉及到父子节点关系的,只能通过定义多个bean,然后将子实体作为一个属性放到府实体中吗?
    不敢肯定说一定是的。
    但是至今没见过第二种解决办法,其实定义多个类也比较符合编码规范,而且出错更容易定位
      

  7.   

    涉及到父子节点关系的,只能通过定义多个bean,然后将子实体作为一个属性放到府实体中吗?
    不敢肯定说一定是的。
    但是至今没见过第二种解决办法,其实定义多个类也比较符合编码规范,而且出错更容易定位恩,主要是有些节点力内容很少,不想给这类内容单独写bean。
    还有一个问题请教,
    @XmlRootElement(name = "TTTTT")
    public class Test implements Serializable{ /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;
    private List<H> tt = new ArrayList<H>(); @XmlElement(name="Children")
    public List<H> getTt() {
    return tt;
    } public void setTt(List<H> tt) {
    this.tt = tt;
    }
    }
    @XmlRootElement(name="child")
    public class H implements Serializable{

    /**
     * serialVersionUID
     */
    private static final long serialVersionUID = 1L;
    private String name; @XmlElement(name="name")
    public String getName() {
    return name;
    } public void setName(String name) {
    this.name = name;
    }

    }我想要的效果是
    <TTTTT>
    <Children>
        <child>
    <name>xiao</name>
        </child>
    </Children>
    </TTTTT>
    但最终出来的是:
    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <TTTTT>
    <Children>
    <name>xiao</name>
    </Children>
    </TTTTT>
    有什么好的解决方法吗?
      

  8.   

    没找到好的解决办法,我都是通过定义单独的bean,对于
    <children>
       <a/>
       <b/>
       ……
       <children>
            ……
       </children>
       <children>
            ……
       </children>
    </children>
    这类的,我在父实体里不直接定义List<child> 这样的属性,而是单独定义一个bean,在这个bean里定义属性List<child>处理这个bean——xml的映射,竟定义了15个bean