爪哇:JAXB 和使用 char
-
13-09-2019 - |
题
我正在使用 JAXB 开发一个项目,但遇到了 JAXB 和 char 数据类型的小问题。
char gender = 'M';
编组后翻译为:
<gender>77</gender>
所以我认为 char 映射到整数,但我只想将它映射到字符串。我怎样才能做到这一点?有可能吗?
解决方案
一些实验后,有似乎没有办法来配置JAXB妥善处理原始字符。我有一个难以接受,虽然。
我试过定义XmlAdaptor
尝试它强制为String,但运行时似乎只接受注释的对象类型,不是基本类型的适配器。
我能想到的唯一的解决方法是标记与@XmlTransient
炭场,然后写getter和setter其中获取和设置值作为一个字符串:
@XmlTransient
char gender = 'M';
@XmlElement(name="gender")
public void setGenderAsString(String gender) {
this.gender = gender.charAt(0);
}
public String getGenderAsString() {
return String.valueOf(gender);
}
不是很漂亮,我会给予你的,但短期的实际改变你的焦炭领域砥一个字符串,这就是我的一切。
其他提示
@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)
那特技指定型,使其与基元的工作
在适配器
在包信息使用相同的将意味着你的那个包做全球
试验后发现这一点。
public class MyAdapter extends XmlAdapter<String, Integer> {
我第一件事在我脑海里了:)
String gender = "M";
这在 Metro JAXB(RI)中似乎仍然是一个问题,至少在 JDK 1.6.0_20 附带的 Metro 版本中是这样。
EclipseLink JAXB (MOXy) 正确封送 char:
要使用 EclipseLink JAXB,只需将 eclipselink.jar 添加到类路径中,并使用以下条目在模型类中添加 jaxb.properties 文件:
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
创建专门XmlAdapter:
package br.com.maritima.util;
import javax.xml.bind.annotation.adapters.XmlAdapter;
public class CharAdapter extends XmlAdapter<String,Character>{
@Override
public String marshal(Character v) throws Exception {
return new String(new char[]{v});
}
@Override
public Character unmarshal(String v) throws Exception {
if(v.length()>0)
return v.charAt(0);
else return ' ';
}
}
,那么您可以与package-info.java其注册到整个包(避免忘记它的一些其它类的内部),或者具体地将其用于某个字段。
见 http://blogs.oracle.com/CoreJavaTechTips/entry/exchanging_data_with_xml_and 对于更多的信息。
不隶属于 StackOverflow