【发布时间】:2026-01-01 05:30:01
【问题描述】:
我正在使用 JAXB 和 intellij webservices 插件从 XSD 创建 java 文件。我有两个定义相同对象的 XSD,但是当我使用“从 XML 模式生成 java 代码”创建它们时,该对象是用他自己的包创建的两次。我已经尝试过 import xsd 并使用 ref 属性,我得到了相同的结果。
这是一个例子:
这是第一个 XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.msp-gs.com/workflow"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:wc="http://www.example.com/workflow"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
jaxb:version="1.0">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings enableJavaNamingConventions="true">
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="WC">
<xs:complexType>
<xs:sequence>
<xs:element name="Example"
type="wc:Restriction"
minOccurs="1"
maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Restriction">
<xs:attribute type="xs:string"
name="authorizationTreeId"/>
</xs:complexType>
</xs:schema>
这是第二个 XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.msp-gs.com/workflow"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:fd="http://www.example.com/workflow"
attributeFormDefault="unqualified"
elementFormDefault="qualified"
jaxb:version="1.0">
<xs:annotation>
<xs:appinfo>
<jaxb:globalBindings enableJavaNamingConventions="true">
</jaxb:globalBindings>
</xs:appinfo>
</xs:annotation>
<xs:element name="FD">
<xs:complexType>
<xs:sequence>
<xs:element name="Example"
type="fd:Restriction"
minOccurs="1"
maxOccurs="unbounded">
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="Restriction">
<xs:attribute type="xs:string"
name="authorizationTreeId"/>
</xs:complexType>
</xs:schema>
我希望 Restriction 是同一个对象。
谢谢。
【问题讨论】:
-
谢谢,我会马上进入并告诉你它是否有效。再次感谢您。
-
@Rotem:是什么阻止了您在这两种情况下都使用一个 XSD 文件?两个 XSD 的问题是您必须生成两次模型对象,但您可以为此使用相同的输出目录,因此第 2 次运行将覆盖第 1 次。或者您可以在模式生成后执行一些技巧(复制/清理)。
-
@dma_k:首先输出目录应该分开,因为有一个逻辑分离(苹果和橘子)。其次,我无法在生成后复制/清理,因为我还需要编组和解组那些生成的 java 文件,我不知道进程是否会受到这些操作的影响。
-
你想杀死两只兔子:有不同的 XSD 和一些共同点。这是直接不可能的。如果西红柿是苹果和橙子的共同点,您可以将它们提取到单独的项目中,将模型生成到与橙子和苹果相同的包中,然后从橙子和苹果项目中删除西红柿(例如使用蚂蚁规则)。