当前位置: 首页 > 面试题库 >

Castor可以处理从基本XSD导入的多个XSD生成的类吗?

乐正迪
2023-03-14
问题内容

我有几个重复使用相同实体的XSD。例如,无论是对的XSD
ProductPurchaseRequest.xsdProductQuoteRequest.xsd都有一个<product>在他们的标签来描述产品的问题。因此,我创建了一个Product.xsd文件来定义<product>标记,并同时定义了
两个标记,ProductPurchaseRequest.xsd并使用ProductQuoteRequest.xsd导入Product.xsd`。

我想使用Castor从这些XSD生成Java类,并且让他们两个都使用相同的类来表示XSD,Product这样我就可以重用相同的逻辑将它们映射到模型的ProductModel类。

Castor可以这样做吗?如果是这样,那么Ant任务语法将是什么。如果不是,也许JAXB是更好的选择?


问题答案:

因此,我可以使用JAXB参考实现来使整个工作正常进行。诀窍是要意识到从JAXB站点 下载 是一个
下载器,不是 实际的库!双击接受许可,库将在本地下载。创建一个测试文件夹(JAXB_TEST),并将所有下载的.jars
复制到一个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编译失败