구성 요소 객체가 중첩 된 XML 요소가되는 대신 해당 유형의 속성이 루트 요소의 직계 자식이되고 이름 앞에 유형이있는 객체 구조를 마샬링 할 수 있습니까? . 주어진 예를 들어중첩 된 객체를 "평면"XML 구조로 마샬링
:
(A)
public class Customer {
protected String firstName;
protected String lastName;
protected Address address;
}
public class Address {
protected String street;
protected String city;
}
을 대신
(B)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address>
<street>123 Rizal Avenue</street>
<city>Manila</city>
</address>
</customer>
발생하지만 것이 일반적인 JAXB 주석을 사용하여, 나는
(C)
<customer>
<firstName>Juan</firstName>
<lastName>dela Cruz</lastName>
<address_street>123 Rizal Avenue</address_street>
<address_city>Manila</address_city>
</customer>
그것을 마샬 동일한 필요 이미 JAXB를 사용하고 있기 때문에 JAXB의 요구 사항을 해결할 JAXB 주문이 있다면 이 문제를 둘러싼 것들. 사실,이 내 특정 상황에 몇 가지 제약 조건을 제시 : (A)에서
- 자바 클래스는 JAXB에 의해 생성을 (B)의 XML 구조에 해당하는 기존 스키마에서. 생성 된 클래스의 수정 된 버전을 유지하지 않는 것이 좋습니다.
- 본인은 상기 스키마를 소유하거나 유지하지 않습니다. 실제 스키마는 상당히 크며 사소한 수정이 필요할 수 있습니다. 그와 동등한 스키마를 고안하고 유지하는 것은 지루할 것입니다. 또한 스키마 수정을 따라 가기 위해 JAXB에 의한 자동화 된 클래스 생성에 의존합니다.
- 작업을 쉽게 수행 할 수있는 경우 중첩은 최대 한 수준까지만 가능합니다. 예에서
Address
은 다른 복합 유형을 포함하지 않습니다.
나는 목시에서 @XmlPath
주석 찾고 있어요,하지만 난 (C) 같이 접두사 노드 이름을 얻는 방법을 알아낼 수 없습니다.
나는 올바른 JAXB 주석을 제공하는 일부 xjc 사용자 정의가 나를 끌어들일 수있는 솔루션을 꿈꾸지 만 지금까지는 내 검색에서 그렇게 보이지 않습니다. JAXB가 아닌 다른 솔루션으로도 충분합니다.
앞서 언급했듯이 클래스는 상당히 큰 XML 스키마에서 자동으로 생성됩니다. 따라서 수동으로 두 번째 클래스 집합을 유지하는 것은 금지됩니다. 또한, 반사 코드를 작성할 때쯤에는 다른 클래스에 쓰는 대신 원하는 XML을 작성하는 것만으로도 충분합니다. 감사. –