2011-09-19 6 views
6

Tôi có vấn đề này cố gắng unmarshall json từ phần còn lại webservice (cxf). Tôi đang sử dụng JAXB và EclipseLink.Unmarshalling JAXB bộ sưu tập khi sử dụng IDResolver thất bại vì IDResolver Object làm kiểu đích

Thực thể được ánh xạ như thế:

@Entity 
@Table(name = "service_pkg_service", schema = "MD") 
@XmlRootElement 
@XmlAccessorType(XmlAccessType.FIELD) 
public class ServicePkgService extends DatabaseModel implements java.io.Serializable { 

    @Transient 
    @XmlIDREF 
    private Set<ChannelPkgService> channelPkgServices = new HashSet<ChannelPkgService>(); 
} 

@Entity 
@Table(name = "channel_pkg_service", schema = "MD") 
@XmlAccessorType(XmlAccessType.FIELD) 
@XmlRootElement 
public class ChannelPkgService extends DatabaseModel implements java.io.Serializable{ 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @Column(name = "CHANNEL_PKG_ID") 
    @XmlID 
    @XmlAttribute 
    private String id; 

} 

Tôi có một lớp mở rộng IDResolver, vì vậy tôi có thể tạo ra một thực thể dựa trên ID của nó.

public class EntityIDResolver extends IDResolver{ 

@Override 
public void bind(String id, Object obj) throws SAXException { 
} 

@SuppressWarnings({ "rawtypes", "unchecked" }) 
@Override 
public Callable<?> resolve(final String id, Class targetType) throws SAXException { 

    } 
} 

Tôi có vấn đề unmarshalling json như thế này "channelPkgService": [1,2,3], lớp của TargetType là java.lang.Object

tôi đọc https://github.com/javaee/jaxb-v2/issues/546 này, và tạo ra một wrapper để xử lý này.

public class ChannelPkgServiceWrapper extends HashSet<ChannelPkgService>{ 
} 

Tội lỗi Tôi có nhiều trường hợp này và tôi không muốn tạo nhiều trình bao bọc, có cách nào chung hơn để xử lý không?

Quên các phiên bản sử dụng:

  • cxf.version: 2.3.6
  • EclipseLink: 2.3.0
  • jaxb-impl-2.1.13.jar (jar chứa Lister.class rằng đang thực hiện công việc thực tế để nhận đúng loại.)

Trả lời

1

@XmlIDREF được JAXB sử dụng để ánh xạ tham chiếu nội dung. Mỗi đối tượng được tham chiếu bởi ID cũng phải xuất hiện lồng đâu đó trong tài liệu XML hoặc JSON:

Nếu bạn đang tìm kiếm để sắp xếp một đối tượng như ID của nó, sau đó bạn sẽ muốn sử dụng một XmlAdapter . Kiểm tra câu trả lời của tôi cho một câu hỏi tương tự:

Cũng lưu ý rằng JAXB là một đặc điểm kỹ thuật (JSR-222), và EclipseLink chứa thi MOXy (Tôi là người dẫn đầu công nghệ MOXY). Điều này có nghĩa bạn có thể loại bỏ jaxb-impl-2.1.13.jar từ phụ thuộc của bạn: