JAXB 和 xjc 的问题:构建项目时使用 minExclusive 约束解析 xs:decimal

问题描述 投票:0回答:1

在从 XML 模式 (XSD) 生成 Java 代码时,我遇到了 JAXB 和 xjc 的问题,该模式包含带有 minExclusive 约束的 xs:decimal 元素。尽管在我的 XSD 中将类型指定为 xs:decimal,但 xjc 正在生成尝试将值解析为整数的代码,从而导致 NumberFormatException。

这是我的 XSD 的简化版本:

<xs:element name="test">
    <xs:simpleType>
        <xs:restriction base="xs:decimal">
            <xs:minExclusive value="1.5"/>
        </xs:restriction>
    </xs:simpleType>
</xs:element>

正在生成的代码

 
    @XmlElement(required = true)

    @NotNull

    @DecimalMin <- error occurs on this line

    protected BigDecimal test

错误

任务:命令-xsd:src_frm_xsd
[ant:xjc] java.lang.NumberFormatException: 对于输入字符串:“1.5”
[ant:xjc] 在 java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) [ant:xjc] 在 java.lang.Integer.parseInt(Integer.java:580)
[ant:xjc] 在 java.math.BigInteger.(BigInteger.java:472) [ant:xjc] 在 java.math.BigInteger.(BigInteger.java:608) [ant:xjc] 位于 com.sun.tools.xjc.addon.krasa.JaxbValidationsPlugins.processType(JaxbValidationsPlugins.java:324) [ant:xjc] 位于 com.sun.tools.xjc.addon.krasa.JaxbValidationsPlugins.processElement(JaxbValidationsPlugins.java:219) [ant:xjc] 位于 com.sun.tools.xjc.addon.krasa.JaxbValidationsPlugins.processElement(JaxbValidationsPlugins.java:203) [ant:xjc] 位于 com.sun.tools.xjc.addon.krasa.JaxbValidationsPlugins.run(JaxbValidationsPlugins.java:152) [ant:xjc] 位于 com.sun.tools.xjc.model.Model.generateCode(Model.java:292) [ant:xjc] 位于 com.sun.tools.xjc.XJC2Task._doXJC(XJC2Task.java:524) [ant:xjc] 位于 com.sun.tools.xjc.XJC2Task.doXJC(XJC2Task.java:457) [ant:xjc] 位于 com.sun.tools.xjc.XJC2Task.execute(XJC2Task.java:380) [ant:xjc] 位于 com.sun.istack.tools.ProtectedTask.execute(ProtectedTask.java:103) [ant:xjc] 位于 org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292) [ant:xjc] 位于 sun.reflect.GenerateMethodAccessor88.invoke(来源未知) [ant:xjc] 在 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) [ant:xjc] 在 java.lang.reflect.Method.invoke(Method.java:498) [ant:xjc] 在 org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:99) [ant:xjc] 在 groovy.util.AntBuilder.performTask(AntBuilder.java:333) [ant:xjc] 在 groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:278) [ant:xjc] 在 org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(BasicAntBuilder.java:80) [ant:xjc] 在 groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:151) [ant:xjc] 在 groovy.util.AntBuilder.doInvokeMethod(AntBuilder.java:213) [ant:xjc] 位于 org.gradle.api.internal.project.ant.BasicAntBuilder.doInvokeMethod(BasicAntBuilder.java:107) [ant:xjc] 在 groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:64) [ant:xjc] 在 org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaClassSite.java:43) [ant:xjc] 在 org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:135)

错误:注释@DecimalMin

缺少元素“value”的默认值

@DecimalMin

^

生成的代码尝试将值解析为整数,导致 NumberFormatException。

我尝试添加自定义 JAXB 绑定,但问题仍然存在。如何确保 xjc 正确生成处理 xs:decimal 的代码,其中 minExclusive 作为 BigDecimal 而不是整数?

任何见解或建议将不胜感激。谢谢!

java xsd numberformatexception xjc
1个回答
0
投票

在构建 UI 项目时,我们从 XML 模式生成 Java 类,期望它将 XML 类型正确映射到相应的 Java 类型。然而,在这种情况下,它似乎生成了错误的代码,试图将 XML 值解析为整数而不是小数,从而导致错误并无法生成正确的注释。要修复问题

XJsr303Annotations
选项允许生成带有注释的Java类。

要添加正确的注释

@DecimalMax
@DecimalMin
maxExculsive
我们必须添加
minExculsive

-XJsr303Annotations:JSR_349=true

    

© www.soinside.com 2019 - 2024. All rights reserved.