当前位置: 首页 > 知识库问答 >
问题:

如何在生成的JAXB类中构造XSD使其具有原语包装器而不是原语类型?

澹台成龙
2023-03-14

我的XSD中有以下属性:

<xs:attribute name="fromFraction" type="xs:float" use="optional" default="0.0"/>

我从这个XSD生成类,属性被创建为float,然后如果没有这个类中的属性,我就无法对XML进行封送(据我所知,在这种情况下,它将始终具有一些值,这些值将被封送)。

如何在绑定期间更改XSD以创建Float类型,以便在该字段中使用null(以便在编组期间可以忽略它)?

或者有更好的方法在结果XML不存在时从其中删除该属性?

共有2个答案

斜俊
2023-03-14

我在装订方面有以下几行。我用来生成类的xjb文件

<jxb:globalBindings optionalProperty="primitive"/>

当我删除它时,生成的类包含适当的基本包装,正如我所希望的那样。

司空学智
2023-03-14

据此:http://reast.net/2009/08/jaxb-generating-primitive-type-getters/及其参考:http://docs.oracle.com/cd/E17802_01/webservices/webservices/docs/1.5/jaxb/vendorCustomizations.html#serializable

您应该将其添加到XSD中:

<xs:annotation>
   <xs:appinfo>
      <jaxb:globalBindings>
          <xjc:serializable uid="12343"/>
      </jaxb:globalBindings>
   </xs:appinfo>
</xs:annotation>
 类似资料:
  • 我试图了解Java原语和包装器是如何工作的。让我们考虑以下示例。 由于整数是不可变的和非原语,语句将编译为以下内容 这将创建大约10000个整数对象(每次调用新)和将整数拆箱为int的成本。 我说的对吗?

  • 如果 XML 是由 JAXB 类(而不是由 XSD)生成的,那么我没有要验证的 XSD。如何验证 XML?JAXB 在开始取消编组之前是否会自动对 XML 进行验证?

  • 两者的计算结果都为false。(顺便说一句,比较是不必要的,因为类不会重写Object中的equals。) 和都是,因为它们可比,没有错误。比较两个具有不同声明的泛型类型的对象是非法的。 在进一步检查时,字段将通过调用包私有的本机方法,如下所示: 除了Java文档对“表示基元类型”的模糊暗示之外,我找不到任何关于这方面的文档。这个领域有什么用处吗?它在包装类本身中没有使用。 (编辑) 是真的。 还

  • 我们试图使用gradle、xsd和xjc生成JAXB类,JAXB类应该具有XmlRootElement注释,以便可以将其作为web服务响应公开。我们正在跟踪这个链接http://azagorneanu.blogspot.com/2011/09/configure-maven-to-generate-classes.html,这很有帮助,但我们无法找到一个只有gradle的特定示例。所以我们想出了一

  • 原生类型作为构造器 对于 array、object、function 和正则表达式值来说,使用字面形式来创建它们的值几乎总是更好的选择,而且字面形式与构造器形式所创建的值是同一种对象(也就是,没有非包装的值)。 正如我们刚刚在上面看到的其他原生类型,除非你真的知道你需要这些构造器形式,一般来说应当避免使用它们,这主要是因为它们会带来一些你可能不会想要对付的异常和陷阱。 Array(..) var

  • 我正在从WSDL生成源代码。它生成包装器类型。我希望JAXB生成基本类型,而不是包装器。 在pom.xml 在我的WSDL文件中 在生成类中 我尝试设置bindingDirectory以强制使用原语而不是包装器。但jaxb2 maven插件2.5.0版本似乎不提供该选项。 aBindingConfiguration。xjb文件