Tôi phải tạo một phần tử xml có thể có giá trị bất kỳ "kiểu nguyên thủy" (xsd: string, xsd: boolean, v.v ...). Ví dụ:JAXB - Chỉ đặt XmlAdapter cho một loại phụ cụ thể của một phần tử?
<field xsi:type="xsd:string" name="aString">String Value</field>
<field xsi:type="xsd:dateTime" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
...
Vì vậy, tôi sử dụng thực hiện này mà làm cho JAXB quyết định xsi:type
của các loại nguyên thủy:
public class Field {
@XmlAttribute
private String name;
@XmlElement
Object value;
}
và nó đang làm việc như mong đợi nhưng tất cả các java.util.Date bị loại xs:dateTime
...
Bây giờ tôi muốn thay đổi hành vi của các marshaller CHỈ khi đối tượng 'giá trị' là một thể hiện của java.util.Date để có được các lĩnh vực như thế này:
<field xsi:type="xsd:date" name="aDate">2011-10-21</field>
<field xsi:type="xsd:dateTime" name="aDateTime">2011-10-21T12:00:00</field>
Vì vậy, tôi tạo ra một bộ chuyển đổi, nhưng nếu tôi cố gắng này:
@XmlElement
@XmlJavaTypeAdapter(DateAdapter.class)
Object value;
Các adapter phải xử lý một loại java.lang.Object
public class DateAdapter extends XmlAdapter<String, Object> {...}
Nhưng tôi không muốn để mất JAXB marshallers cho tất cả các đối tượng khác (Integer, Double, etc) ...
có cách nào để đặt bộ điều hợp cho một loại phụ cụ thể của một phần tử?
Bạn có tìm thấy giải pháp nào cho điều này không? – nhylated
Không thực sự ... Tôi có một bộ điều hợp xử lý lớp Object và quản lý nội bộ từng loại phụ. Không phải là "đẹp", nhưng nó hoạt động. – ggarciao