Giter Club home page Giter Club logo

revolver's Introduction

Revolver Bundle Travis build status

This bundle enables one to build downstream proxy with support for transparent callbacks and durable mailbox with polling support. This bundle compiles only on Java 8.

Features

  • Honours Accept header for common media types (JSON, XML, MsgPack)
  • Polling for status of requests
  • Durability of requests/responses
  • Pluggable persistence provider for requests/responses

Dependencies

Usage

Build a downstream proxy with ease that enables transparent callback support

Build instructions

  • Clone the source:

    git clone github.com/phaneesh/revolver
    
  • Build

    mvn install
    

Maven Dependency

Use the following repository:

<repository>
    <id>clojars</id>
    <name>Clojars repository</name>
    <url>https://clojars.org/repo</url>
</repository>

Use the following maven dependency:

<dependency>
    <groupId>io.dropwizard.revolver</groupId>
    <artifactId>dropwizard-revolver</artifactId>
    <version>1.3.7-18-SNAPSHOT</version>
</dependency>

Using Revolver bundle

Bootstrap

    @Override
    public void initialize(Bootstrap<ApiConfiguration> bootstrap) {
        bootstrap.addBundle(new RevolverBundle<ApiConfiguration>() {

            @Override
            public RevolverConfig getRevolverConfig(ApiConfiguration apiConfiguration) {
                return apiConfiguration.getRevolver();
            }

            @Override
            public PersistenceProvider getPersistenceProvider() {
                return new InMemoryPersistenceProvider();
            }
        });

Configuration

revolver:
  clientConfig:
    clientName: revolver-api
  services:
    - type: http
      service: mocky
      connectionPoolSize: 5
      connectionKeepAliveInMillis: 60000
      authEnabled: false
      endpoint:
        type: simple
        host: www.mocky.io
        port: 80
      threadPoolGroupConfig:
        threadPools:
          - threadPoolName: group1-thread-pool
            concurrency: 5
            maxRequestQueueSize: 10
          - threadPoolName: group2-thread-pool
            concurrency: 5
            maxRequestQueueSize: 10
      apis:
        - api: ping
          async: false
          path: "{version}/56da42e80f0000ac31a427ce"
          whitelist: true #Optional metadata for external authentication & authorization systems. Omitting the config will not effect behaviour.
          methods:
            - GET
          authorization:  #Optional metadata for external authorization systems. Omitting the config will not effect behaviour  
            type: dynamic #can 
            methods:
                - GET
            roles:
                - user
          runtime:
            threadPool:
              concurrency: 5
              timeout: 10000
        - api: pong
          async: false
          path: "{version}/56da42e80f0000ac31a427ce"
          whitelist: true #Optional metadata for external authentication & authorization systems. Omitting the config will not effect behaviour.
          methods:
            - GET
          authorization:  #Optional metadata for external authorization systems. Omitting the config will not effect behaviour  
            type: dynamic #can 
            methods:
                - GET
            roles:
                - user
          runtime:
            threadPool:
              timeout: 10000
          groupThreadPool:
            enabled: true
            name: group1-thread-pool
        - api: retryer
          async: false
          path: "{version}/retry"
          whitelist: true #Optional metadata for external authentication & authorization systems. Omitting the config will not effect behaviour.
          methods:
            - GET
          authorization:  #Optional metadata for external authorization systems. Omitting the config will not effect behaviour  
            type: dynamic #can 
            methods:
                - GET
            roles:
                - user
          runtime:
            threadPool:
              timeout: 10000
          retryConfig:
            enabled: true
            maxRetry: 3

Dashboard

Dashboard

Contributors

LICENSE

Copyright 2016 Phaneesh Nagaraja [email protected].

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

revolver's People

Contributors

phaneesh avatar nitishgoyal13 avatar priyadharshini16 avatar santanusinha avatar

Stargazers

Jay Aggarwal avatar Narendra Yadav avatar Arnab Bir avatar Mr. Yadav avatar Achanta Vamsi Subhash avatar GAURAV avatar Sudhir avatar Madan avatar Vivek Kothari avatar Srinivas Iyengar avatar

Watchers

 avatar James Cloos avatar  avatar  avatar Sudhir avatar Madan avatar

revolver's Issues

UTF-8 characters not working

UTF-8 characters not working.
Charset instead of Content-Encoding should be set for request and response.
It should be of the format 'Content-Type: text/html; charset=utf-8' .

SSL Request not working through revolver

When accessing SSL enabled endpoint, following exception is thrown:

ERROR [2016-05-03 06:05:45,009] io.dropwizard.revolver.http.RevolverHttpCommand: Error running HTTP GET call:
! javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
! at sun.security.ssl.Handshaker.activate(Handshaker.java:503) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1470) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1339) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_45]
! at okhttp3.internal.io.RealConnection.connectTls(RealConnection.java:195) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:148) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.io.RealConnection.connect(RealConnection.java:111) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall.getResponse(RealCall.java:240) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall.execute(RealCall.java:57) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.executeRequest(RevolverHttpCommand.java:123) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.doGet(RevolverHttpCommand.java:143) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.execute(RevolverHttpCommand.java:90) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.execute(RevolverHttpCommand.java:57) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.core.RevolverCommand$RevolverCommandHandler.run(RevolverCommand.java:191) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.core.RevolverCommand$RevolverCommandHandler.run(RevolverCommand.java:176) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:293) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:288) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:162) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:154) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:162) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:154) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:162) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:154) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable.unsafeSubscribe(Observable.java:8314) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$5.call(AbstractCommand.java:521) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$5.call(AbstractCommand.java:497) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable.unsafeSubscribe(Observable.java:8314) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na:1.8.0_45]
! at java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_45]
! at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) [na:1.8.0_45]
! at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) [na:1.8.0_45]
! at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]
ERROR [2016-05-03 06:05:45,018] io.dropwizard.jersey.errors.LoggingExceptionMapper: Error handling a request: 3e863eee2721057e
! javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
! at sun.security.ssl.Handshaker.activate(Handshaker.java:503) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.kickstartHandshake(SSLSocketImpl.java:1470) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1339) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1391) ~[na:1.8.0_45]
! at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1375) ~[na:1.8.0_45]
! at okhttp3.internal.io.RealConnection.connectTls(RealConnection.java:195) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.io.RealConnection.connectSocket(RealConnection.java:148) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.io.RealConnection.connect(RealConnection.java:111) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.StreamAllocation.findConnection(StreamAllocation.java:188) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.StreamAllocation.findHealthyConnection(StreamAllocation.java:127) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.StreamAllocation.newStream(StreamAllocation.java:97) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.HttpEngine.connect(HttpEngine.java:289) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.internal.http.HttpEngine.sendRequest(HttpEngine.java:241) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall.getResponse(RealCall.java:240) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall$ApplicationInterceptorChain.proceed(RealCall.java:198) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:160) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at okhttp3.RealCall.execute(RealCall.java:57) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.executeRequest(RevolverHttpCommand.java:123) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.doGet(RevolverHttpCommand.java:143) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.execute(RevolverHttpCommand.java:90) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.http.RevolverHttpCommand.execute(RevolverHttpCommand.java:57) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.core.RevolverCommand$RevolverCommandHandler.run(RevolverCommand.java:191) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.core.RevolverCommand$RevolverCommandHandler.run(RevolverCommand.java:176) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:293) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! ... 21 common frames omitted
! Causing: com.netflix.hystrix.exception.HystrixRuntimeException: dummy.ping failed and fallback disabled.
! at com.netflix.hystrix.AbstractCommand.getFallbackOrThrowException(AbstractCommand.java:843) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand.access$200(AbstractCommand.java:59) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$9.call(AbstractCommand.java:642) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$9.call(AbstractCommand.java:580) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorOnErrorResumeNextViaFunction$4.onError(OperatorOnErrorResumeNextViaFunction.java:139) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$HystrixObservableTimeoutOperator$3.onError(AbstractCommand.java:1005) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorSubscribeOn$1$1.onError(OperatorSubscribeOn.java:59) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorDoOnEach$1.onError(OperatorDoOnEach.java:71) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$DeprecatedOnRunHookApplication$1.onError(AbstractCommand.java:1453) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$ExecutionHookApplication$1.onError(AbstractCommand.java:1349) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:296) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.HystrixCommand$1.call(HystrixCommand.java:288) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:162) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:154) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:162) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:154) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:162) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable$2.call(Observable.java:154) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable.unsafeSubscribe(Observable.java:8314) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$5.call(AbstractCommand.java:521) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.AbstractCommand$5.call(AbstractCommand.java:497) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.Observable.unsafeSubscribe(Observable.java:8314) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.operators.OperatorSubscribeOn$1.call(OperatorSubscribeOn.java:94) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:56) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction$1.call(HystrixContexSchedulerAction.java:47) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.netflix.hystrix.strategy.concurrency.HystrixContexSchedulerAction.call(HystrixContexSchedulerAction.java:69) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at rx.internal.schedulers.ScheduledAction.run(ScheduledAction.java:55) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) ~[na:1.8.0_45]
! at java.util.concurrent.FutureTask.run(FutureTask.java:266) ~[na:1.8.0_45]
! at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) ~[na:1.8.0_45]
! at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) ~[na:1.8.0_45]
! ... 1 common frames omitted
! Causing: io.dropwizard.revolver.core.RevolverExecutionException: com.netflix.hystrix.exception.HystrixRuntimeException: dummy.ping failed and fallback disabled.
! at io.dropwizard.revolver.core.RevolverCommand.execute(RevolverCommand.java:80) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.resource.RevolverRequestResource.executeInline(RevolverRequestResource.java:182) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.resource.RevolverRequestResource.processRequest(RevolverRequestResource.java:163) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.revolver.resource.RevolverRequestResource.get(RevolverRequestResource.java:87) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_45]
! at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_45]
! at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_45]
! at java.lang.reflect.Method.invoke(Method.java:497) ~[na:1.8.0_45]
! at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:144) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:161) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:160) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:99) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:389) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:347) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:102) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.ServerRuntime$2.run(ServerRuntime.java:326) ~[RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.internal.Errors.process(Errors.java:315) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.internal.Errors.process(Errors.java:297) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.internal.Errors.process(Errors.java:267) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:305) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1154) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:471) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:425) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:383) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:336) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:223) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.jetty.NonblockingServletHolder.handle(NonblockingServletHolder.java:49) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1669) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlets.UserAgentFilter.doFilter(UserAgentFilter.java:83) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlets.GzipFilter.doFilter(GzipFilter.java:364) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.jetty.BiDiGzipFilter.doFilter(BiDiGzipFilter.java:132) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.servlets.ThreadNameFilter.doFilter(ThreadNameFilter.java:29) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.handle(AllowedMethodsFilter.java:43) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.jersey.filter.AllowedMethodsFilter.doFilter(AllowedMethodsFilter.java:38) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1652) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:585) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1127) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:515) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1061) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at com.codahale.metrics.jetty9.InstrumentedHandler.handle(InstrumentedHandler.java:240) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at io.dropwizard.jetty.RoutingHandler.handle(RoutingHandler.java:51) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.RequestLogHandler.handle(RequestLogHandler.java:95) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:159) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.Server.handle(Server.java:499) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:310) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:540) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555) [RevolverTest-1.0.0-jar-with-dependencies.jar:1.0.0]
! at java.lang.Thread.run(Thread.java:745) [na:1.8.0_45]

Support request idempotency

Support needs to be added for request id based idempotency. In case the same request id is sent from same ip within a certain (long) time, revolver needs to return appropriate status poining out that it's a duplicate request. This way no backend service needs to implement idempotency.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.