我有几个重复使用相同实体的XSD。例如,无论是对的XSD
ProductPurchaseRequest.xsd
和ProductQuoteRequest.xsd
都有一个<product>
在他们的标签来描述产品的问题。因此,我创建了一个Product.xsd
文件来定义<product>
标记,并同时定义了
两个标记,ProductPurchaseRequest.xsd
并使用ProductQuoteRequest.xsd
导入
Product.xsd`。
我想使用Castor从这些XSD生成Java类,并且让他们两个都使用相同的类来表示XSD,Product
这样我就可以重用相同的逻辑将它们映射到模型的ProductModel
类。
Castor可以这样做吗?如果是这样,那么Ant任务语法将是什么。如果不是,也许JAXB是更好的选择?
因此,我可以使用JAXB参考实现来使整个工作正常进行。诀窍是要意识到从JAXB站点 下载 是一个
下载器, 而 不是 实际的库!双击接受许可,库将在本地下载。创建一个测试文件夹(JAXB_TEST
),并将所有下载的.jar
s
复制到一个lib
子文件夹。我将所有XSD放在XSD
子文件夹中。之后,我运行了以下Ant build.xml
文件。
<?xml version="1.0"?>
<project name="jaxb_test" basedir="." default="package" >
<taskdef name="xjc" classname="com.sun.tools.xjc.XJCTask">
<classpath>
<fileset dir="./lib" includes="*.jar" />
</classpath>
</taskdef>
<target name="generate">
<delete dir="./gen-src" />
<mkdir dir="./gen-src" />
<xjc destdir="./gen-src" language="XMLSCHEMA" package="com.mmm" >
<schema dir="./xsd" includes="EPC*.xsd" />
</xjc>
</target>
<target name="compile" depends="generate" >
<delete dir="./bin" />
<mkdir dir="./bin" />
<javac srcdir="./gen-src" destdir="./bin" includeantruntime="false" />
</target>
<target name="package" depends="compile" >
<delete dir="./dist" />
<mkdir dir="./dist" />
<jar destfile="./dist/jaxb-gen.jar" basedir="./bin" />
</target>
</project>
我唯一的问题是我有一个带根标签的xsd,该根标签称为<product>
匿名扩展了Product
类型,以添加一个version
属性(我一直希望在根标签上拥有该属性),这会导致JAXB发生名称冲突。因此,我改为将匿名类型转换为命名类型(即TopLevelProduct
),并将根设置为该类型,JAXB对此感到满意。
我有一些XSD,其中一些共享公共定义。我将这些通用定义分离到一个单独的XSD中。到目前为止,我通过跨项目的相对路径导入了这个。Thsi之所以起作用,是因为所有项目都在dame SCM存储库中。 现在,我将这些项目分离到单独的SCM存储库中,并且需要更改对的访问,而该访问已经存在于它自己的项目中()。 我读到的是:http://www.sagehill.net/docbookxsl/writecat
与JAXB为给定XSD生成JAXB类类似,Jackson是否提供了从XSD或JSON生成Jackson类的实用程序。 JAXB类geberator已经生成了一组为XSD模式定义的类。例如,对于多态类型,JAXB具有以下注释,以基于XML元素名称来标识名称。 是否可以在杰克逊中创建类似的类。即,基于XML元素名称来标识类型。
问题内容: 我已经使用JAXB编写了许多类进行序列化,并且我想知道是否存在一种基于注释为每个对象生成XSD文件的方法。有这个工具吗? 喜欢的东西是 真棒 。有什么可以做的吗? 问题答案: 是的,您可以在JAXBContext上使用该方法: 您可以利用实现控制输出的位置:
问题内容: 我有一个巨大的QuickBooks SDK .XSD模式文件,该文件定义了我可以从QuickBooks发送/接收的XML请求/响应。 我希望能够轻松地从这些.XSD文件生成Java类,然后将其用于将XML编组为Java对象,以及将Java对象编组为XML。 是否有捷径可寻…? 理想情况下,它在运行时不需要基本Java发行版外部的任何库。但是我很灵活 问题答案: JAXB确实可以满足您的
这里有两个xsd定义,它们几乎90%相似。下面是第一个xsd的框架: 第二个xsd是: 现在,这两个XSD在两个不同的包中生成两组类。我正在使用JAXB来解组收到的XML。XML是从这两个XSD生成的。 在创建JAXB上下文时,它给我带来了错误,因为我相信大多数类都会导致冲突。 下面是错误跟踪: 如果有人能给我提出任何解决方案,那就太好了。 谢谢
问题:“main.xsd”是一个有效的xml模式文档吗? 当使用解析器(或从python库(该库反过来使用xmllint)进行验证时,我会得到以下错误: 元素“{http://www.w3.org/2001/xmlschema}Element”,属性“ref”:不允许从该架构引用命名空间“http://imported”中的组件,因为没有由import语句指示。WXS架构main.xsd编译失败