由 CascadeType 导致的 MessageBodyWriter 错误



有一个Web服务在两个系统中运行:

  1. 视窗 7 x64, Apache Tomcat/8.5.16, JVM 1.8.0_65-b17
  2. Ubuntu 16.04.2
  3. LTS, Apache Tomcat/8.5.15, JVM 1.8.0_131-8u131-b11-0ubuntu1.16.04.2-b11

网络服务如下所示:

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();
}

问题:Web 服务在第一台服务器中运行正常,没有错误。在第二台服务器中,我收到错误:

org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: 找不到媒体类型=应用程序/xml,类型=类的消息正文编写器 java.util.Vector, genericType=java.util.List

如果我更改以下行,则 Web 服务仅在第二台服务器中工作:

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH, CascadeType.MERGE, CascadeType.DETACH}, mappedBy = "orderId")

自:

@OneToMany(cascade = CascadeType.ALL, mappedBy = "orderId")

那么,为什么相同的Web服务在第一个服务器中运行正常并在第二个服务器中导致错误?与MessageBodyWriter和CascadeType有什么关系?

在缓存出现问题后,我意识到项目中有 2 个持久性库:

  • 持久性-API-1.0.jar
  • javax.persistence_2.1.0.v201304241213.jar

所以我想由于加载顺序,它可以在一台服务器中工作。删除第一个已解决的问题。

相关内容

  • 没有找到相关文章

最新更新