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.)