我有一个 xsd 文件,用于生成 DTO 文件,其中
jaxb2-maven-plugin
2.5.0
位于 Java 8
下。
现在我迁移到
jaxb2-maven-plugin
3.1.0
(由于之前迁移到 Java 11
而被迫),我收到此错误:
org.xml.sax.SAXParseException: not an external binding file. The root element must be {https://jakarta.ee/xml/ns/jaxb}bindings but it is {http://www.w3.org/2001/XMLSchema}schema
xsd 文件的开头如下:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns="https://www.xxxxx.es/xxxxx/ApiEstandar"
targetNamespace="https://www.xxxxx.es/xxxxx/ApiEstandar"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:complexType name="GenericRequest"/>
<xs:complexType name="GenericResponse">
<xs:sequence>
<xs:element name="codigoRespuesta" type="xs:string" />
<xs:element name="descripcionRespuesta" type="xs:string" />
如果我将
xmlns:xs
值更改为:(就像询问之前的错误消息一样)
<xs:schema xmlns:xs="https://jakarta.ee/xml/ns/jaxb"
然后 Eclipse 抱怨
"xs:string"
名称未解析。
我不确定如何正确配置 xsd 文件。
编辑: 回答 Laurent Schoelens 我没有使用绑定文件,pom.xml 中的插件配置是这样的:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>3.1.0</version>
<executions>
<execution>
<id>xjc</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<locale>en</locale>
<packageName>com.xxxxx.services.xxxxxservice.soap.services.model</packageName>
<sources>
<source>${project.basedir}/src/main/resources/xsd/APIEstandar_v1.0.xsd</source>
</sources>
</configuration>
</plugin>
从 v3 开始,maven-plugin
org.codehaus.mojo:jaxb2-maven-plugin
面向 JAXB3
,这是基于 jakarta
的。
如果您需要 JDK11 支持,而
jaxb2-maven-plugin
的 v2.x 不支持 JDK11 :您可以查看 org.jvnet.jaxb:jaxb-maven-plugin:2.0.9
插件,该插件与 Codehaus 插件非常相似,支持 JDK11、JDK17 甚至 JDK21。