Java 使用IDResolver时解组JAXB集合失败,因为IDResolver对象作为目标类型
我在尝试从RESTWebService(cxf)中解组json时遇到了这个问题。 我正在使用JAXB和EclipseLink 实体映射如下所示:Java 使用IDResolver时解组JAXB集合失败,因为IDResolver对象作为目标类型,java,jaxb,cxf,Java,Jaxb,Cxf,我在尝试从RESTWebService(cxf)中解组json时遇到了这个问题。 我正在使用JAXB和EclipseLink 实体映射如下所示: @Entity @Table(name = "service_pkg_service", schema = "MD") @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class ServicePkgService extends DatabaseModel implements
@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;
}
@实体
@表(name=“service\u pkg\u service”,schema=“MD”)
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
公共类ServicePkgService扩展数据库模型实现java.io.Serializable{
@短暂的
@XmlIDREF
私有集channelPkgServices=new HashSet();
}
@实体
@表(name=“channel\u pkg\u service”,schema=“MD”)
@XmlAccessorType(XmlAccessType.FIELD)
@XmlRootElement
公共类ChannelPkgService扩展数据库模型实现java.io.Serializable{
@身份证
@GeneratedValue(策略=GenerationType.AUTO)
@列(name=“CHANNEL\u PKG\u ID”)
@XmlID
@XmlAttribute
私有字符串id;
}
我有一个扩展IDResolver的类,所以我可以根据它的ID生成一个实体
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 {
}
}
公共类EntityIDResolver扩展了IDResolver{
@凌驾
公共无效绑定(字符串id,对象obj)引发SAXException{
}
@SuppressWarnings({“rawtypes”,“unchecked”})
@凌驾
公共可调用解析(最终字符串id,类targetType)引发SAXException{
}
}
我在像“channelPkgService”这样解组json时遇到问题:[1,2,3],targetType的类是java.lang.Object
我读了这篇文章,并创建了一个包装器来处理这个问题
public class ChannelPkgServiceWrapper extends HashSet<ChannelPkgService>{
}
公共类ChannelPkgServiceWrapper扩展HashSet{
}
既然我有很多这样的情况,我不想创建很多包装,有没有更通用的方法来处理
忘记使用的版本:
- cxf.版本:2.3.6
- 日食:2.3.0
- jaxb-impl-2.1.13.jar (包含Lister.class的jar正在执行获取正确类型的实际工作。)
@XmlIDREF
被JAXB用来映射文档内引用。ID引用的每个对象也必须嵌套在XML或JSON文档中的某个位置:
XmlAdapter
。请查看我对类似问题的回答: