当前位置: 首页 > 知识库问答 >
问题:

多个 XSD 重写类

吴举
2023-03-14

我不知道这是否可能,但我会尽力解释。我遇到过一些代码,其中开箱即用的WSDL和XSD被修改,主要是为了有一个带有< code >的自定义XSD

将来,如果WSDL有任何更新,必须有人手动进入并修改XSD以满足我们的需求,并从更新的WSDL版本中获取新项目。

在四处搜索之后,似乎可以将多个模式导入到WSDL的<code>中

基本上,我想拉出修改后的更改,并将它们放在自己的,非常轻量级的XSD中,以减少占用空间。一旦它们位于自己的XSD中,任何新的WSDL更改(新版本等)都可以直接拉入“基本”XSD,同时在“mod”XSD中具有小的覆盖类列表。这些类将具有相同的命名空间和相同的类名。

做这样的事情的正确(可能)方法是什么:

WSDL文件

<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:tns="http://example.com/ExampleNamespace" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xmime="http://www.w3.org/2005/05/xmlmime" 
name="ExampleService" 
targetNamespace="http://example.com/ExampleNamespace">
<wsdl:types xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:schema>
        <xsd:import schemaLocation="ORIGINAL.XSD"
            namespace="http://example.com/ExampleNamespace" />
        <xsd:import schemaLocation="OVERRIDE.XSD"
            namespace="http://example.com/ExampleNamespace" />
    </xsd:schema>
</wsdl:types>
.......
</wsdl:definitions>

原创XSD

<xsd:schema xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/ExampleNamespace" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
targetNamespace="http://example.com/ExampleNamespace">
<xsd:complexType name="ComplexTypeA">
    <xsd:sequence>
        <xsd:element name="exampleElementOne" type="xsd:base64Binary" />
        <xsd:element name="exampleElementTwo" type="xsd:base64Binary" />
    </xsd:sequence>
</xsd:complexType>
...
<xsd:complexType name="ComplexTypeN">
    ...
</xsd:complexType>
</xsd:schema>

覆盖XSD

<xsd:schema xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:tns="http://example.com/ExampleNamespace" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xmime="http://www.w3.org/2005/05/xmlmime"
targetNamespace="http://example.com/ExampleNamespace">
<!-- Override only ComplexTypeA -->
<xsd:complexType name="ComplexTypeA">
    <xsd:sequence>
        <xsd:element name="exampleElementOne" type="xsd:string" />
        <xsd:element name="exampleElementTwo" type="xsd:string" />
    </xsd:sequence>
</xsd:complexType>
</xsd:schema>

共有1个答案

夔建章
2023-03-14

您将无法导入具有相同命名空间的相同元素的两个架构。如果必须更改架构,则必须对现有架构进行更改。

 类似资料:
  • 我尝试使用thajaxb来整理xml,我使用xjc命令从xsd文件order.xsd生成java类 我得到了许多带注释的类,但没有一个@XmlRootElement(name="Order"),也没有名为Order的类

  • 我有一个XSD文件,我想在其中放置几个图表,以及服务的描述。添加时 我得到错误:“多个根标记” 如果我这样写: 我得到错误: 发现以元素{开头的内容无效http://www.w3.org/2001/XMLSchema“:架构}。其中一个{”http://www.w3.org/2001/XMLSchema“:simpleType,”http://www.w3.org/2001/XMLSchema“:

  • 问题内容: 我有几个重复使用相同实体的XSD。例如,无论是对的XSD 和都有一个在他们的标签来描述产品的问题。因此,我创建了一个文件来定义标记,并同时定义了 两个标记,并使用ProductQuoteRequest.xsdProduct.xsd`。 我想使用Castor从这些XSD生成Java类,并且让他们两个都使用相同的类来表示XSD,这样我就可以重用相同的逻辑将它们映射到模型的类。 Castor

  • 问题内容: 我想使用Java解析XML文件,并针对XSD模式在同一步骤中对其进行验证。XML文件可能包含几种模式的内容,如下所示: 给定一个名称空间,可以提供相应的xsd文件,但是在解析之前,所使用的名称空间是未知的。如果架构定义了属性的默认值,我也想以某种方式知道这一点。 如果知道架构,我可以验证文件,无需验证就可以解析文件,并且实现了LSResourceResolver。但是,我无法使其全部协

  • 问题内容: 这个问题已经在这里有了答案 : 水平写CSV (2个答案) 6年前关闭。 多亏了另一个线程,我才以Python初学者的身份成功地将字典写到了csv中:将字典写到 csv文件中,每个“键:值”一行] csv看起来像这样: 现在,我想知道用相同的键组织多个词典的最佳方法是什么。我希望将键作为第一列,然后在其后的各列中使用dict值,所有这些都具有第一行以按字典名称区分各列。 当然,有很多线

  • 问题内容: 就Java而言,当有人问: 什么是多态性? 将超载或重载是一个可以接受的答案? 我认为还有更多。 如果你有一个抽象基类,它定义了一个没有实现的方法,并且你在子类中定义了该方法,那该方法是否仍然覆盖? 我认为过载不是肯定的正确答案。 问题答案: 表达多态性的最清晰方法是通过抽象基类(或接口) 此类是抽象的,因为该方法不适用于人类。只有男性和女性子类别才可以定义。同样,人类是一个抽象的概念