2013-10-28 23 views
1

我有几个XSD,我通过它们通过XJC创建了Java代码。我可以通过“直接映射”POJOs XJC提供的许多信息。剩下的大部分可以通过JAXBElements获取。然而,我不知道如何与他们交谈,有几个因素,即“交易/描述”父母的“成本”因素。JAXB - 无法获取某些对象信息

<transaction> 
    <aid-type code="1995-09-25"/> 
    <flow-type code="10">ODA</flow-type> 
    <provider-org ref="DE-1">BMZ</provider-org> 
    <value currency="EUR" value-date="1995-09-25">2070227</value> 
    <transaction-type code="D">Disbursement</transaction-type> 
    <description type="1" xml:lang="en"> 
    <costs currency="EUR" type="Personnel costs">1060135</costs> 
    <costs currency="EUR" type="Material costs">665117</costs> 
    <costs currency="EUR" type="Other costs">344975</costs> 
    </description> 
</transaction> 

正如你可以看到Transaction.java包含“描述”元素和地图对JAXBElement.class。

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
"valueOrDescriptionOrTransactionType" 
}) 
@XmlRootElement(name = "transaction") 
public class Transaction { 

@XmlElementRefs({ 
    @XmlElementRef(name = "transaction-date", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "value", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "disbursement-channel", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "receiver-org", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "transaction-type", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "description", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "tied-status", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "aid-type", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "finance-type", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "provider-org", type = JAXBElement.class, required = false), 
    @XmlElementRef(name = "flow-type", type = JAXBElement.class, required = false) 
}) 
@XmlAnyElement(lax = true) 
protected List<Object> valueOrDescriptionOrTransactionType; 
@XmlAttribute(name = "ref") 
protected String ref; 
@XmlAnyAttribute 
private Map<QName, String> otherAttributes = new HashMap<QName, String>(); 

在Transaction.java顶部的模式片段说:

... 
&lt;element name="description" type="{}textType"/> 
... 

那么的 '描述' 的类型应该是JAXBElement的<TextType>。该TextType.java看起来是这样的:

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "textType", propOrder = {"content"}) 
public class TextType { 

@XmlMixed 
@XmlAnyElement(lax = true) 
protected List<Object> content; 
@XmlAttribute(name = "lang", namespace = "http://www.w3.org/XML/1998/namespace") 
protected String lang; 
@XmlAnyAttribute 
private Map<QName, String> otherAttributes = new HashMap<QName, String>(); 

我们得到的信息进行交易的我建立一个交易对象并获取它的内容:

List<Object> listOfTransactionContents = transaction.getValueOrDescriptionOrTransactionType(); 

这给了我,我找了清单JAXBElement对象。

for (Object obj : listOfTransactionContents) 
{ 
    JAXBElement<TextType> jaxbElementTextType = (JAXBElement<TextType>) obj; 
    TextType textType = jaxbElementTextType.getValue(); 
    List<Object> listOftTextTypes = textType.getContent(); 
    .... 

但是,这里是问题,我不知道如何获得'成本'元素的内容。上述TextType.java的的getContent()方法,它说:

* Objects of the following type(s) are allowed in the list 
* {@link Element } 
* {@link String } 
* {@link Object } 

的“成本”要素的内容必须存储在某种名单的,因为可以有不止一个下“描述”父。

回答

0

我的上帝是什么旅程......'费用'元素映射到com.sun.org.apache.xerces.internal.dom.ElementNSImpl。我不知道为什么...但我现在通过所需的信息。