Jaxb - 生成帶名稱空間和節點字首的Xml的方式

襲冷發表於2018-08-08

一、生成帶名稱空間的Xml

    Xml效果

<Order xmlns="http://www.xl.com.cn/msg">

    Java程式碼

/**
* Entity
*/
@XmlRootElement(name="Order", namespace="http://www.xl.com.cn/msg")
public class Order{
}

二、宣告帶字首的名稱空間

    Xml效果

<Order xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

    Java程式碼

/**
* package-info.java 
* 放在和實體同一個包路徑下
*/
@XmlSchema(
        xmlns={
                @XmlNs(prefix="xsi", namespaceURI="http://www.w3.org/2001/XMLSchema-instance"),
        }
)
package cn.com.xl.entity;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;
/**
* Entity
*/
@XmlRootElement(name="Order")
public class Order {
}

三、生成帶字首的名稱空間和生成帶字首的節點

    Xml效果

<msg:Order xmlns:msg="http://www.chinaport.gov.cn/ceb"><msg:OrderId></msg:OrderId></msg:Order>

    Java程式碼

/**
* package-info.java 
* 放在和實體同一個包路徑下
*/
@XmlSchema(
        xmlns={
                @XmlNs(prefix="msg", namespaceURI="http://www.xl.com.cn/msg")
        }
        
)
package cn.com.xl.entity;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlSchema;
/**
* Entity
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement(name="Order", namespace="http://www.xl.com.cn/msg")
public class Order {
    @XmlElement(name="OrderId", namespace="http://www.xl.com.cn/msg")
    private String OrderId;
}

四、補充

    1、某個子節點不需要該字首,則entity中為欄位註解@XmlElement時不設定namespace即可
    2、需要多個名稱空間,這在package-info中新增多個@XmlNs即可
    3、為配置節點字首而配置的註解中的namespace必需在package-info中宣告,否則節點字首將為nsN格式

 

 

相關文章