jaxb2-maven-plugin为默认值= INF的双精度生成无效源 [英] jaxb2-maven-plugin generates invalid source for doubles with default value =INF

查看:105
本文介绍了jaxb2-maven-plugin为默认值= INF的双精度生成无效源的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个问题,当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的双精度生成无效源的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆