JAXB中遇到的坑

1.使用JAXB將xml轉化爲java對象時,單純的經過註解@XmlRootElement(namespace=「xxxxxx」),在根類上生命命名空間會產生兩個問題:java

  • 命名空間的做用範圍只做用於根標籤,而不會遞歸做用於下屬全部標籤,於是致使全部的使用@XmlElement標誌的子屬性所有獲取不到。
  • 命名完成的namespace會產生形如nsN的前綴。

解決方法:以下方法配置package-info.java文件,解決點如註釋:spa

/**
* package-info.java 
* 放在和實體同一個包路徑下
*/
@XmlSchema(
        //在此處設置命名空間爲了使用下面的@xmlnx從新命名前綴
        namespace ="http://www.omg.org/spec/BPMN/20100524/MODEL",
        //設置命名空間的應用範圍,QUALIFIED爲應用於全部標籤
        elementFormDefault = XmlNsForm.QUALIFIED,
        xmlns = {
        @XmlNs(prefix = "activiti",namespaceURI = "http://activiti.org/bpmn"),
        @XmlNs(prefix = "bpmndi",namespaceURI = "http://www.omg.org/spec/BPMN/20100524/DI"),
        
        //從新命名前綴
        @XmlNs(prefix = "",namespaceURI = "http://www.omg.org/spec/BPMN/20100524/MODEL")
})
package com.bpmn;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

2.要實現xml和java對象的映射關係,須要用如下兩種方法之一來進行標註:code

  • 方法一:使用@XmlAccessorType註解和屬性聲明上添加@XmlAttribute或@XmlElement
  • 方法二:直接在get或set方法上使用@XmlAttribute或@XmlElement
相關文章
相關標籤/搜索