Я хочу сгенерировать классы Java из XSD с помощью xjc (версия 2.3.0-b170531.0717)
К сожалению, XSD импортирует другой XSD, заданный в относительном пути с разделителями пути Windows (обратная косая черта \
), который указан как исключенный символ в соответствии с RFC-2396 в xsi: schemaLocation Обратная косая черта не разрешена?
При запуске только xjc
схема компилируется нормально. Но я хочу указать некоторые привязки с параметром командной строки -b bindings.xjb
, и тогда обратная косая черта станет проблемой, приводящей к сбою анализа схемы.
Как я могу обойти эту проблему? Я пытался использовать каталог для разрешения путей, но, похоже, он не работает до использования каталога.
Минимальный рабочий пример
a.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:b="b.xsd"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified">
<xsd:import namespace="b.xsd" schemaLocation=".\b.xsd"/>
</xsd:schema>
b.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="b.xsd"
elementFormDefault="qualified"/>
c.xjb
<?xml version="1.0" encoding="UTF-8"?>
<jaxb:bindings
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
xmlns:xs="http://www.w3.org/2000/10/XMLSchema-instance"
xs:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"
jaxb:version="2.0" />
консольный вывод
> xjc a.xsd
parsing a schema...
compiling a schema...
> xjc a.xsd -b c.xjb
parsing a schema...
[ERROR] Unable to parse ".\b.xsd" : File name is not an URI. Illegal character in path at index 1: .\b.xsd
line 3 of a.xsd
Failed to parse a schema.
РЕДАКТИРОВАТЬ: С xjc -verbose
я получаю следующую StackTrace, утверждая, что это проблема, возникающая из-за того, что класс Java URI
соответствует стандарту и, таким образом, отклоняет обратную косую черту.
java.net.URISyntaxException: Illegal character in path at index 1: .\b.xsd
at java.base/java.net.URI$Parser.fail(URI.java:2912)
at java.base/java.net.URI$Parser.checkChars(URI.java:3083)
at java.base/java.net.URI$Parser.parseHierarchical(URI.java:3165)
at java.base/java.net.URI$Parser.parse(URI.java:3124)
at java.base/java.net.URI.<init>(URI.java:598)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.reader.internalizer.AbstractReferenceFinderImpl.startElement(AbstractReferenceFinderImpl.java:81)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:183)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:351)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2706)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:601)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at java.xml/com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:531)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:887)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:823)
at java.xml/com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:141)
at java.xml/com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1213)
at java.xml/com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:639)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:380)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.reader.internalizer.DOMForest.parse(DOMForest.java:260)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.ModelLoader.buildDOMForest(ModelLoader.java:291)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:344)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.ModelLoader.load(ModelLoader.java:147)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.ModelLoader.load(ModelLoader.java:102)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.Driver.run(Driver.java:339)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.Driver.run(Driver.java:206)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.Driver._main(Driver.java:129)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.Driver.access$000(Driver.java:67)
at jdk.xml.bind@9.0.4/com.sun.tools.internal.xjc.Driver$1.run(Driver.java:88)