JaxB:不使用大写字母来处理XML子标记

时间:2016-03-03 08:40:10

标签: java xml jaxb

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<InstanceTree xmlns="http://www.testsite.org/Schemas/xyzSchema">
  <Instance id="inst0" depth="1">
    <UserData type="Instance">
      <userValue title="occurrenceUUID" value="abc/>
    </UserData>
    <UserData type="Part" name="pqr">
      <UserValue title="PartNumber" value="MTG_238_ZB_LACKIERUNG" />
     </UserData>
</Instance>
</InstanceTree>


    @XmlRootElement(name = "InstanceTree")
    public class InstanceTree {
    }
    @XmlRootElement(name = "Instance")
    public class Instance { 

     private List<Userdata> userdata;  
     @XmlElement  
     public List<Userdata> getUserdata() {
         return userdata;
     }
    }

    @XmlRootElement(name = "UserValue")
    public class UserValue {
      private List<UserValue> userValue;  
      @XmlElement  
      public List<UserValue> getUserValue() {
       return userValue;
      }
    }

    @XmlRootElement(name = "UserData")
    public class Userdata {  
    }
  1. 在xml中为大写Instance,UserData,UserValue提供NullPointerException。

  2. 为xmlns =“http://www.testsite.org/Schemas/abcSchema”提供错误。删除网址后工作正常。

1 个答案:

答案 0 :(得分:2)

使用@XmlElement(name="Userdata"),否则jaxb使用属性名称。

 @XmlRootElement(name = "Instance")
 public class Instance { 

    private List<Userdata> userdata;  
    @XmlElement(name = "Userdata") 
    public List<Userdata> getUserdata() {
     return userdata;
    }
  }

也使用package-info.java

@javax.xml.bind.annotation.XmlSchema(
    namespace = "http://www.testsite.org/Schemas/abcSchema",  
    elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
    xmlns = { 
        @javax.xml.bind.annotation.XmlNs(prefix = "", namespaceURI = "http://www.testsite.org/Schemas/abcSchema") 
    }
)
package com.your.package;