Jaxb - 生成带命名空间和节点前缀的Xml的方式

一、生成带命名空间的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格式

 

 


版权声明:本文为u013379717原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。