我正在尝试将现有的应用程序从Java 1.8迁移到11,在该应用程序中,我们使用以下插件从xsd生成源代码:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>${maven.jaxb.plugin.version}</version>
<dependencies>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
<version>${jaxb.impl.version}</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>${jaxb.api.version}</version>
</dependency>
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-xjc</artifactId>
<version>${jaxb.xjc.version}</version>
</dependency>
<dependency>
<groupId>jakarta.xml.bind</groupId>
<artifactId>jakarta.xml.bind-api</artifactId>
<version>${jakarta-xml-api.version}</version>
</dependency>
</dependencies>
<executions>
<execution>
<id>horas</id>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<encoding>utf-8</encoding>
<quiet>true</quiet>
<packageName>client.model</packageName>
<schemaDirectory>${basedir}/src/main/config/xsd</schemaDirectory>
<bindingDirectory>${basedir}/src/main/config/xsd</bindingDirectory>
<bindingFiles>bindings.xjb</bindingFiles>
<extension>true</extension>
<clearOutputDir>true</clearOutputDir>
<schemaFiles>model.xsd</schemaFiles>
</configuration>
</execution>
</executions>
</plugin>在xsd中,我们使用类型
<xs:simpleType name="dateTime" id="dateTime">
<xs:annotation>
<xs:appinfo>
<hfp:hasFacet name="pattern"/>
<hfp:hasFacet name="enumeration"/>
<hfp:hasFacet name="whiteSpace"/>
<hfp:hasFacet name="maxInclusive"/>
<hfp:hasFacet name="maxExclusive"/>
<hfp:hasFacet name="minInclusive"/>
<hfp:hasFacet name="minExclusive"/>
<hfp:hasProperty name="ordered" value="partial"/>
<hfp:hasProperty name="bounded" value="false"/>
<hfp:hasProperty name="cardinality"
value="countably infinite"/>
<hfp:hasProperty name="numeric" value="false"/>
</xs:appinfo>
<xs:documentation
source="http://www.w3.org/TR/xmlschema-2/#dateTime"/>
</xs:annotation>
<xs:restriction base="xs:anySimpleType">
<xs:whiteSpace value="collapse" fixed="true"
id="dateTime.whiteSpace"/>
</xs:restriction>
</xs:simpleType>为了转换日期,我们有这样的绑定:
<?xml version="1.0"?>
<jxb:bindings version="1.0"
xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
jxb:extensionBindingPrefixes="xjc"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="model.xsd" node="/xs:schema">
<jxb:globalBindings>
<xjc:javaType name="org.joda.time.DateTime"
xmlType="xs:dateTime"
adapter="client.adapter.JodaDateTimeAdapter"/>
<xjc:simple/>
</jxb:globalBindings>
</jxb:bindings>
</jxb:bindings>使用一个简单的适配器
/**
* Class adapter afin de traiter les objets de type {@link org.joda.time.DateTime}
*/
public final class JodaDateTimeAdapter extends XmlAdapter<String, DateTime> {
/**
* Conversion d'une String représentant une date en objet {@link DateTime}
*
* @param value Une String représentant une date selon le pattern ISO8601
* @return Un objet {@link DateTime}
*/
@Override
public DateTime unmarshal(String value) {
return ISODateTimeFormat.dateTimeParser().parseDateTime(value);
}
/**
* Conversion d'un objet {@link DateTime} en string selon le pattern
*
* @param value {@link DateTime} à convertir
* @return Une String représentant une date selon le pattern ISO8601
*/
@Override
public String marshal(DateTime value) {
return ISODateTimeFormat.dateTime().print(value);
}
}它在1.8中运行良好,但在使用Java11构建之后,绑定似乎不再起作用,实际上,生成的类具有XMLGregorianCalendar而不是joda.dateTime。
之所以找到绑定文件,是因为如果我更改了POM中的路径,就会发生错误,这意味着绑定是正常的,但是由于某种原因,jaxb忽略了它。
你知道应该做些什么才能再次拥有joda.DateTime吗?
发布于 2021-08-05 07:49:32
好的,这就是需要更新的jaxb插件的版本。
在java1.8中工作的旧版本是1.6,我不得不将其更新到2.5.0。
新的生成器是:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>${maven.jaxb.plugin.version}</version>
<executions>
<execution>
<id>schemagen</id>
<phase>generate-sources</phase>
<goals>
<goal>schemagen</goal>
</goals>
</execution>
</executions>
<configuration>
<outputDirectory>${basedir}/target/xsd</outputDirectory>
<clearOutputDir>true</clearOutputDir>
<transformSchemas>
<transformSchema>
<toFile>model.xsd</toFile>
</transformSchema>
</transformSchemas>
<verbose>false</verbose>
<packageName>model</packageName>
<sources>
<source>data/domaine/*.java</source>
<source>data/adapter/*.java</source>
</sources>
</configuration>
</plugin>https://stackoverflow.com/questions/68661684
复制相似问题