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
Nous utilisons Tomcat, je vais jeter un oeil cependant. – danieljimenez
Toute tactique pour que cela fonctionne dans Tomcat? – danieljimenez