使用xjc离线包含XMLSchema

时间:2015-02-17 13:48:53

标签: java xml xsd jaxb

我有一个引用的XSD文件和元素xs:schema。当我运行连接到Internet的xjc时,它会创建相应的JAXB对象。当我尝试将XMLSchema.xsd作为本地文件引用时,它会失败。

如何引用XMLSchema.xsd的本地xsd文件副本,以便我可以离线运行xjc来创建JAXB类?

目前我致电xjc -d out schema0.xsd schema1.xsd

Schema0.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.w3schools.com" 
    xmlns="http://www.w3schools.com" xmlns:xs="http://www.w3.org/2001/XMLSchema" 
    elementFormDefault="qualified">

    <xs:import namespace="http://www.w3.org/2001/XMLSchema" schemaLocation="http://www.w3.org/2001/XMLSchema.xsd"/>
    <xs:element name="children">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="0" maxOccurs="1" name="childname" />
                <xs:element ref="xs:schema" />
                <xs:any />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Schema1.xsd

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema 
targetNamespace="http://www.w3schools.com" 
xmlns="http://www.w3schools.com" 
xmlns:xs="http://www.w3.org/2001/XMLSchema" 
elementFormDefault="qualified">
    <xs:import namespace="http://www.w3.org/2001/XMLSchema"  schemaLocation="http://www.w3.org/2001/XMLSchema.xsd" />
    <xs:element name="person">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="firstname" type="xs:string"/>
                <xs:element name="lastname" type="xs:string"/>
                <xs:any minOccurs="0"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

1 个答案:

答案 0 :(得分:3)

下载XMLSchema.xsd ...

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://www.w3.org/2001/XMLSchema.xsd > XMLSchema-new.xsd

从...中删除文件的第一部分

<!DOCTYPE xs:schema PUBLIC "-//W3C//DTD XMLSCHEMA.....
.... To ....
<!ATTLIST xs:union id ID #IMPLIED>
]>

下载XMLSchema.xsd引用的xml.xsd文件....

curl -H "Accept: application/xml" -H "Content-Type: application/xml" -X GET http://www.w3.org/2001/xml.xsd > xml-new.xsd

创建目录文件....

catalog.cat

SYSTEM "http://www.w3.org/2001/XMLSchema" "XMLSchema-new.xsd"
PUBLIC "http://www.w3.org/2001/XMLSchema" "XMLSchema-new.xsd"
PUBLIC "http://www.w3.org/XML/1998/namespace" "xml.xsd"

断开互联网连接并运行xjc -catalog catalog.cat schema0.xsd schema1.xsd

感谢Blaise详细article。我无法删除XMLSchema.xsd的<!DOCTYPE部分,这导致xjc失败。