2011-09-19 12 views
6

Json un geri kalanını webservice (cxf) 'den kaldırmaya çalışırken bu sorunu yaşıyorum. JAXB ve EclipseLink kullanıyorum.IDResolver başarısız olduğunda JAXB koleksiyonu IDResolver nesne olarak hedef türü olarak belirtiliyor

@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; 

} 

I IDResolver uzanan bir sınıf olması, bu yüzden kendi kimliği dayalı bir varlık oluşturabilir:

işletme böyle eşleştirilir.

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 { 

    } 
} 

Sorunu bu "channelPkgService" gibi json unmarshalling vardır: [1,2,3] TARGETTYPE sınıfı, bu https://github.com/javaee/jaxb-v2/issues/546 oku java.lang.Object

ve bir sarıcı oluşturulan Bunu hallet.

public class ChannelPkgServiceWrapper extends HashSet<ChannelPkgService>{ 
} 

SINES ben bu gibi durumlarda bir sürü var ve ben sarmalayıcıları bir sürü oluşturmak istemiyoruz, bu işlemek için daha genel bir yol var?

Forget kullanılabilmekte:

  • cxf.version: 2.3.6
  • EclipseLink: 2.3.0
  • JAXB-impl-2.1.13.jar (kavanoz içeren Lister.class bu doğru türü almak için fiili işi yapıyor.)

cevap

1

@XmlIDREF içi belge başvuruları eşleştirmek için JAXB tarafından kullanılır. ID tarafından başvurulan Her nesne, XML veya JSON belgesinde yerde iç içe görünür gerekir: onun kimliği gibi bir nesneyi sıralamakta arıyorsanız, o zaman bir XmlAdapter kullanmak isteyeceğiniz

. Benzer bir soruya cevabım göz atın:

Ayrıca JAXB bir belirtim (JSR-222), ve EclipseLinkMOXy uygulanmasını (ı Moxy Teknik Başkanıyım) içerdiğini unutmayın. Bu JAXB-impl-2.1.13.jar senin bağımlılıkları ortadan kaldırmak anlamına gelir:

İlgili konular