我的问题似乎很简单,但我无法找到任何完全像它在stackoverflow上的东西。jaxb marshall布尔整数(0,1)问题
我使用JAXB的马歇尔/解组此对象:
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "")
@XmlRootElement(name = "root")
public class MyJaxbObject implements Serializable
{
@XmlElement(name = "DELETE")
@XmlJavaTypeAdapter(BooleanIntAdapter.class)
private Boolean delete;
@XmlElement(name = "message")
private String message;
constructors.. getters... setters...
}
我BooleanAdapter是一个简单的XmlAdapter<Integer, Boolean>
,轮流真/假以1/0和背部。
解组工作,但编组没有。它总是yeilds这样的:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<DELETE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.or/2001/XMLSchema" xsi:type="xs:boolean">true</DELETE>
<message>***DONE***</message>
</root>
当我的XML元素的配置更改为@XmlElement(name = "DELETE",type = Boolean.class)
解组布尔的失败和编组产量如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
<DELETE xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema" xsi:type="xs:int">1</DELETE>
<message>***DONE***</message>
</root>
我把简单的打印消息中的元帅/解组方法xml适配器并尝试对这种对象进行编组/解组。
我看到没有类型声明unmarshal方法被调用,但元帅不是。 对于类型声明,只调用元帅。
帮助?? 如何编组/解组布尔到/从{1,0},并可能摆脱编组xml中的xsi:类型?
编辑 - 这是我用于测试编组/解组的代码:
DocumentBuilderFactory docBuilderFactory = DocumentBuilderFactory.newInstance();
JAXBContext context = javax.xml.bind.JAXBContext.newInstance("my.package.classes");
Unmarshaller unmarshal = context.createUnmarshaller();
Marshaller marshal = context.createMarshaller();
marshal.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
String str = "<root><DELETE>1</DELETE><message>***DONE***</message></root>";
DocumentBuilder builder = docBuilderFactory.newDocumentBuilder();
Document d = null;
d = builder.parse(new InputSource(new StringReader(str)));
MyJaxbObject myJaxUnmarsh = unmarshal.unmarshal(d.getFirstChild(), MyJaxbObject.class).getValue();
System.out.println(myJaxUnmarsh.getMessage() + " , " + myJaxUnmarsh.getDelete());
MyJaxbObject myJax = new MyJaxbObject();
myJax.setDelete(true);
myJax.setMessage("***DONE***");
marshal.marshal(myJax, System.out);
更新:我开了一个新的项目来测试这个问题,它完美地工作。所以它必定是我的项目中的一些依赖项,它会覆盖JAXB行为中的某些内容并导致此问题。我正在使用maven并可以提供pom.xml。但在此之前,有没有人有任何知识库可以干扰jaxb操作? – samz 2012-02-22 07:57:59
找到CULPRIT - 它的cxf lib:cxf-rt-core。去检查这个和jaxb是否存在已知的问题。将在我找到修复程序时发布更新。 – samz 2012-02-22 08:08:18