我有一个XSD文件,我也想从中生成C#和Java类。
我首先根据我的类所在的C#名称空间在XSD中设置名称空间。生成(使用Microsoft工具)效果很好,并且序列化效果很好,我可以针对XSD对其进行验证-
完美。
现在,我想用JAXB创建Java类。问题在于将要创建的类与C#中的类具有不同的包结构。因此,当我将XSD名称空间设置为java的包结构时,它可以正常工作。我可以序列化和验证XML。
现在我的问题是:有办法解决这个问题吗?(两个生成工具都具有一个XSD)我是否对名称空间的实际用途缺乏了解?
谢谢
编辑:由于似乎有一个误会,我添加了一个示例
**XSD:targetNamespace =“ http://foo.bar/mySubNs/model”**
如果在Java代码生成期间更改命名空间,则可以编译这些类。到目前为止,一切都很好。但是由于命名空间不同,我将无法通过该Java类针对XSD验证生成的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"));
要从模式构建Java类,请在ant构建脚本中使用xjc-task:
<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>
XSD名称空间不必匹配包结构,至少在Java中不需要。使用JAXB生成类时,只需提供要放入类的包即可。
这里有两个xsd定义,它们几乎90%相似。下面是第一个xsd的框架: 第二个xsd是: 现在,这两个XSD在两个不同的包中生成两组类。我正在使用JAXB来解组收到的XML。XML是从这两个XSD生成的。 在创建JAXB上下文时,它给我带来了错误,因为我相信大多数类都会导致冲突。 下面是错误跟踪: 如果有人能给我提出任何解决方案,那就太好了。 谢谢
我有一个采访问题-C#,是否可以在一个类中实现,从接口继承有两个具有相同名称和相同签名的方法?
新安装Eclipse Mars.1,从市场上安装代号一,新安装运行在OSX 10.9.4上的Java1.8。 Eclipse和项目本身设置为在所有编译中使用Java1.8,我还更改了构建中的设置。xml将1.8设置为要使用的版本。 当我试图通过右键单击项目标题并选择“新建/其他”并选择gui builder来添加gui builder页面时,请单击“下一步” 在谷歌搜索错误,但与代号1无关。 任何
问题内容: 我正在尝试使用RSA 7.5和Websphere 7服务器开发IBM JAX_WS Web服务。因为我是一个初学者,所以我遵循Java类优先方法,即首先创建Java类,然后生成WSDL文件。 当我尝试创建wsdl文件时,出现异常: java.security.PrivilegedActionException:com.sun.xml.internal.bind.v2.runtime.I
问题内容: 我正在用C#编写.NET Framework 3.5。 我正在尝试将某些Json解析为JObject。 Json如下: 当我尝试将此Json解析为JObject时,JObject仅了解LargeBox。SmallBox和MedBox的信息丢失。显然,这是因为它将“ TBox”解释为一个属性,并且该属性已被覆盖。 我从Delphi编码的服务中收到此Json。我正在尝试为该服务创建C#代理
本文向大家介绍手写代码:两个栈实现一个队列?相关面试题,主要包含被问及手写代码:两个栈实现一个队列?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: