wisdom-framework / wisdom

A modular and dynamic web framework
http://wisdom-framework.org
Apache License 2.0
88 stars 42 forks source link

Exception thrown with some regex format in routes #530

Closed Rizen59 closed 8 years ago

Rizen59 commented 8 years ago

Hi everyone ! I'd like to report a possible bug in wisdom 0.9.2-SNAPSHOT (only tested with this version) when using some regex expressions in the route uri.

I tried with two regex: [a-z][a-z] <--- the route is found [a-z]{2} <--- exception occured

Here is the sameple code I used:

@Route(method = HttpMethod.GET, uri = "/{id<[a-z]{2}>}")
public Result test(@Parameter("id") String id) {
    return ok("id = " + id);
}

And the exception thrown :

java.lang.IndexOutOfBoundsException: index (1) must be less than size (1)
        at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:310) ~[guava-18.0.jar:na]
        at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:292) ~[guava-18.0.jar:na]
        at com.google.common.collect.SingletonImmutableList.get(SingletonImmutableList.java:45) ~[guava-18.0.jar:na]
        at org.wisdom.api.router.Route.getPathParametersEncoded(Route.java:305) ~[wisdom-api-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.router.RouteDelegate.getPathParametersEncoded(RouteDelegate.java:150) [router-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.framework.vertx.ContextFromVertx.parameterFromPath(ContextFromVertx.java:337) ~[na:na]
        at org.wisdom.router.parameter.ParameterHandler.create(ParameterHandler.java:39) ~[na:na]
        at org.wisdom.router.parameter.Bindings.create(Bindings.java:62) ~[na:na]
        at org.wisdom.router.RouteDelegate$EndOfChainInvoker.call(RouteDelegate.java:311) ~[na:na]
        at org.wisdom.api.interception.RequestContext.proceed(RequestContext.java:124) [wisdom-api-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.error.DefaultPageErrorHandler.__M_call(DefaultPageErrorHandler.java:236) [default-error-handler-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.error.DefaultPageErrorHandler.call(DefaultPageErrorHandler.java) [default-error-handler-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.api.interception.RequestContext.proceed(RequestContext.java:124) [wisdom-api-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.monitor.extensions.dashboard.HttpMetricFilter.call(HttpMetricFilter.java:126) [org.wisdom.framework.wisdom.monitor-0.9.2-20150615.165810-14.jar:na]
        at org.wisdom.api.interception.RequestContext.proceed(RequestContext.java:124) [wisdom-api-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.router.RouteDelegate.invoke(RouteDelegate.java:247) [router-0.9.2-SNAPSHOT.jar:na]
        at org.wisdom.framework.vertx.HttpHandler.invoke(HttpHandler.java:173) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.wisdom.framework.vertx.HttpHandler.dispatch(HttpHandler.java:146) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.wisdom.framework.vertx.HttpHandler.access$200(HttpHandler.java:51) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.wisdom.framework.vertx.HttpHandler$2.handle(HttpHandler.java:105) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.VoidHandler.handle(VoidHandler.java:27) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.VoidHandler.handle(VoidHandler.java:24) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.DefaultHttpServerRequest.handleEnd(DefaultHttpServerRequest.java:334) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.ServerConnection.handleEnd(ServerConnection.java:209) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.ServerConnection.processMessage(ServerConnection.java:313) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.ServerConnection.handleMessage(ServerConnection.java:94) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.DefaultHttpServer$ServerHandler.doMessageReceived(DefaultHttpServer.java:710) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.DefaultHttpServer$ServerHandler.doMessageReceived(DefaultHttpServer.java:600) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.http.impl.VertxHttpHandler.channelRead(VertxHttpHandler.java:72) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at org.vertx.java.core.net.impl.VertxHandler.channelRead(VertxHandler.java:155) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [netty-codec-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [netty-codec-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242) [netty-codec-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) [netty-transport-4.0.27.Final.jar:4.0.27.Final]
        at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) [netty-common-4.0.27.Final.jar:4.0.27.Final]
        at java.lang.Thread.run(Thread.java:745) [na:1.8.0_51]
cescoffier commented 8 years ago

Hi,

The reggae support does not understand {} right now. So definitely a missing feature.

On 22 septembre 2015 at 15:47:22, Rizen59 (notifications@github.com) wrote:

Hi everyone ! I'd like to report a possible bug in wisdom 0.9.2-SNAPSHOT (only tested with this version) when using some regex expressions in the route uri.

I tried with two regex: [a-z][a-z] <--- the route is found [a-z]{2} <--- exception occured

Here is the sameple code I used:

@Route(method = HttpMethod.GET, uri = "/{id<[a-z]{2}>}") public Result test(@Parameter("id") String id) { return ok("id = " + id); } And the exception thrown :

java.lang.IndexOutOfBoundsException: index (1) must be less than size (1) at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:310) ~[guava-18.0.jar:na] at com.google.common.base.Preconditions.checkElementIndex(Preconditions.java:292) ~[guava-18.0.jar:na] at com.google.common.collect.SingletonImmutableList.get(SingletonImmutableList.java:45) ~[guava-18.0.jar:na] at org.wisdom.api.router.Route.getPathParametersEncoded(Route.java:305) ~[wisdom-api-0.9.2-SNAPSHOT.jar:na] at org.wisdom.router.RouteDelegate.getPathParametersEncoded(RouteDelegate.java:150) [router-0.9.2-SNAPSHOT.jar:na] at org.wisdom.framework.vertx.ContextFromVertx.parameterFromPath(ContextFromVertx.java:337) ~[na:na] at org.wisdom.router.parameter.ParameterHandler.create(ParameterHandler.java:39) ~[na:na] at org.wisdom.router.parameter.Bindings.create(Bindings.java:62) ~[na:na] at org.wisdom.router.RouteDelegate$EndOfChainInvoker.call(RouteDelegate.java:311) ~[na:na] at org.wisdom.api.interception.RequestContext.proceed(RequestContext.java:124) [wisdom-api-0.9.2-SNAPSHOT.jar:na] at org.wisdom.error.DefaultPageErrorHandler.__M_call(DefaultPageErrorHandler.java:236) [default-error-handler-0.9.2-SNAPSHOT.jar:na] at org.wisdom.error.DefaultPageErrorHandler.call(DefaultPageErrorHandler.java) [default-error-handler-0.9.2-SNAPSHOT.jar:na] at org.wisdom.api.interception.RequestContext.proceed(RequestContext.java:124) [wisdom-api-0.9.2-SNAPSHOT.jar:na] at org.wisdom.monitor.extensions.dashboard.HttpMetricFilter.call(HttpMetricFilter.java:126) [org.wisdom.framework.wisdom.monitor-0.9.2-20150615.165810-14.jar:na] at org.wisdom.api.interception.RequestContext.proceed(RequestContext.java:124) [wisdom-api-0.9.2-SNAPSHOT.jar:na] at org.wisdom.router.RouteDelegate.invoke(RouteDelegate.java:247) [router-0.9.2-SNAPSHOT.jar:na] at org.wisdom.framework.vertx.HttpHandler.invoke(HttpHandler.java:173) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.wisdom.framework.vertx.HttpHandler.dispatch(HttpHandler.java:146) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.wisdom.framework.vertx.HttpHandler.access$200(HttpHandler.java:51) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.wisdom.framework.vertx.HttpHandler$2.handle(HttpHandler.java:105) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.VoidHandler.handle(VoidHandler.java:27) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.VoidHandler.handle(VoidHandler.java:24) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.DefaultHttpServerRequest.handleEnd(DefaultHttpServerRequest.java:334) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.ServerConnection.handleEnd(ServerConnection.java:209) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.ServerConnection.processMessage(ServerConnection.java:313) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.ServerConnection.handleMessage(ServerConnection.java:94) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.DefaultHttpServer$ServerHandler.doMessageReceived(DefaultHttpServer.java:710) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.DefaultHttpServer$ServerHandler.doMessageReceived(DefaultHttpServer.java:600) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.http.impl.VertxHttpHandler.channelRead(VertxHttpHandler.java:72) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at org.vertx.java.core.net.impl.VertxHandler.channelRead(VertxHandler.java:155) [wisdom-vertx-engine-0.9.2-SNAPSHOT.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103) [netty-codec-4.0.27.Final.jar:4.0.27.Final] at io.netty.handler.codec.MessageToMessageCodec.channelRead(MessageToMessageCodec.java:111) [netty-codec-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:242) [netty-codec-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:339) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:324) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:847) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354) [netty-transport-4.0.27.Final.jar:4.0.27.Final] at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:111) [netty-common-4.0.27.Final.jar:4.0.27.Final] at java.lang.Thread.run(Thread.java:745) [na:1.8.0_51]

— Reply to this email directly or view it on GitHub.

cescoffier commented 8 years ago

Ah ah ah definitely a bug. The {2} is replaced by a variable placeholder...