2012-10-12 41 views
3

最近我遇到這似乎是很常見的一個問題:如何表示與屬性和簡單的文本內容的XML元素,像這樣:JAXB:與文本內容和屬性的元素,生成類與XJC

<elem attr="aval">elemval</elem> 

使用JAXB。

我發現了很多關於如何做到這一點的建議,但是這些建議中的每一個都涉及手動編輯綁定類。

我有一套模式,我使用XJC將這些模式轉換爲Java類。但是,它似乎產生錯誤的代碼,即它不會生成設置普通內容的方法,只有設置屬性的方法。

是否有可能修復XJC的這種行爲?廣泛的谷歌搜索沒有幫助這個問題。

回答

6

下面是一個爲您定義XML結構的XML模式用例。

<?xml version="1.0" encoding="UTF-8"?> 
<schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.example.org/schema" 
    xmlns:tns="http://www.example.org/schema" elementFormDefault="qualified"> 

    <element name="elem"> 
     <complexType> 
      <simpleContent> 
       <extension base="string"> 
        <attribute name="attr" type="string" /> 
       </extension> 
      </simpleContent> 
     </complexType> 
    </element> 

</schema> 

生成此XML模式的JAXB模式將導致以下類:

package forum12859885; 

import javax.xml.bind.annotation.XmlAccessType; 
import javax.xml.bind.annotation.XmlAccessorType; 
import javax.xml.bind.annotation.XmlAttribute; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.bind.annotation.XmlType; 
import javax.xml.bind.annotation.XmlValue; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "value" 
}) 
@XmlRootElement(name = "elem") 
public class Elem { 

    @XmlValue 
    protected String value; 
    @XmlAttribute(name = "attr") 
    protected String attr; 

    public String getValue() { 
     return value; 
    } 

    public void setValue(String value) { 
     this.value = value; 
    } 

    public String getAttr() { 
     return attr; 
    } 

    public void setAttr(String value) { 
     this.attr = value; 
    } 

} 
+1

這是非常奇怪的。我有完全相同的模式,直到命名空間前綴,並且我確定XJC生成了一個沒有'getValue'和'setValue'方法的類...我已經在我自己的計算機上測試了它,並且它已成功運行。我會在兩天內再試一次,也許我錯過了一些東西。非常感謝你。 –

+1

是的,這是我的錯。剛剛檢查過我的模式,它實際上'complexContent'而不是'complexType'規範內的'simpleContent'。似乎這是問題;將其改爲'simpleContent',它的功能就像一個魅力。再次感謝你,我會接受你的回答。 –