Tôi gặp vấn đề với cách JAXB tạo ra các lớp bị ràng buộc cho một lược đồ XML (mà vì lợi ích của độ chính xác, tôi không thể sửa đổi). Tôi muốn ánh xạ một xsd: type ngày đến một đối tượng LOCALDATE Joda thời gian và, đọc here, here và here, tôi đã tạo ra DateAdapter lớp sau:JAXB, Ràng buộc tùy chỉnh, Adapter1.class và Joda-time
public class DateAdapter extends XmlAdapter<String,LocalDate> {
private static DateTimeFormatter fmt = DateTimeFormat.forPattern("yyyyMMdd");
public LocalDate unmarshal(String v) throws Exception {
return fmt.parseLocalDate(v);
}
public String marshal(LocalDate v) throws Exception {
return v.toString("yyyyMMdd");
}
}
Và tôi đã thêm dòng sau vào file ràng buộc toàn cầu của tôi :
<jaxb:globalBindings>
<jaxb:javaType name="org.joda.time.LocalDate" xmlType="xs:date"
parseMethod="my.classes.adapters.DateAdapter.unmarshal"
printMethod="my.classes.adapters.DateAdapter.marshal" />
</jaxb:globalBindings>
vấn đề là, khi tôi cố gắng maven biên dịch dự án của tôi, nó không thành công với các lỗi sau:
[ERROR] \My\Path\MyProject\target\generated-sources\xjc\my\classes\generated\Adapter1.java:[20,59] non-static method unmarshal(java.lang.String) cannot be referenced from a static context
[ERROR] \My\Path\MyProject\target\generated-sources\xjc\my\classes\generated\Adapter1.java:[24,59] non-static method marshal(org.joda.time.LocalDate) cannot be referenced from a static context
... và đây là nơi mọi thứ trở nên kỳ lạ. JAXB tạo Lớp Adapter1 chứa các mục sau:
public class Adapter1
extends XmlAdapter<String, LocalDate>
{
public LocalDate unmarshal(String value) {
return (my.classes.adapters.DateAdapter.unmarshal(value));
}
public String marshal(LocalDate value) {
return (my.classes.adapters.DateAdapter.marshal(value));
}
}
.... đó là nguồn gốc của lỗi biên dịch.
Bây giờ, câu hỏi của tôi là:
- được rằng bộ chuyển đổi của tôi là trọng XmlAdapter, tôi không thể làm cho phương pháp tĩnh .... làm thế nào để tránh tình trạng này?
- Tôi có thể tránh việc tạo ra Adapter1.class hoàn toàn không ?? Có thể sử dụng chú thích cấp gói XmlJavaTypeAdapters và nếu có, làm thế nào để tôi thực hiện chính xác? (JAXB tạo ra một gói-info.java của riêng nó ....)
Hy vọng tôi đã làm rõ tình hình của tôi.
Cảm ơn
gì nếu tôi tạo ra 'lớp JAXB' tôi với 'xjc'? Chú thích của tôi sẽ bị ghi đè. –