代码之家  ›  专栏  ›  技术社区  ›  Marcio J

级联类型导致MessageBodyWriter错误

  •  1
  • Marcio J  · 技术社区  · 7 年前

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

    1. Windows 7 x64、Apache Tomcat/8.5.16、JVM 1.8.0_65-b17

    Web服务看起来像:

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

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

    未找到媒体类型=应用程序/xml,类型=类的MessageBodyWriter java.util。向量,genericType=java.util.List

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

    收件人:

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

    那么,为什么同一个webservice在第一个服务器中运行正常,而在第二个服务器中导致错误呢?和MessageBodyWriter和CascadeType有什么关系?

    1 回复  |  直到 7 年前
        1
  •  0
  •   Marcio J    7 年前

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

    • 持久性-api-1.0.jar

    所以我想它在一台服务器上工作是因为加载顺序。删除第一个解决了问题。