gpt4 book ai didi

JAXB:空字符串不会产生空元素

转载 作者:行者123 更新时间:2023-12-04 16:02:34 24 4
gpt4 key购买 nike

我正在使用来自 Sun JDK 1.6.0_18 的 JAXB 2.1.10:

D:\apps\jdk160_18\bin>xjc.exe -version
xjc 版本“JDK 6 中的 JAXB 2.1.10”
JavaTM Architecture for XML Binding(JAXB) 引用实现,(在 JDK 6 中构建 JAXB 2.1.10)

当 JAXB 对象具有空字符串的值( <someStringField></someStringField> )时,我需要让 JAXB 的编码器生成一个空元素(例如 <someStringField/>"" )。但是,JAXB 并没有这样做,而是从其输出中完全省略了该元素(就好像它是可选元素一样)。

我在 Internet 上的搜索表明 JAXB 通常应该创建此标记,只要您将该字段设置为非空的空字符串(即 myJAXBObject.setSomeStringField(""); ):

How to instantiate an empty element with JAXB
https://jaxb.dev.java.net/tutorial/section_2_2_12_8-No-Value.html#No%20Value

在我的 XSD 中,我尝试表明(以我所知道的各种方式)元素的存在是强制性的,即使它是空的:

      <xs:element name="outerElement">
<xs:complexType>
<xs:sequence>
<xs:element name="someStringField" type="xs:string" nillable="false" minOccurs="1" />
<xs:element name="someOtherStringField" type="xs:string" />

生成的代码如下所示(两个元素相同):
    @XmlElement(name = "someStringField", required = true)
protected String someStringField;
@XmlElement(name = "someOtherStringField", required = true)
protected String someOtherStringField;

但是,当我编码以下对象时...
outerElement.setSomeStringField("");
outerElement.setSomeOtherStringField("Value was set");

我得到:
<outerElement>
<someOtherStringField>Value was set</someOtherStringField>
</outerElement>

当我期待:
<outerElement>
<someStringField></someStringField>
<someOtherStringField>Value was set</someOtherStringField>
</outerElement>

或者:
<outerElement>
<someStringField/>
<someOtherStringField>Value was set</someOtherStringField>
</outerElement>

谁能发现我做错了什么?

最佳答案

感谢您提请我们注意此问题 (https://bugs.eclipse.org/319028)。该错误已得到修复,并将包含在 EclipseLink 2.1.1 维护版本中。如果您想更早地访问此修复程序,您可以从 7 月 8 日开始从以下位置获取每晚下载:

  • http://www.eclipse.org/eclipselink/downloads/nightly.php
  • 关于JAXB:空字符串不会产生空元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3186621/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com