<structure>
可以說是JiBX綁定中最重要的概念,因爲它允許您將任意XML映射到您的Java類,而不會強制您創建嵌套的Java對象和類的臃腫和醜陋層以匹配XML設計。
在這種情況下,您的綁定聲明您有一個名爲<transHeader>
的XML元素,它不會出現在您的Java類中。
對XML格式稍作修改後,您的綁定完美地起作用。我假設你的綁定有兩個<binding>
開放標籤而不是開放和關閉<binding></binding>
是一個錯字,因爲你說你讓它在沒有結構的情況下工作。還要在您的綁定文件的頂部添加<?xml version="1.0"?>
。這兩個XML模塊允許JiBX 1.2綁定編譯器使用以下Java類:
(注意:您沒有提供此綁定所用的Java類,因此我不得不根據您放入的信息重新構建它綁定文件,這樣做的明顯副作用是我重建了一個可以使用該綁定的類,但簡單的事實是,JiBX綁定設計包含了您需要了解的類和XML的所有信息。)
public class TransactionRequest {
private String version;
private int requestCount;
public void setVersion(String ver) {
version = ver;
}
public String getVersion() {
return version;
}
public void setRequestCount(int count) {
requestCount = count;
}
public int getRequestCount() {
return requestCount;
}
}
編譯那麼類運行綁定編譯器:
>java -jar jibx-bind.jar jibx-binding.xml
爲了測試它,我用下面的sample.xml中:
(注:你也沒有提供你試圖再次這樣映射XML我創建了一個基於你沒提供什麼樣的樣本)
<?xml version="1.0"?>
<RequestTransaction version="0.1">
<transHeader>
<requestCount>3</requestCount>
</transHeader>
</RequestTransaction>
運行測試使用下面的代碼:
public static void main(String[] argz) {
String fileName = "./sample.xml";
IBindingFactory bfact = null;
IUnmarshallingContext uctx = null;
TransactionRequest sample = null;
try {
bfact = BindingDirectory.getFactory(TransactionRequest.class);
uctx = bfact.createUnmarshallingContext();
InputStream in = new FileInputStream(fileName);
sample = (TransactionRequest)uctx.unmarshalDocument(in, null);
System.out.println(sample.getRequestCount());
System.out.println(sample.getVersion());
}
catch (Exception e) {
e.printStackTrace();
}
}
併成功運行。