java - CascadeType导致的MessageBodyWriter错误

标签 java web-services jaxb jersey tomcat8

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

  1. Windows 7 x64、Apache Tomcat/8.5.16、JVM 1.8.0_65-b17
  2. Ubuntu 16.04.2 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: MessageBodyWriter not found for media type=application/xml, type=class java.util.Vector, genericType=java.util.List

如果我更改行,网络服务仅在第二个服务器上工作:

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

致:

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

那么,为什么同一个 Web 服务在第一台服务器上运行正常,而在第二台服务器上却出现错误?和MessageBodyWriter和CascadeType有什么关系?

最佳答案

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

  • persistence-api-1.0.jar
  • javax.persistence_2.1.0.v201304241213.jar

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

关于java - CascadeType导致的MessageBodyWriter错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45044063/

相关文章:

wcf - 在 WCF customBinding 中接受 UsernameToken 和 BinarySecurityToken

java - 如何在不使用绝对路径的情况下使用 log4j.properties 为 Java Web 服务创建日志文件

java - 为每个类使用单个 JAXBContext 还是单独的上下文更好?

java - rss Rome 创建带有 <内容 :encoded/> tag 的条目

java - 使用cookies API获取sessionId而不访问session

java - springboot api 不工作。

java - JAXB - 包含 HTML 页面的解码元素

java - Android:IF 语句在通过首选项设置时不起作用

java - 将变量添加到所有日志消息中

java - 相同类不同包和 JAXB