Java 具有可选实体筛选的Jersey在URI上不选择的情况下停止响应

Java 具有可选实体筛选的Jersey在URI上不选择的情况下停止响应,java,rest,jersey,wso2,moxy,Java,Rest,Jersey,Wso2,Moxy,我正试图用它来改善我的服务。所有资源在GET上都正确响应。当我执行POST方法时,服务器冻结。应用服务器内存不足 问题:有人知道为什么会发生这种情况吗?我做错了什么 编辑:激活LoggingFilter.class后,不仅可以使用POST方法,还可以在其他情况下看到确认响应 工作 (GET)/rest/domain/Entity/1?选择=id,name 服务器停止响应 (GET)/rest/domain/Entity/1 在第二个请求中,服务器接收到它,LoggingFilter向我显示状

我正试图用它来改善我的服务。所有资源在GET上都正确响应。当我执行POST方法时,服务器冻结。应用服务器内存不足

问题:有人知道为什么会发生这种情况吗?我做错了什么

编辑:激活LoggingFilter.class后,不仅可以使用POST方法,还可以在其他情况下看到确认响应

  • 工作

    (GET)/rest/domain/Entity/1?选择=id,name

  • 服务器停止响应

    (GET)/rest/domain/Entity/1

在第二个请求中,服务器接收到它,LoggingFilter向我显示状态代码200。所以我认为问题出在马歇尔勒身上

配置:

该应用程序在WSO2上部署为5.2.1

应用程序配置类:

@javax.ws.rs.ApplicationPath("rest")
public class ApplicationConfig extends ResourceConfig {

    public ApplicationConfig() {

        property(ServerProperties.BV_SEND_ERROR_IN_RESPONSE, true);
        property(ServerProperties.BV_DISABLE_VALIDATE_ON_EXECUTABLE_OVERRIDE_CHECK, true);
        property(MarshallerProperties.BEAN_VALIDATION_MODE, BeanValidationMode.NONE);

        register(SelectableEntityFilteringFeature.class);
        property(SelectableEntityFilteringFeature.QUERY_PARAM_NAME, "select");

        register(new MoxyJsonConfig().setFormattedOutput(true).resolver());

    }
}
错误日志

java.lang.OutOfMemoryError: Java heap space
        at org.eclipse.persistence.core.queries.CoreAttributeGroup.newItem(CoreAttributeGroup.java:711)
        at org.eclipse.persistence.core.queries.CoreAttributeGroup.getItem(CoreAttributeGroup.java:488)
        at org.eclipse.persistence.core.queries.CoreAttributeGroup.addAttribute(CoreAttributeGroup.java:178)
        at org.eclipse.persistence.core.queries.CoreAttributeGroup.addAttribute(CoreAttributeGroup.java:144)
        at org.eclipse.persistence.internal.jaxb.ObjectGraphImpl.addAttributeNodes(ObjectGraphImpl.java:36)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:131)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:141)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createSubgraphs(MoxyObjectProvider.java:114)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.createObjectGraph(MoxyObjectProvider.java:90)
        at org.glassfish.jersey.moxy.internal.MoxyObjectProvider.transform(MoxyObjectProvider.java:76)

经过一些调试后,一位同事发现发生这种情况是因为我有双向实体

假设我们有客户电子地址:

@Entity
public class Customer {

    @Id
    private long id;

    @OneToOne(mappedBy="customer", cascade={CascadeType.ALL})
    private Address address;

}

@Entity
public class Address implements Serializable {

    @Id
    private long id;

    @OneToOne
    @JoinColumn(name="ID")
    @MapsId
    @XmlInverseReference(mappedBy="address")
    private Customer customer;

}

在这种情况下,可选筛选器在尝试构建ObjectGraph时忽略@XmlInverseReference,然后它会发出OOM。

经过一些调试后,一位同事发现了这种情况,因为我有双向实体

假设我们有客户电子地址:

@Entity
public class Customer {

    @Id
    private long id;

    @OneToOne(mappedBy="customer", cascade={CascadeType.ALL})
    private Address address;

}

@Entity
public class Address implements Serializable {

    @Id
    private long id;

    @OneToOne
    @JoinColumn(name="ID")
    @MapsId
    @XmlInverseReference(mappedBy="address")
    private Customer customer;

}
在这种情况下,可选筛选器在尝试构建ObjectGraph时忽略@xmlInversereReference,然后返回OOM