2011-05-04 44 views
1

* *編輯 - 到底我刪除了抽象的擴展得到這個功能,從布萊斯下面的答案,然後工作JAXB價值

你好。
我在我的模式中的複雜類型:

<xs:complexType name="AbstractWorkflow" abstract="true"> 
    <xs:attribute name="id" type="xs:ID" use="required"/> 
</xs:complexType> 
<xs:complexType name="ProcessWorkflow" mixed="true"> 
    <xs:complexContent> 
     <xs:extension base="AbstractWorkflow"/> 
    </xs:complexContent> 
</xs:complexType> 

輸入要解組就是這個

<ns1:Workflow stb:id="Workflow" xsi:type="ns1:ProcessWorkflow">workflowHTML.xml</ns1:Workflow> 

但我這樣做的時候我沒有得到任何選項來訪問值:從workflowHTML.xml已從xjc生成的類 。這是生成的AbstractWorkflow類的開始是否有我可以在此類中聲明的註釋,它擴展了抽象類,以指定它是一個本身攜帶值的元素?應該將它聲明爲FIELD還是?

編輯它是擴展類,我需要實現一個值的讀取,而不是我最初在這裏得到的抽象類。

@XmlAccessorType(XmlAccessType.PUBLIC_MEMBER) 
@XmlType(name = "ProcessWorkflow") 
public class ProcessWorkflow 
    extends AbstractWorkflow 
{ 



} 

感謝您的閱讀。

回答

3

我相信你正在尋找@XmlValue註解。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
public class Foo { 

    @XmlAttribute 
    private int id; 

    @XmlValue 
    private String value; 

} 

以上,相當於以下XML架構:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<xs:schema version="1.0" xmlns:xs="http://www.w3.org/2001/XMLSchema"> 

    <xs:element name="foo" type="foo"/> 

    <xs:complexType name="foo"> 
    <xs:simpleContent> 
     <xs:extension base="xs:string"> 
     <xs:attribute name="id" type="xs:int" use="required"/> 
     </xs:extension> 
    </xs:simpleContent> 
    </xs:complexType> 
</xs:schema> 

而且這樣的XML:

<foo id="123">Some Value</foo> 
+0

感謝您的答覆布萊斯。我編輯了我原來的問題。由於我已經擴展了一個抽象類,所以這不適用於我的情況。在我的模式定義中,ProcessWorkflow是一個具有價值的模型。所以我已經使用了擴展標籤。另外,如果我直接編輯該類以包含@XmlValue,那麼我接受@XmlValue的引用另一個類的類是不允許的。 **爲了澄清我的問題,有沒有辦法給延伸/派生另一個類的類添加一個值?** – Gurnard 2011-05-04 14:27:23

+0

@Gurnard - 我正在修復EclipseLink JAXB(MOXy)中的一個相關錯誤,https:// bugs.eclipse.org/336099。只要父類沒有將任何元素映射到元素,您應該能夠映射到子類中的值。這個bug也存在於JAXB參考實現中。檢入此修復程序後,您可以使用MOXy作爲您的JAXB實現來解決您的問題:http://www.eclipse.org/eclipselink/moxy.php – 2011-05-04 14:40:34

+0

哦。 MOXy是否可以替代命名空間前綴的package-info.java工作? JAXB的jdk1.6.0_24實現不適用於此,所以我剛剛更改爲使用Sun的實現,該實現似乎適用於此名稱空間問題。只是有點擔心轉移到另一個實施。 :-) – Gurnard 2011-05-04 14:51:38