我有一个XSD文件,从中我想生成C#和Java类为好。
我先按照我的地方居住类我的C#的命名空间设置命名空间的XSD。 生成(与Microsoft工具)工作正常,也序列化的伟大工程,我能validat他们对XSD - 完美。
现在,我想与JAXB创建的Java类。 的问题是,这将要创建的类具有然后不同的封装结构中的一个在C#。 所以,当我XSD命名设置为Java的封装结构,它工作正常。 我可以序列化和验证XML。
现在我的问题(S):有没有解决这个问题的方法吗? (有两种生成工具一个XSD)我缺乏实际需要的命名空间有什么认识?
谢谢
编辑:既然它似乎有一个missunderstanding,我添加了一个例子
XSD:目标名称= “http://foo.bar/mySubNs/model”
- C#Modelnamespace:com.foo.mySubNs.model(其适合的XSD命名空间)中的所有生成的类将有虽然MS代码生成中提供的相同的命名空间
- 爪哇Modelnamespace:com.foo.myOtherSubNs.model(从XSD命名空间不同)生成的类将有“C#命名空间”。 因此,该班将无法编译。
如果我的代码生成过程中更改命名空间对于Java,我可以编译的类。 到现在为止还挺好。 但我不会能够通过对XSD的Java类,以验证生成的XML,因为命名空间不同。
马歇尔我的Java对象,我用JAXB这样的:
ValidationEventCollector validationCollector = new ValidationEventCollector();
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = schemaFactory.newSchema(new File ("my/schema/location"));
// JAXB_CONTEXT is just an instance of "JAXBContext"
Marshaller marshaller = JAXB_CONTEXT.createMarshaller();
marshaller.setSchema(schema);
marshaller.setEventHandler(validationCollector);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
JAXBElement<MyClass> root = new JAXBElement<MyClass> ( new QName(MyClass.class.getPackage().getName(),"MyClass"),MyClass.class, node);
marshaller.marshal(root, new File("output/Path/obj.xml"));
要我在Ant构建脚本使用XJC任务模式构建Java类:
<xjc destdir="${dir.src.gen}" removeOldOutput="no" extension="true">
<schema dir="${dir.schema}" includes="${file.schema}"/>
<binding dir="${dir.schema}" includes="*.xjb"/>
<produces dir="${dir.src.gen}" includes="**/*.java"/>
</xjc>