eclipse-ee4j / eclipse-ee4j/jersey

Selectable Entity Filtering throws OutOfMemoryError without query param

Open
#3,339 4 comments 0 reactions 0 assignees View on GitHub
Priority: Major Type: Bug
Dominant language
Java
Stars
730
Forks
382
PR merge metrics
No merged PRs in 30d

Description

When SelectableEntityFilteringFeature is ativated I can put "select" on query param and it works just fine with all resources, but when I remove it from the URI the application server stops responding and it goes out of memory.

With LoggingFilter turned on, its possible to see the server response with Status Code 200 in both cases, but without "select" on query param the app server freezes.

```
**Example** (GET) /rest/domain/Entity/1?select=id,name *WORKS*

(GET) /rest/domain/Entity/1 *ERROR*
```

I've tested with MOXy and Jackson.

```
**error.log**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)
```

My app config class:

```
**ApplicationConfig.class**@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());

}
}
```
#### Affected Versions
[2.22.1, 2.22.2]

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.