2012-06-01 3 views
2

Je n'arrive pas à faire fonctionner Moxy avec les services Web JAX-WS et Hibernate. Malgré ce que je fais, @XMLInverseReference ne fonctionne pas. Je m'attends à ce qu'il remplisse la variable application sur un Site. Qu'est-ce que je fais ou comprends mal? Je reçois: . Si j'ajoute @XMLElement à Site.application, alors j'obtiens une exception de référence circulaire de JAXB.XmlInverseReference, Hibernate, JAXWS et Moxy

Il convient de mentionner que tous les marshaling et unmarshalling sont gérés par le point de terminaison JSA-WS WSServlet.

Aussi je vérifié mes jaxb.properties fonctionne correctement en procédant comme suit:

public class Run { 
    public static void main(String[] args) throws Exception { 
     System.out.println(JAXBContext.newInstance(Site.class).getClass()); 
    } 
} 


application:

@Entity 
@Table(schema = "dbo", name = "Applications") 
@XmlAccessorType(XmlAccessType.NONE) 
@XmlRootElement 
public class Application { 
    @Id 
    @Column(name = "id", nullable = false, insertable = false, updatable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @RemoteProperty 
    @XmlElement 
    private Integer id; 
    @Column(name = "code", nullable = false, unique = true) 
    @NaturalId 
    @XmlElement 
    private String code; 
    @Column(name = "name") 
    @XmlElement 
    private String name; 
    @OneToMany(mappedBy = "application", fetch = FetchType.EAGER) 
    @Cache(usage = org.hibernate.annotations.CacheConcurrencyStrategy.READ_WRITE) 
    @Cascade(value = {CascadeType.MERGE, CascadeType.PERSIST, CascadeType.DELETE, CascadeType.DELETE_ORPHAN}) 
    @Sort(type = SortType.NATURAL) 
    @XmlElement 
    private Set<Site> sites = new TreeSet<Site>(); 
} 

Site:

@Entity 
@Table(schema = "dbo", name = "Sites") 
@XmlAccessorType(XmlAccessType.NONE) 
@XmlRootElement 
public class Site implements Identifiable<Integer>, Comparable<Site> { 
    @Id 
    @Column(name = "id", nullable = false, insertable = false, updatable = false) 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    @Column(name = "address", unique = true) 
    @NaturalId(mutable = true) 
    @XmlID 
    private String address; 
    @Column(name = "ssl") 
    @XmlAttribute(required = true) 
    private boolean ssl; 
    @ManyToOne 
    @JoinColumn(name = "applicationCode", nullable = false, referencedColumnName = "code") 
    @XmlInverseReference(mappedBy = "code") 
    private Application application; 
} 

jaxb.properties

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 

Répondre