Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用IDResolver时解组JAXB集合失败,因为IDResolver对象作为目标类型_Java_Jaxb_Cxf - Fatal编程技术网

Java 使用IDResolver时解组JAXB集合失败,因为IDResolver对象作为目标类型

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

我在尝试从RESTWebService(cxf)中解组json时遇到了这个问题。 我正在使用JAXB和EclipseLink

实体映射如下所示:

@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文档中的某个位置:

如果希望封送对象作为其ID,则需要使用
XmlAdapter
。请查看我对类似问题的回答:

还要注意,JAXB是一个规范(),包含实现(我是MOXy技术负责人)。这意味着您可以从依赖项中删除jaxb-impl-2.1.13.jar: