Es ist ein Webservice in zwei Systemen unter:MessageBodyWriter Fehler verursacht durch CascadeType
- Windows 7 x64, Apache Tomcat/8.5.16, JVM 1.8.0_65-b17
- Ubuntu 16.04.2 LTS, Apache Tomcat/8.5.15, JVM 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11
Der Webservice wie folgt aussieht:
public class Order implements Serializable {
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE, CascadeType.DETACH}, mappedBy = "orderId")
private List<Item> itemList;
// getters and setters
}
...
public class Item implements Serializable {
@JoinColumn(name = "order_id", referencedColumnName = "id")
@ManyToOne(optional = false)
@XmlJavaTypeAdapter(OrderAdapter.class)
private Order orderId;
// getters and setters
}
...
@GET
@Produces({"application/xml", "application/json"})
public List<Order> findAll(@HeaderParam("authorization") String authString) throws Exception {
Query q = em.createNativeQuery("SELECT * FROM order", Order.class);
return q.getResultList();
}
Problem: Der Webservice läuft auf dem ersten Server einwandfrei, keine Fehler. Im zweiten Server erhielt ich den Fehler:
org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyWriter not found for media type=application/xml, type=class java.util.Vector, genericType=java.util.List
Der Webservice nur auf dem zweiten Server funktioniert, wenn ich die Zeile:
@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE, CascadeType.DETACH}, mappedBy = "orderId")
An:
@OneToMany(cascade = CascadeType.ALL, mappedBy = "orderId")
Also, warum die gleiche webservice läuft ok im ersten Server und verursacht Fehler in der Sekunde? Und was ist eine Beziehung mit MessageBodyWriter und CascadeType?