<structure>
은 틀림없이 JiBX 바인딩에서 가장 중요한 개념입니다. 이는 XML 디자인과 일치하도록 중첩 된 Java 객체 및 클래스의 부풀어 지거나 추악한 레이어를 만들지 않고도 임의의 XML을 Java 클래스에 매핑 할 수 있기 때문입니다.
이 경우 바인딩은 Java 클래스에 존재하지 않는 <transHeader>
이라는 XML 요소가 있다고 선언합니다.
XML 형식을 약간 수정하면 바인딩이 완벽하게 작동합니다. 나는 당신의 바인딩이 두 개의 <binding>
오픈 태그가 아니라 열린 태그를 가지고 있다고 가정한다. <binding></binding>
은 구조가 없어도 작동하기 때문에 오타이다. 또한 바인딩 파일의 맨 위에 <?xml version="1.0"?>
을 추가하십시오. 이 두 가지 XML mod는 JiBX 1.2 바인딩 컴파일러가 다음 Java 클래스와 함께 작동하도록 허용합니다.
(참고 :이 바인딩은 자바 클래스를 제공하지 않았기 때문에 내가 작성한 정보에서 재구성해야했습니다. 이 바인딩의 작동에 영향을 줄 수있는 클래스를 재구성 한 것은 명백한 부작용이지만 설계 상 JiBX 바인딩에는 클래스와 XML에 대해 알아야하는 모든 정보가 포함되어 있습니다.
>java -jar jibx-bind.jar jibx-binding.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;
}
}
하면 클래스는 다음과 바인딩 컴파일러를 실행 컴파일 16,
그것을 테스트하기 위해 나는 다음 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();
}
}
을 그리고 그것은 성공적으로 실행됩니다.