La façon de traiter avec JAXB ComplexType avec MixedContent de données?

J'ai eu cette structure XML:

<Tax>
  <Money currency="USD">0.00</Money>
  <Description xml:lang="en">
     17.5% Non-Recoverable
    <ShortName>vatspecial</ShortName>
  </Description>
</Tax>

Avis que Description nœud a MixedContent (composé avec du texte et XML) et c'est le XSD partie concernant Description nœud:

<xsd:complexType name="TaxDescriptionType">
  <xsd:sequence>
    <xsd:element name="ShortName" type="xsd:string" />
  </xsd:sequence>
  <xsd:attribute ref="xml:lang" />
</xsd:complexType>

Tout est ok à ce point, XJC sorties, les classes générées comme celui-ci concernant TaxDescriptionType:

package org.com.project;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlSchemaType;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.CollapsedStringAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
/**
* <p>Java class for TaxDescriptionType complex type.
* 
* <p>The following schema fragment specifies the expected content contained within this class.
* 
* <pre>
* &lt;complexType name="TaxDescriptionType">
*   &lt;complexContent>
*     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
*       &lt;sequence>
*         &lt;element name="ShortName" type="{http://www.w3.org/2001/XMLSchema}string"/>
*       &lt;/sequence>
*       &lt;attribute ref="{http://www.w3.org/XML/1998/namespace}lang"/>
*     &lt;/restriction>
*   &lt;/complexContent>
* &lt;/complexType>
* </pre>
* 
* 
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "TaxDescriptionType", propOrder = {
"shortName"
})
public class TaxDescriptionType {
@XmlElement(name = "ShortName", required = true)
protected String shortName;
@XmlAttribute(name = "lang", namespace = "http://www.w3.org/XML/1998/namespace")
@XmlJavaTypeAdapter(CollapsedStringAdapter.class)
@XmlSchemaType(name = "NCName")
protected String lang;
/**
* Gets the value of the shortName property.
* 
* @return
*     possible object is
*     {@link String }
*     
*/
public String getShortName() {
return shortName;
}
/**
* Sets the value of the shortName property.
* 
* @param value
*     allowed object is
*     {@link String }
*     
*/
public void setShortName(String value) {
this.shortName = value;
}
/**
* Gets the value of the lang property.
* 
* @return
*     possible object is
*     {@link String }
*     
*/
public String getLang() {
return lang;
}
/**
* Sets the value of the lang property.
* 
* @param value
*     allowed object is
*     {@link String }
*     
*/
public void setLang(String value) {
this.lang = value;
}
}

Puis, avec ce qui précède class je suis en mesure de travailler avec les éléments comme ceci:

taxDescriptionType.setLang("en");
taxDescriptionType.setShortName("vatspecial");
/* missing value: 17.5% Non-Recoverable */

Mais le problème est que je ne peux pas trouvé un moyen de get ou set la 17.5% Non-Recoverable texte de la MixedContent-ComplexType à partir de ci-dessus XML exemple.


C'est ce que j'ai essayé et ça ne marche pas:

  • Utilisé mixed="true" attribut comme ceci:

<xsd:complexType name="TaxDescriptionType" mixed="true">

(Je pense que XJC, c'est ignorer le dernier attribut)


Faisant quelques recherches, j'ai trouvé ceci:

JAXB XJC compilateur mépris mixte=true sur les documents de Schéma XML

Mais je ne suis pas sûr si c'est la manière de résoudre ce problème. Une des réponses a dit que c'est un bug et dans l'autre on montre un code qui transforme le MixedContent dans un List<Serializable> et peut-être la prochaine situation sera sur la façon de traiter ce:

taxDescriptionType.getContent().add(Serializable element);

(Et je ne sais vraiment pas comment traiter avec un Serializable élément)

InformationsquelleAutor Oscar | 2012-09-24