Jaxb2-maven-plugin generates invalid source for doubles with default value = INF

I have a problem where the jaxb2-maven-plugin generates invalid source code when the XSD file contains default values ​​for doubles.

I am using jaxb2-maven-plugin (org.codehaus.mojo) version 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> 

to create a 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> 

As a result, the Java file contains this method:

 public double getMin() { if (min == null) { return -InfinityD; //UNDEFINED } else { return min; } } 

The -InfinityD field -InfinityD not defined anywhere.

When using booleans (for example, <xs:attribute name="minInclusive" type="xs:boolean" default="false" /> ), the default values ​​work as expected.

In contrast, the org.jvnet.jaxb2.maven2 plugin (maven-jaxb2-plugin) would Double.POSITIVE_INFINITY on this problematic line.

Is it just not supported? Am I missing a parameter?

+2
source share
1 answer

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> 

If you use

 <groupId>org.jvnet.jaxb2.maven2</groupId> <artifactId>maven-jaxb2-plugin</artifactId> <version>0.9.0</version> 

works great

exit:

 @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 configuration:

  <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> 

Using jaxb2-maven-plugin

plugin configuration:

  <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> 

Exit

 @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; } } 
+6
source

Source: https://habr.com/ru/post/1206324/


All Articles