gpt4 book ai didi

java - JAXB 将空的 int XML 属性设置为 0

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:13 26 4
gpt4 key购买 nike

JAXB treets empty int XML attribute as 0,这对我来说没问题,但我需要将它存储为 null。似乎我无法将 DataConverterImpl 类更改为自定义实现。如果有的话可以做什么?

<xs:attribute name="Count" type="Integer0to999" use="optional">

<xs:simpleType name="Integer0to999">
<xs:annotation>
<xs:documentation xml:lang="en">Used for Integer values, from 0 to 999 inclusive</xs:documentation>
</xs:annotation>
<xs:restriction base="xs:integer">
<xs:minInclusive value="0"/>
<xs:maxInclusive value="999"/>
</xs:restriction>
</xs:simpleType>

在 xjc 模式编译后,我得到了以下类:

 @XmlAttribute(name = "Count")
protected Integer passengerCount;

在 XML 解析期间,parseInt() 从 Sun(Oracle) 的 DataConverterImpl.class 调用,下面是代码,您永远不会从此代码中获取 null :

 public static int _parseInt(CharSequence s) {
int len = s.length();
int sign = 1;

int r = 0;

for( int i=0; i<len; i++ ) {
char ch = s.charAt(i);
if(WhiteSpaceProcessor.isWhiteSpace(ch)) {
// skip whitespace
} else
if('0'<=ch && ch<='9') {
r = r*10 + (ch-'0');
} else
if(ch=='-') {
sign = -1;
} else
if(ch=='+') {
; // noop
} else
throw new NumberFormatException("Not a number: "+s);
}

return r*sign;
}

最佳答案

您可以尝试编写自定义 XMLAdaptor,将您的整数转换为字符串(或其他对象),然后按您认为合适的方式将其转换回来。在解码期间,我想您只需要对“null”进行不区分大小写的快速检查。

从这里开始:http://download.oracle.com/javase/6/docs/api/javax/xml/bind/annotation/adapters/XmlAdapter.html

将适配器附加到您的 int 字段并写入正文。

您的转换器将按如下方式启动:

public class MyIntConverter extends XmlAdapter<String,Integer> 
{
@Override
public String marshal(Integer value) throws Exception {

if ( value.intValue() == 0 )
return null; // Or, "null" depending on what you'd like

return value.toString();
}

@Override
public Integer unmarshal(String storedValue) throws Exception {

if ( storedValue.equalsIgnoreCase("null") )
return 0;

return Integer.valueOf(storedValue);
}
}

然后,您可以使用它:

@XmlJavaTypeAdapter(MyIntConverter.class)
int someNumber;

代码未经测试,但我认为它应该可以解决问题。

关于java - JAXB 将空的 int XML 属性设置为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2775514/

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