问题描述
我有一个问题,当XSD文件包含双打的默认值时,jaxb2-maven-plugin会生成无效的源代码。
I have a problem where the jaxb2-maven-plugin generates invalid source code when the XSD file contains default values for doubles.
我使用 jaxb2 -maven-plugin(org.codehaus.mojo)版本1.5 :
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.5</version>
<configuration>
</configuration>
<executions>
<execution>
<id>analysis_jaxb</id>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<clearOutputDir>false</clearOutputDir>
<schemaFiles>Analysis.xsd</schemaFiles>
<packageName>xx.xx.xx.analysis</packageName>
<generateDirectory>${project.build.directory}/generated-sources/jaxb/analysis</generateDirectory>
<verbose>true</verbose>
</configuration>
</execution>
</executions>
</plugin>
从以下XSD文件生成Java Source:
to generate Java Source from the following XSD file:
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
<xs:element name="MinMax" type="MinMaxType"/>
<xs:complexType name="MinMaxType">
<xs:attribute name="min" type="xs:double" default="-INF" />
<xs:attribute name="max" type="xs:double" default="INF" />
</xs:complexType>
</xs:schema>
生成的Java文件包含以下方法:
The resulting Java file contains this method:
public double getMin() {
if (min == null) {
return -InfinityD; //UNDEFINED
} else {
return min;
}
}
字段 -InfinityD
未在任何地方定义。
The field -InfinityD
is not defined anywhere.
使用布尔值时(例如< xs:attribute name =minInclusivetype = xs:booleandefault =false/>
)默认值按预期工作。
When using booleans (e.g. <xs:attribute name="minInclusive" type="xs:boolean" default="false" />
) the default values work as expected.
与此相反,插件 org.jvnet.jaxb2.maven2(maven-jaxb2-plugin)会在该有问题的行上写 Double.POSITIVE_INFINITY
。
In contrast to this, the plugin org.jvnet.jaxb2.maven2 (maven-jaxb2-plugin) would write Double.POSITIVE_INFINITY
on that problematic line.
这根本不受支持吗?我错过了参数吗?
Is this simply not supported? Am I missing a parameter?
推荐答案
使用此XSD ...
Using this XSD...
<xs:schema attributeFormDefault="unqualified"
targetNamespace="yourNameSpace"
xmlns:a="yourNameSpace"
elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="MinMax" type="a:MinMaxType"/>
<xs:complexType name="MinMaxType">
<xs:attribute name="min" type="xs:double" default="-INF" />
<xs:attribute name="max" type="xs:double" default="INF" />
</xs:complexType>
</xs:schema>
如果您使用
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.9.0</version>
工作正常
输出:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MinMaxType")
public class MinMaxType {
@XmlAttribute(name = "min")
protected Double min;
@XmlAttribute(name = "max")
protected Double max;
/**
* Recupera il valore della proprietà min.
*
* @return
* possible object is
* {@link Double }
*
*/
public double getMin() {
if (min == null) {
return java.lang.Double.NEGATIVE_INFINITY;
} else {
return min;
}
}
/**
* Imposta il valore della proprietà min.
*
* @param value
* allowed object is
* {@link Double }
*
*/
public void setMin(Double value) {
this.min = value;
}
/**
* Recupera il valore della proprietà max.
*
* @return
* possible object is
* {@link Double }
*
*/
public double getMax() {
if (max == null) {
return java.lang.Double.POSITIVE_INFINITY;
} else {
return max;
}
}
/**
* Imposta il valore della proprietà max.
*
* @param value
* allowed object is
* {@link Double }
*
*/
public void setMax(Double value) {
this.max = value;
}
}
插件配置:
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<version>0.9.0</version>
<executions>
<execution>
<id>commun-generate</id>
<goals>
<goal>generate</goal>
</goals>
<configuration>
<generateDirectory>${basedir}/src/main/java/</generateDirectory>
<schemaDirectory>${basedir}/src/main/resources/schema/xsd</schemaDirectory>
<strict>true</strict>
<extension>true</extension>
<verbose>true</verbose>
</configuration>
</execution>
</executions>
</plugin>
使用 jaxb2-maven -plugin
插件配置:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>1.6</version>
<configuration>
</configuration>
<executions>
<execution>
<id>analysis_jaxb</id>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
<configuration>
<clearOutputDir>false</clearOutputDir>
<schemaFiles>your.xsd</schemaFiles>
<packageName>xx.xx.xx.analysis</packageName>
<generateDirectory>generated-sources/jaxb/analysis</generateDirectory>
<verbose>true</verbose>
</configuration>
</execution>
</executions>
</plugin>
输出
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MinMaxType")
public class MinMaxType {
@XmlAttribute(name = "min")
protected Double min;
@XmlAttribute(name = "max")
protected Double max;
/**
* Recupera il valore della proprietà min.
*
* @return
* possible object is
* {@link Double }
*
*/
public double getMin() {
if (min == null) {
return java.lang.Double.NEGATIVE_INFINITY;
} else {
return min;
}
}
/**
* Imposta il valore della proprietà min.
*
* @param value
* allowed object is
* {@link Double }
*
*/
public void setMin(Double value) {
this.min = value;
}
/**
* Recupera il valore della proprietà max.
*
* @return
* possible object is
* {@link Double }
*
*/
public double getMax() {
if (max == null) {
return java.lang.Double.POSITIVE_INFINITY;
} else {
return max;
}
}
/**
* Imposta il valore della proprietà max.
*
* @param value
* allowed object is
* {@link Double }
*
*/
public void setMax(Double value) {
this.max = value;
}
}
这篇关于jaxb2-maven-plugin为默认值= INF的双精度生成无效源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!