可以说是 JiBX 绑定中最<structure>
重要的概念,因为它允许您将任意 XML 映射到您的 Java 类,而不会强迫您创建臃肿和丑陋的嵌套 Java 对象和类层以匹配 XML 设计。
在这种情况下,您的绑定声明您有一个名为的 XML 元素<transHeader>
,该元素不会出现在您的 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();
}
}
它运行成功。