我的問題似乎很簡單,但我無法找到任何完全像它在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