Tag: jaxb codegen

一个XSD,两个代码生成工具,两个命名空间

我有一个XSD文件,我也想从中生成C#和Java类。 我首先根据我的类所在的C#命名空间在XSD中设置命名空间。 这一代(使用Microsoft工具)工作正常,序列化也很有效,我可以针对XSDvalidation它们 – 完美。 现在我想用JAXB创建java类。 问题是要创建的类具有与C#中的类不同的包结构。 因此,当我将XSD命名空间设置为java的包结构时,它工作正常。 我可以序列化并validationXML。 现在我的问题:有没有办法解决这个问题? (两个生成工具都有一个XSD)我是否缺乏对实际需要名称空间的理解? 谢谢 编辑:由于似乎有一个误解,我添加了一个例子 XSD:targetNamespace =“http://foo.bar/mySubNs/model” C#Modelnamespace:com.foo.mySubNs.model(适合XSD名称空间)所有生成的类将具有通过MS codegen提供的相同名称空间 Java Modelnamespace:com.foo.myOtherSubNs.model(与XSD名称空间不同)生成的类将具有“C#名称空间”。 因此,类将无法编译。 如果我在java代码生成期间更改命名空间,我可以编译类。 到现在为止还挺好。 但是由于命名空间不同,我无法通过针对XSD的java类validation生成的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”); […]