2010-11-22 19 views
2

Basit classes'un doğru şemasını (yapı ve veri türlerini doğrulamak için) belirlerken zor bir zaman geçiriyorum. Örneğin, schemagen (JDK ile birlikte verilir) ile Employee sınıfına cevap alabilirim, ancak yine de HumanResources için çalışmaya başlayamadım.Marshaller setSchema için uygun XML şeması

Employee sınıf örneklerinin toplanmasını XML'e serileştirmeye çalışıyorum. Bunun için, Employee sınıf öğelerinin bir listesini içeren HumanResources sınıfını oluşturdum. Örnek:

Önce javax.xml.bind.SchemaOutputResolver genişleten bir sınıf oluşturmak gerekir: Aşağıda

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); 

cevap

2

JAXBContext kullanarak bir XML şeması oluşturma konusunda bir örnektir. Oluşturulan XML Şemasını yakalamak için JAXBContext ile bu sınıfın bir örneğini kullanın. Daha sonra bu sınıfın bir örneğini oluşturulan XML Şemasını yakalamak için JAXBContext ile kullanın. Daha fazla bilgi için

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); 

bkz:

İlgili konular