2010-11-22 18 views
2

J'ai du mal à trouver le bon schéma (pour valider la structure et les types de données) de classes simple. Par exemple, je pourrais obtenir la réponse pour Employee classe avec schemagen (fourni avec JDK), mais ne pouvait toujours pas le faire fonctionner pour HumanResources.Schéma XML approprié pour Marshaller setSchema

J'essaie de sérialiser la collection d'instances de classe Employee en XML. Pour cela, j'ai créé la classe HumanResources, qui contient une liste d'éléments de classe Employee. Exemple:

ArrayList<Employee> ems = getTestData(); 
    HumanResources hm = new HumanResources(ems); 
    SchemaFactory sf = SchemaFactory.newInstance(javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI); 
    JAXBContext jaxbContext = JAXBContext.newInstance(HumanResources.class); 

    Marshaller marshaller = jaxbContext.createMarshaller(); 
    marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); 
    marshaller.setSchema(sf.newSchema(new File("src\\server\\HumanResources.xsd"))); 
    marshaller.marshal(new JAXBElement<HumanResources>(
      new QName(null, "HumanResources"), HumanResources.class, hm), os); 

Répondre

2

Voici un exemple de la façon de créer un schéma XML à l'aide du JAXBContext:

D'abord, vous devez créer une classe qui étend javax.xml.bind.SchemaOutputResolver. Ensuite, utilisez une instance de cette classe avec JAXBContext pour capturer le schéma XML généré.

Class[] classes = new Class[4]; 
classes[0] = org.example.customer_example.AddressType.class; 
classes[1] = org.example.customer_example.ContactInfo.class; 
classes[2] = org.example.customer_example.CustomerType.class; 
classes[3] = org.example.customer_example.PhoneNumber.class; 
JAXBContext jaxbContext = JAXBContext.newInstance(classes); 

SchemaOutputResolver sor = new MySchemaOutputResolver(); 
jaxbContext.generateSchema(sor); 

Pour plus d'informations, voir: