2011-04-28 3 views
4

L'utilisation de ce XSD simplifié (simplifié, mais toujours bavard que tous les XSD ont tendance à être):Getter sur xmlbeans classe générée retour nul et il ne devrait pas

<?xml version="1.0"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="[redacted]"> 
<xsd:element name="Statement" type="BILLINGSTATEMENTTYPEType"/> 

<xsd:complexType name="BILLINGSTATEMENTTYPEType"> 
    <xsd:sequence> 
    <xsd:element name="AccountSection" type="ACCOUNTSECTIONTYPEType"/> 
    <xsd:element name="DataSection" type="DATASECTIONTYPEType"/> 
    <xsd:element name="Summary" type="SUMMARYTYPEType"/> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="ACCOUNTSECTIONTYPEType"> 
    <xsd:sequence> 
    <xsd:element name="Foo" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="DATASECTIONTYPEType"> 
    <xsd:sequence> 
    <xsd:element name="Bar" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/> 
    </xsd:sequence> 
</xsd:complexType> 

<xsd:complexType name="SUMMARYTYPEType"> 
    <xsd:sequence> 
    <xsd:element name="Baz" type="xsd:string" maxOccurs="unbounded" minOccurs="0"/> 
    </xsd:sequence> 
</xsd:complexType> 

</xsd:schema> 

I généré un fichier JAR (en utilisant le <xmlbean> Ant task from xmlbeans), et tout semble très bien, je reçois tous les bons types et autres joyeusetés. Mais quand je l'ai analyser ce document simplifié:

<Statement> 
    <AccountSection> 
     <Foo>bar</Foo> 
    </AccountSection> 
    <DataSection> 
    </DataSection> 
    <Summary> 
    </Summary> 
</Statement> 

En utilisant ce code:

public class XmlTest { 
    public static void main(String[] args) throws Exception { 
     File xmlFile = new File("./data/test.xml"); 
     FileInputStream xmlStream = new FileInputStream(xmlFile); 

     BILLINGSTATEMENTTYPEType statement = BILLINGSTATEMENTTYPEType.Factory.parse(xmlStream); 

     ACCOUNTSECTIONTYPEType acctSection = statement.getAccountSection(); 

     System.out.println(statement.xmlText()); 
     System.out.println("acctSection is null:" + (acctSection == null)); 
    } 
} 

Le acctSection (et l'une des sections de l'enfant que j'ai essayé) sont toujours nulle, même si elle est analyse complète du document.

Sortie:

<Statement> 
    <AccountSection> 
     <Foo>bar</Foo> 
    </AccountSection> 
    <DataSection> 
    </DataSection> 
    <Summary> 
    </Summary> 
</Statement> 
acctSection is null:true 

Pourquoi est-il nul? Pourquoi sont-ils tous Nuls? Ai-je mal défini quelque chose quelque part dans mon XSD? J'ai utilisé xmlbeans avant de réussir et je n'ai jamais eu ce problème, c'est pourquoi je suis sûr que je manque quelque chose mais je n'ai pas réussi à le trouver.

Répondre

3

Je ne suis pas moi-même un exporteur de xmlbeans, mais j'ai remarqué que vous utilisiez la classe Factory du type complexe pour analyser le xml. Pouvez-vous essayer d'utiliser StatementDocument.Factory à la place?

+0

Cela m'a presque donné où je devais aller. Le problème réel plus large a ensuite eu quelques problèmes d'espace de noms XML qui ont suivi, mais cela m'a permis de dépasser ces enfants nuls, merci! –

0

Mon problème a été résolu en ajoutant elementFormDefault="qualified" dans l'espace de noms de mon fichier .xsd.

Questions connexes