kevdoran commented on a change in pull request #160: NIFIREG-213 Implementing
parser for extension-manifest.xml file and integ…
URL: https://github.com/apache/nifi-registry/pull/160#discussion_r265129064
##########
File path:
nifi-registry-core/nifi-registry-web-api/src/main/java/org/apache/nifi/registry/web/api/ExtensionResource.java
##########
@@ -22,401 +22,172 @@
import io.swagger.annotations.ApiResponse;
import io.swagger.annotations.ApiResponses;
import io.swagger.annotations.Authorization;
-import io.swagger.annotations.Extension;
-import io.swagger.annotations.ExtensionProperty;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.nifi.registry.event.EventFactory;
import org.apache.nifi.registry.event.EventService;
-import org.apache.nifi.registry.extension.ExtensionBundle;
-import org.apache.nifi.registry.extension.ExtensionBundleVersion;
-import org.apache.nifi.registry.extension.ExtensionBundleVersionMetadata;
-import org.apache.nifi.registry.extension.filter.ExtensionBundleFilterParams;
-import
org.apache.nifi.registry.extension.filter.ExtensionBundleVersionFilterParams;
+import org.apache.nifi.registry.extension.bundle.BundleType;
+import org.apache.nifi.registry.extension.component.ExtensionFilterParams;
+import org.apache.nifi.registry.extension.component.ExtensionMetadata;
+import org.apache.nifi.registry.extension.component.ExtensionMetadataContainer;
+import org.apache.nifi.registry.extension.component.TagCount;
+import org.apache.nifi.registry.extension.component.manifest.ExtensionType;
+import
org.apache.nifi.registry.extension.component.manifest.ProvidedServiceAPI;
import org.apache.nifi.registry.security.authorization.RequestAction;
import org.apache.nifi.registry.service.AuthorizationService;
import org.apache.nifi.registry.service.RegistryService;
-import
org.apache.nifi.registry.service.extension.ExtensionBundleVersionCoordinate;
import org.apache.nifi.registry.web.link.LinkService;
-import org.apache.nifi.registry.web.security.PermissionsService;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
-import javax.ws.rs.core.StreamingOutput;
import java.util.ArrayList;
import java.util.Collections;
-import java.util.List;
import java.util.Set;
import java.util.SortedSet;
@Component
@Path("/extensions")
@Api(
value = "extensions",
- description = "Gets metadata about extension bundles and extensions.",
+ description = "Find and retrieve extensions.",
authorizations = { @Authorization("Authorization") }
)
public class ExtensionResource extends AuthorizableApplicationResource {
- public static final String CONTENT_DISPOSITION_HEADER =
"content-disposition";
private final RegistryService registryService;
private final LinkService linkService;
- private final PermissionsService permissionsService;
- @Autowired
- public ExtensionResource(final RegistryService registryService,
- final LinkService linkService,
- final PermissionsService permissionsService,
- final AuthorizationService authorizationService,
- final EventService eventService) {
+ public ExtensionResource(final AuthorizationService authorizationService,
+ final EventService eventService,
+ final RegistryService registryService,
+ final LinkService linkService) {
super(authorizationService, eventService);
this.registryService = registryService;
this.linkService = linkService;
- this.permissionsService = permissionsService;
}
- // ---------- Extension Bundles ----------
-
@GET
- @Path("bundles")
@Consumes(MediaType.WILDCARD)
@Produces(MediaType.APPLICATION_JSON)
@ApiOperation(
- value = "Get extension bundles across all authorized buckets",
- notes = "The returned items will include only items from buckets
for which the user is authorized. " +
- "If the user is not authorized to any buckets, an empty
list will be returned.",
- response = ExtensionBundle.class,
+ value = "Gets all extensions that match the filter params and are
part of bundles located in buckets the current user is authorized for.",
+ response = ExtensionMetadataContainer.class,
responseContainer = "List"
)
- @ApiResponses({ @ApiResponse(code = 401, message =
HttpStatusMessages.MESSAGE_401) })
- public Response getExtensionBundles(
- @QueryParam("groupId")
- @ApiParam("Optional groupId to filter results. The value may be an
exact match, or a wildcard, " +
- "such as 'com.%' to select all bundles where the groupId
starts with 'com.'.")
- final String groupId,
- @QueryParam("artifactId")
- @ApiParam("Optional artifactId to filter results. The value may be
an exact match, or a wildcard, " +
- "such as 'nifi-%' to select all bundles where the
artifactId starts with 'nifi-'.")
- final String artifactId) {
+ @ApiResponses({
+ @ApiResponse(code = 400, message = HttpStatusMessages.MESSAGE_400),
+ @ApiResponse(code = 401, message = HttpStatusMessages.MESSAGE_401),
+ @ApiResponse(code = 403, message = HttpStatusMessages.MESSAGE_403),
+ @ApiResponse(code = 404, message = HttpStatusMessages.MESSAGE_404),
+ @ApiResponse(code = 409, message = HttpStatusMessages.MESSAGE_409)
})
+ public Response getExtensions(
+ @QueryParam("bundleType")
+ @ApiParam(value = "The type of bundles to return (i.e. NAR, CPP,
etc.)")
Review comment:
The swagger UI gives two options for bundleType: NIFI_NAR and MINIFI_CPP.
trying either results in a 500 error. Here are logs/stacktraces:
```
2019-03-13 09:34:59,453 ERROR [NiFi Registry Web Server-350]
o.a.n.r.web.mapper.ThrowableMapper An unexpected error has occurred:
org.glassfish.jersey.server.ParamException$QueryParamException: HTTP 404 Not
Found. Returning Internal Server Error response.
org.glassfish.jersey.server.ParamException$QueryParamException: HTTP 404 Not
Found
at
org.glassfish.jersey.server.internal.inject.QueryParamValueParamProvider$QueryParamValueProvider.apply(QueryParamValueParamProvider.java:105)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.internal.inject.QueryParamValueParamProvider$QueryParamValueProvider.apply(QueryParamValueParamProvider.java:89)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.spi.internal.ParamValueFactoryWithSource.apply(ParamValueFactoryWithSource.java:74)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.spi.internal.ParameterValueHelper.getParameterValues(ParameterValueHelper.java:88)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$AbstractMethodParamInvoker.getParamValues(JavaResourceMethodDispatcherProvider.java:133)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
~[jersey-server-2.27.jar:na]
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
[jersey-common-2.27.jar:na]
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
[jersey-common-2.27.jar:na]
at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
[jersey-common-2.27.jar:na]
at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
[jersey-common-2.27.jar:na]
at org.glassfish.jersey.internal.Errors.process(Errors.java:268)
[jersey-common-2.27.jar:na]
at
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
[jersey-common-2.27.jar:na]
at
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:703)
[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
[jersey-container-servlet-core-2.27.jar:na]
at
org.glassfish.jersey.servlet.ServletContainer.serviceImpl(ServletContainer.java:409)
[jersey-container-servlet-core-2.27.jar:na]
at
org.glassfish.jersey.servlet.ServletContainer.doFilter(ServletContainer.java:584)
[jersey-container-servlet-core-2.27.jar:na]
at
org.glassfish.jersey.servlet.ServletContainer.doFilter(ServletContainer.java:525)
[jersey-container-servlet-core-2.27.jar:na]
at
org.glassfish.jersey.servlet.ServletContainer.doFilter(ServletContainer.java:462)
[jersey-container-servlet-core-2.27.jar:na]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.apache.nifi.registry.web.security.authorization.ResourceAuthorizationFilter.forwardRequestWithoutAuthorizationCheck(ResourceAuthorizationFilter.java:151)
[classes/:na]
at
org.apache.nifi.registry.web.security.authorization.ResourceAuthorizationFilter.doFilter(ResourceAuthorizationFilter.java:113)
[classes/:na]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:119)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.apache.nifi.registry.web.security.authentication.IdentityFilter.doFilter(IdentityFilter.java:56)
[classes/:na]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.apache.nifi.registry.web.security.authentication.IdentityFilter.doFilter(IdentityFilter.java:56)
[classes/:na]
at
org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
[spring-security-web-5.1.2.RELEASE.jar:5.1.2.RELEASE]
at
org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:357)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:270)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:99)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:130)
[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at
org.springframework.boot.web.servlet.support.ErrorPageFilter.access$000(ErrorPageFilter.java:66)
[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at
org.springframework.boot.web.servlet.support.ErrorPageFilter$1.doFilterInternal(ErrorPageFilter.java:105)
[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.springframework.boot.web.servlet.support.ErrorPageFilter.doFilter(ErrorPageFilter.java:123)
[spring-boot-2.1.1.RELEASE.jar:2.1.1.RELEASE]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:200)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
[spring-web-5.1.3.RELEASE.jar:5.1.3.RELEASE]
at
org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1642)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:146)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548)
[jetty-security-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:257)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1317)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
[jetty-servlet-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1219)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at org.eclipse.jetty.server.Server.handle(Server.java:531)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
[jetty-server-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:281)
[jetty-io-9.4.11.v20180605.jar:9.4.11.v20180605]
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
[jetty-io-9.4.11.v20180605.jar:9.4.11.v20180605]
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:118)
[jetty-io-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:333)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:310)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:168)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:126)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:366)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:762)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at
org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:680)
[jetty-util-9.4.11.v20180605.jar:9.4.11.v20180605]
at java.lang.Thread.run(Thread.java:748) [na:1.8.0_131]
Caused by: org.glassfish.jersey.internal.inject.ExtractorException:
java.lang.IllegalArgumentException: Unknown BundleType: NIFI_NAR
at
org.glassfish.jersey.server.internal.inject.ParamConverters$AbstractStringReader.fromString(ParamConverters.java:93)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.internal.inject.AbstractParamValueExtractor.convert(AbstractParamValueExtractor.java:140)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.internal.inject.AbstractParamValueExtractor.fromString(AbstractParamValueExtractor.java:131)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.internal.inject.SingleValueExtractor.extract(SingleValueExtractor.java:85)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.internal.inject.QueryParamValueParamProvider$QueryParamValueProvider.apply(QueryParamValueParamProvider.java:102)
~[jersey-server-2.27.jar:na]
... 88 common frames omitted
Caused by: java.lang.IllegalArgumentException: Unknown BundleType: NIFI_NAR
at
org.apache.nifi.registry.extension.bundle.BundleType.fromString(BundleType.java:52)
~[nifi-registry-data-model-0.4.0-SNAPSHOT.jar:0.4.0-SNAPSHOT]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
~[na:1.8.0_131]
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
~[na:1.8.0_131]
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
~[na:1.8.0_131]
at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_131]
at
org.glassfish.jersey.server.internal.inject.ParamConverters$TypeFromString$1._fromString(ParamConverters.java:179)
~[jersey-server-2.27.jar:na]
at
org.glassfish.jersey.server.internal.inject.ParamConverters$AbstractStringReader.fromString(ParamConverters.java:83)
~[jersey-server-2.27.jar:na]
... 92 common frames omitted
```
It looks like two changes might be required:
1. The allowable values for the swagger documentation need to be overwritten
(the string here seems to indicate NAR or CPP should be used instead of the
enum strings).
2. If an unrecognized value is passed, I would expect that to result in a
HTTP 400 Bad Request, which the root cause `IllegalArgumentException` would map
to, but it looks like somewhere it is getting wrapped by some other unmapped
exception type.
----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
For queries about this service, please contact Infrastructure at:
[email protected]
With regards,
Apache Git Services