Rapidoid - Extremely Fast, Simple and Powerful Java Web Framework and HTTP Server!

Overview

Rapidoid - Simple. Powerful. Secure. Fast!

Rapidoid is an extremely fast HTTP server and modern Java web framework / application container, with a strong focus on high productivity and high performance.

Documentation, examples, community support

Please visit the official site:

http://www.rapidoid.org/

Apache License v2

Rapidoid is released under the liberal Apache Public License v2, so it is free to use for both commercial and non-commercial projects.

Roadmap

  • Better documentation (work in progress - as always)
  • Swagger / OpenAPI support

Contributing

  1. Fork (and then git clone https://github.com/<your-username-here>/rapidoid.git).
  2. Make your changes
  3. Commit your changes (git commit -am "Description of contribution").
  4. Push to GitHub (git push).
  5. Open a Pull Request.
  6. Please sign the CLA.
  7. Thank you for your contribution! Wait for a response...
Comments
  • Bad request on '..' in GET query parameter

    Bad request on '..' in GET query parameter

    Going to a valid route with a query parameter that has ".." in it will result in a bad request even though it's completely valid.

    For example, http://localhost:8888/Auth?code=test.. will fail with a bad request, while http://localhost:8888/Auth?code=test. will properly route. The handler in question was registered with On.get("/Auth").plain(new ReqRespHandler() { ... etc. The error is coming from this segment of code, https://github.com/rapidoid/rapidoid/blob/933fc5003295a0f121243856e9a0263ddb200a34/rapidoid-buffer/src/main/java/org/rapidoid/bytes/BytesUtil.java#L571.

    Unfortunately, a google api I'm using returns a token with '..' present in the string. When using google oauth, the redirect link gets passed a get parameter that has somekey=abcdabcd..abcda& in it. Therefore, I would consider this a bug on Rapidoid's part as that's a valid URL. The fix would involve removing the if statement causing the fail and updating the corresponding tests associated with '..' not being valid.

    bug fixed & released 
    opened by mooman219 12
  • Extend transaction context to include serialization

    Extend transaction context to include serialization

    Returning a JPA entity containing a collection of referenced entities as JSON from a transactional request will fail during serialization if the collection is loaded lazy (which is the default).

    The reason is that the entity is not fully instantiated when the handler method returns, and the JPA lazy load will happen only on serialization. But it seems that rapidoid closes the transaction before serializing the results, so Hibernate throws a LazyInitializationException.

    stacktrace.txt

    bug fixed & released 
    opened by bokesan 11
  • Rapidoid crashes when processing requests that use Transfer-Encoding.

    Rapidoid crashes when processing requests that use Transfer-Encoding.

    Ok, so after an hour or two of smashing my face against this problem, it's a bit of a doozy...

    I've written a shitty http client that can send Multipart POST requests to a server. The server I was using to test against was Rapidoid, as it's insanely easy to do anything. (Props for that).

    The library I'm writing uses the new Java 11 HttpClient, and as far as I can tell, the problem doesn't lie with that.

    The problem:

    ERROR | 05/Jan/2019 19:27:03:122 | server1 | org.rapidoid.net.impl.RapidoidWorker | Failed to process message! | error = java.lang.RuntimeException: Error in the response order control! Expected handle: 1, real: 0
    java.lang.RuntimeException: Error in the response order control! Expected handle: 1, real: 0
    	at org.rapidoid.u.U.rte(U.java:423)
    	at org.rapidoid.u.U.rte(U.java:435)
    	at org.rapidoid.net.impl.RapidoidConnection.processedSeq(RapidoidConnection.java:276)
    	at org.rapidoid.net.impl.RapidoidWorker.processNext(RapidoidWorker.java:281)
    	at org.rapidoid.net.impl.RapidoidWorker.processMsgs(RapidoidWorker.java:216)
    	at org.rapidoid.net.impl.RapidoidWorker.process(RapidoidWorker.java:208)
    	at org.rapidoid.net.impl.RapidoidWorker.readOP(RapidoidWorker.java:159)
    	at org.rapidoid.net.impl.AbstractEventLoop.processKey(AbstractEventLoop.java:93)
    	at org.rapidoid.net.impl.AbstractEventLoop.insideLoop(AbstractEventLoop.java:146)
    	at org.rapidoid.net.impl.AbstractLoop.run(AbstractLoop.java:71)
    	at org.rapidoid.net.impl.RapidoidWorkerThread.run(RapidoidWorkerThread.java:58)
    

    An attempt to describe said problem:

    After poking it for a bit, I've determined that the HttpManagedHandlerDecorator promotes the connection to async, when it shouldn't.
    But it does so in an alternating fashion.

    So, I chunk up the request, because, well, that's a good thing to do.
    When the first chunk comes through, rapidoid processes it without issue.
    As it was processing the first chunk, the connection seems to be set to sync, and it tells the connection that the seq 0 was handled.

    The problem arises when the next seq is handled.
    For some reason, HttpManagedHandlerDecorator sets it to async:

    Breakpoint reached
    	  at org.rapidoid.net.impl.RapidoidConnection.async(RapidoidConnection.java:490)
    	  at org.rapidoid.http.handler.HttpManagedHandlerDecorator.handle(HttpManagedHandlerDecorator.java:63)
    	  at org.rapidoid.http.handler.AbstractDecoratingHttpHandler.handle(AbstractDecoratingHttpHandler.java:55)
    	  at org.rapidoid.http.FastHttp.handleIfFound(FastHttp.java:285)
    	  at org.rapidoid.http.FastHttp.onRequest(FastHttp.java:136)
    	  at org.rapidoid.http.FastHttpProtocol.process(FastHttpProtocol.java:59)
    	  at org.rapidoid.net.impl.RapidoidWorker.processNext(RapidoidWorker.java:271)
    	  at org.rapidoid.net.impl.RapidoidWorker.processMsgs(RapidoidWorker.java:216)
    	  at org.rapidoid.net.impl.RapidoidWorker.process(RapidoidWorker.java:208)
    	  at org.rapidoid.net.impl.RapidoidWorker.readOP(RapidoidWorker.java:159)
    	  at org.rapidoid.net.impl.AbstractEventLoop.processKey(AbstractEventLoop.java:93)
    	  at org.rapidoid.net.impl.AbstractEventLoop.insideLoop(AbstractEventLoop.java:146)
    	  at org.rapidoid.net.impl.AbstractLoop.run(AbstractLoop.java:71)
    	  at org.rapidoid.net.impl.RapidoidWorkerThread.run(RapidoidWorkerThread.java:58)
    

    So the connection is now marked as async, and the RapidoidWorker checks if the current request is async, if so, it doesn't care, and continues processing.

    Meanwhile, it sets it back to sync, so when the second chunk comes in, the connection errors out, because
    it was marked as sync, and as a result, tries to tell the connection that seq 2 was handled, but the
    connection was never informed about seq 1, so it throws the error.

    Beyond that, I have no idea.
    If this wall of text helps in some way, awesome.
    Otherwise I'm fine answering any questions you might have.

    The client I've written isn't public yet, but I'd be happy to give you the code to take a look.

    bug 
    opened by Jezza 9
  • Which files need to be hosted?

    Which files need to be hosted?

    Hello @nmihajlovski ,

    I am the member of cdnjs project. We want to host this library. But there is a question want to ask. I want to confirm with you about the main file need to be grab on github. Are the main files all under assets/rapidoid/ this folder?(rapidoid-extras.css and rapidoid-extras.js) And are there any other dependency files needed to be grab? Please help me confirm this. Thanks for your help!

    https://github.com/cdnjs/cdnjs/issues/8398

    opened by kennynaoh 9
  • java.lang.NullPointerException on rapid request issuing

    java.lang.NullPointerException on rapid request issuing

    when I issue multiple requests at the same time (roughly) say press the refresh button in the browser in rapid succession I am seeing this stacktrace in the console:

    ERROR | pool-1-thread-7 | org.rapidoid.job.ContextPreservingJobWrapper | Job execution failed! | message=null java.lang.NullPointerException at org.rapidoid.net.impl.RapidoidWorker.close(RapidoidWorker.java:261) at org.rapidoid.net.impl.RapidoidWorker.close(RapidoidWorker.java:256) at org.rapidoid.net.impl.RapidoidConnection.close(RapidoidConnection.java:229) at org.rapidoid.net.impl.RapidoidConnection.close(RapidoidConnection.java:276) at org.rapidoid.net.impl.RapidoidConnection.closeIf(RapidoidConnection.java:283) at org.rapidoid.net.impl.RapidoidConnection.closeIf(RapidoidConnection.java:45) at org.rapidoid.http.fast.FastHttp.done(FastHttp.java:458) at org.rapidoid.http.fast.ReqImpl.finish(ReqImpl.java:516) at org.rapidoid.http.fast.ReqImpl.onDone(ReqImpl.java:430) at org.rapidoid.http.fast.ReqImpl.done(ReqImpl.java:414) at org.rapidoid.http.fast.handler.AbstractAsyncHttpHandler.complete(AbstractAsyncHttpHandler.java:205) at org.rapidoid.http.fast.handler.AbstractAsyncHttpHandler$1.run(AbstractAsyncHttpHandler.java:128) at org.rapidoid.job.ContextPreservingJobWrapper.run(ContextPreservingJobWrapper.java:62) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Exception in thread "pool-1-thread-7" java.lang.RuntimeException: Job execution failed! at org.rapidoid.u.U.rte(U.java:560) at org.rapidoid.job.ContextPreservingJobWrapper.run(ContextPreservingJobWrapper.java:65) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.NullPointerException at org.rapidoid.net.impl.RapidoidWorker.close(RapidoidWorker.java:261) at org.rapidoid.net.impl.RapidoidWorker.close(RapidoidWorker.java:256) at org.rapidoid.net.impl.RapidoidConnection.close(RapidoidConnection.java:229) at org.rapidoid.net.impl.RapidoidConnection.close(RapidoidConnection.java:276) at org.rapidoid.net.impl.RapidoidConnection.closeIf(RapidoidConnection.java:283) at org.rapidoid.net.impl.RapidoidConnection.closeIf(RapidoidConnection.java:45) at org.rapidoid.http.fast.FastHttp.done(FastHttp.java:458) at org.rapidoid.http.fast.ReqImpl.finish(ReqImpl.java:516) at org.rapidoid.http.fast.ReqImpl.onDone(ReqImpl.java:430) at org.rapidoid.http.fast.ReqImpl.done(ReqImpl.java:414) at org.rapidoid.http.fast.handler.AbstractAsyncHttpHandler.complete(AbstractAsyncHttpHandler.java:205) at org.rapidoid.http.fast.handler.AbstractAsyncHttpHandler$1.run(AbstractAsyncHttpHandler.java:128) at org.rapidoid.job.ContextPreservingJobWrapper.run(ContextPreservingJobWrapper.java:62) ... 3 more

    The reply seems to arrive just fine in the browser but I am wondering if this behavior is caused by my handler or an actual bug in the server.

    Thanks !

    bug 
    opened by cosminbasca 9
  • Ability to convert IllegalArgumentException as an HTTP 400 (Bad Request) response

    Ability to convert IllegalArgumentException as an HTTP 400 (Bad Request) response

    Currently, if we return null from a controller, the response is automatically translated to a 404 not found which is very convenient. However for any thrown errors, the response is converted to a 500 internal server error.

    However, when designing a REST API, it is very common that we want to return a 400 Bad Request because the client request parameters are invalid.

    It would be more useful if we could simply throw an IllegalArgumentException and have that exception translated to a 400 Bad Request response.

    Maybe there is a convenient mechanism for handling this but I looked at all the documentation and the examples and couldn't find any clues on how to implement this is a nice way.

    bug 
    opened by picaron 7
  • HTTPS Support

    HTTPS Support

    At first glance the one thing that would prevent me from using this today is the lack of HTTPS support. The framework looks really promising and I think adding HTTPS support would encourage others to start to use the framework.

    released feature request implemented 
    opened by rpmoore 7
  • Path param in @Controller

    Path param in @Controller

    Feature: Similiar mechanism like in HTTP annotations:

    @GET("/{id}/subresources")

    but also in

    @Controller("/api/resource/{id}/subresource")

    opened by procek69 6
  • JDBI integration - ClassCastException on hot reload with possibe fix

    JDBI integration - ClassCastException on hot reload with possibe fix

    I am using JDBI with Rapidoid.

    The problem When visiting a page that makes database bindings/mapping after hot reloading I get a ClassCastException. java.lang.ClassCastException: is.kormakur.site.dao.EntryDao cannot be cast to is.kormakur.site.dao.EntryDao

    How it happens After some Googling I figured out it has something to do with mismatched ClassLoaders, because JDBI holds a cache of the bindings/map of a DAO class for the database table.

    My personal fix If I hot reload and visit some other page before ever loading the offending page that initially maps the Pojo to the table and does database calls, then the problem is fixed, I can hot reload after freely without any exceptions.

    Potential fix When Rapidoid initializes it should use the same ClassLoader as it does for hot reloading as it uses initially, if I understand the problem correctly.

    If you need some more information, like maybe an example project feel free to ask.

    bug won't do 
    opened by korri123 6
  • ElasticSearch support to invoke clients methods

    ElasticSearch support to invoke clients methods

    I'm trying to use elasticsearch inside of the framework but when use http fast restful to create web services and the project have dependencies of elastic it can not invoke the methods of elastic, always crash in the invoke() method in the class Cls.java, i'm searching about this issue but i can't find anything about it, forgive me that it is my mistake but im been trying everything

    opened by GuillerDark 6
  • Why fast-http has no url pattern support ?

    Why fast-http has no url pattern support ?

    url pattern is really important for doing some real thing,I don't want to use web for only url pattern it's to heavy.

    As sweet as

    On.get("/user/${id}").json(req->"You id "+req.params().get("id"))
    
    enhancement 
    opened by wenerme 6
  • fix(sec): upgrade org.hibernate.validator:hibernate-validator to 6.1.3.Final

    fix(sec): upgrade org.hibernate.validator:hibernate-validator to 6.1.3.Final

    What happened?

    There are 1 security vulnerabilities found in org.hibernate.validator:hibernate-validator 6.0.2.Final

    What did I do?

    Upgrade org.hibernate.validator:hibernate-validator from 6.0.2.Final to 6.1.3.Final for vulnerability fix

    What did you expect to happen?

    Ideally, no insecure libs should be used.

    The specification of the pull request

    PR Specification from OSCS

    opened by chncaption 0
  • Plz fix bug for java 11

    Plz fix bug for java 11

    when i config java 11, have a error: 16:11:18.682 [executor60] ERROR org.rapidoid.http.impl.lowlevel.LowLevelHttpIO - Error occurred when handling request! | error = java.lang.RuntimeException: Error while retrieving view: 404 java.lang.RuntimeException: Error while retrieving view: 404 at org.rapidoid.u.U.rte(U.java:427) at org.rapidoid.http.impl.ResponseRenderer.renderView(ResponseRenderer.java:117) at org.rapidoid.http.impl.ResponseRenderer.renderMvc(ResponseRenderer.java:57) at org.rapidoid.http.impl.BodyRenderer.createRespBodyFromResult(BodyRenderer.java:67) at org.rapidoid.http.impl.BodyRenderer.toRespBody(BodyRenderer.java:41) at org.rapidoid.http.impl.ReqImpl.renderResponse(ReqImpl.java:569) at org.rapidoid.http.impl.ReqImpl.renderResponseOrError(ReqImpl.java:549) at org.rapidoid.http.impl.ReqImpl.onDone(ReqImpl.java:524) at org.rapidoid.http.impl.ReqImpl.done(ReqImpl.java:510) at org.rapidoid.http.impl.lowlevel.LowLevelHttpIO$1.run(LowLevelHttpIO.java:231) at org.rapidoid.job.PredefinedContextJobWrapper.run(PredefinedContextJobWrapper.java:56) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) Caused by: java.lang.RuntimeException: Couldn't recalculate the cache value! at org.rapidoid.u.U.rte(U.java:427) at org.rapidoid.cache.impl.ConcurrentCacheAtom.retrieveCachedValue(ConcurrentCacheAtom.java:163) at org.rapidoid.cache.impl.ConcurrentCacheAtom.get(ConcurrentCacheAtom.java:64) at org.rapidoid.cache.impl.ConcurrentCache.get(ConcurrentCache.java:153) at org.rapidoid.render.RapidoidTemplateFactory.load(RapidoidTemplateFactory.java:66) at org.rapidoid.http.customize.defaults.DefaultViewResolver.getView(DefaultViewResolver.java:49) at org.rapidoid.http.impl.ResponseRenderer.renderView(ResponseRenderer.java:115) ... 12 more Caused by: java.lang.RuntimeException: at org.rapidoid.u.U.rte(U.java:427) at org.rapidoid.u.U.rte(U.java:431) at org.rapidoid.render.TemplateCompiler.compile(TemplateCompiler.java:49) at org.rapidoid.render.XNode.compile(XNode.java:63) at org.rapidoid.render.XNode.compile(XNode.java:67) at org.rapidoid.render.RapidoidTemplateFactory.loadTemplate(RapidoidTemplateFactory.java:83) at org.rapidoid.render.RapidoidTemplateFactory.loadAndCompile(RapidoidTemplateFactory.java:40) at org.rapidoid.render.RapidoidTemplateFactory$1.map(RapidoidTemplateFactory.java:54) at org.rapidoid.render.RapidoidTemplateFactory$1.map(RapidoidTemplateFactory.java:51) at org.rapidoid.cache.impl.ConcurrentCacheAtom.retrieveCachedValue(ConcurrentCacheAtom.java:130) ... 17 more Caused by: javassist.NotFoundException: org.rapidoid.render.TemplateRenderer at javassist.ClassPool.get(ClassPool.java:450) at org.rapidoid.render.TemplateCompiler.tryToCompile(TemplateCompiler.java:60) at org.rapidoid.render.TemplateCompiler.compile(TemplateCompiler.java:46) ... 24 more

    Many thanks!

    opened by vuminhngoc 0
  • Why no longer fastest in the world?

    Why no longer fastest in the world?

    I remember this was fastest web server in the world at some point? did it get slower with more features?

    https://www.techempower.com/benchmarks/#section=data-r12&hw=ph&test=plaintext here it has the highest score, if it kept that score it would be highest even now so what happened here? just a lucky round 12 or it became slower over time

    opened by vachb 0
  • Dependency org.hibernate:hibernate-core, leading to CVE problem

    Dependency org.hibernate:hibernate-core, leading to CVE problem

    Hi, In rapidoid/rapidoid-jpa,there is a dependency org.hibernate:hibernate-core:4.3.11.Final that calls the risk method.

    CVE-2020-25638

    The scope of this CVE affected version is [,5.4.24.Final)

    After further analysis, in this project, the main Api called is <org.hibernate.sql.QuerySelect: java.lang.String toQueryString()>

    Risk method repair link : GitHub

    CVE Bug Invocation Path--

    Path Length : 9

    <org.hibernate.sql.QuerySelect: java.lang.String toQueryString()>
    at <org.hibernate.hql.internal.classic.QueryTranslatorImpl: void renderSQL()> (org.hibernate.hql.internal.classic.QueryTranslatorImpl.java:[651]) in /.m2/repository/org/hibernate/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar
    at <org.hibernate.hql.internal.classic.QueryTranslatorImpl: void compile()> (org.hibernate.hql.internal.classic.QueryTranslatorImpl.java:[245]) in /.m2/repository/org/hibernate/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar
    at <org.hibernate.hql.internal.classic.QueryTranslatorImpl: void compile(java.util.Map,boolean)> (org.hibernate.hql.internal.classic.QueryTranslatorImpl.java:[211]) in /.m2/repository/org/hibernate/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar
    at <org.hibernate.engine.query.spi.HQLQueryPlan: void <init>(java.lang.String,java.lang.String,boolean,java.util.Map,org.hibernate.engine.spi.SessionFactoryImplementor,org.hibernate.engine.query.spi.EntityGraphQueryHint)> (org.hibernate.engine.query.spi.HQLQueryPlan.java:[131]) in /.m2/repository/org/hibernate/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar
    at <org.hibernate.engine.query.spi.HQLQueryPlan: void <init>(java.lang.String,boolean,java.util.Map,org.hibernate.engine.spi.SessionFactoryImplementor,org.hibernate.engine.query.spi.EntityGraphQueryHint)> (org.hibernate.engine.query.spi.HQLQueryPlan.java:[98]) in /.m2/repository/org/hibernate/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar
    at <org.hibernate.jpa.internal.QueryImpl: java.util.List list()> (org.hibernate.jpa.internal.QueryImpl.java:[568]) in /.m2/repository/org/hibernate/hibernate-entitymanager/4.3.11.Final/hibernate-entitymanager-4.3.11.Final.jar
    at <org.hibernate.jpa.internal.QueryImpl: java.util.List getResultList()> (org.hibernate.jpa.internal.QueryImpl.java:[449]) in /.m2/repository/org/hibernate/hibernate-entitymanager/4.3.11.Final/hibernate-entitymanager-4.3.11.Final.jar
    at <org.rapidoid.jpa.JPAUtil: java.util.List getPage(javax.persistence.Query,int,int)> (org.rapidoid.jpa.JPAUtil.java:[150]) in /detect/unzip/rapidoid-5.1.0/rapidoid-jpa/target/classes
    

    Dependency tree--

    [INFO] org.rapidoid:rapidoid-jpa:jar:5.1.0
    [INFO] +- org.rapidoid:rapidoid-commons:jar:5.1.0:compile
    [INFO] |  +- org.rapidoid:rapidoid-essentials:jar:5.1.0:compile
    [INFO] |  +- org.javassist:javassist:jar:3.20.0-GA:compile
    [INFO] |  +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.6:compile
    [INFO] |  |  +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.0:compile
    [INFO] |  |  \- com.fasterxml.jackson.core:jackson-core:jar:2.6.6:compile
    [INFO] |  +- com.fasterxml.jackson.module:jackson-module-afterburner:jar:2.6.6:compile
    [INFO] |  +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.6.6:compile
    [INFO] |  |  \- org.yaml:snakeyaml:jar:1.15:compile
    [INFO] |  \- javax.inject:javax.inject:jar:1:compile
    [INFO] +- org.hibernate:hibernate-entitymanager:jar:4.3.11.Final:compile
    [INFO] |  +- org.jboss.logging:jboss-logging:jar:3.1.3.GA:compile
    [INFO] |  +- org.jboss.logging:jboss-logging-annotations:jar:1.2.0.Beta1:compile
    [INFO] |  +- org.hibernate:hibernate-core:jar:4.3.11.Final:compile
    [INFO] |  |  +- antlr:antlr:jar:2.7.7:compile
    [INFO] |  |  \- org.jboss:jandex:jar:1.1.0.Final:compile
    [INFO] |  +- dom4j:dom4j:jar:1.6.1:compile
    [INFO] |  |  \- xml-apis:xml-apis:jar:1.0.b2:compile
    [INFO] |  +- org.hibernate.common:hibernate-commons-annotations:jar:4.0.5.Final:compile
    [INFO] |  +- org.hibernate.javax.persistence:hibernate-jpa-2.1-api:jar:1.0.0.Final:compile
    [INFO] |  \- org.jboss.spec.javax.transaction:jboss-transaction-api_1.2_spec:jar:1.0.0.Final:compile
    

    Suggested solutions:

    Update dependency version

    Thank you very much.

    opened by CVEDetect 1
  • Video/Media Upgrade

    Video/Media Upgrade

    Currently, when serving large media, buffer space is an issue and leads some browsers (typically on mobile) unable to load the content for playback. Also, on Chrome, you are unable to scrub through the content compared to Apache's Web Server.

    It would be a nice feature to have this looked into.

    opened by LandyLane 0
  • Add additional documentation and examples for HTML rendering

    Add additional documentation and examples for HTML rendering

    There does not appear to be a lot of documentation for HTML rendering.

    Need more documentation and ideally a repo that contains fully working examples of how to set up and use the HTML rendering functionality.

    opened by danuvian 1
Releases(5.1.0)
  • 5.1.0(May 13, 2016)

    • automatic hot reload after code changes,
    • lambdas as handlers - with named and type-safe parameters,
    • URI path patterns (simple and regex-based),
    • Admin Center for convenient management of the deployed app,
    • JVM and OS metrics in the Admin Center,
    • info about the web app routes in the Admin Center,
    • role-based web security with out-of-the-box login / logout,
    • configuration info in the Admin Center,
    • configuration profiles,
    • improved dependency injection (with profile support),
    • easy JPA bootstrap with TX management and nice utils like JPA.insert(new Foo()),
    • redesigned and enhanced JDBC utils,
    • scaffolding of JPA entities (RESTful services and management GUI),
    • new templating language and engine - similar to Mustache, but more practical,
    • highly customizable setup (serialization, security, error handling, template engine...),
    • many GUI enhancements...
    Source code(tar.gz)
    Source code(zip)
  • 5.0.0(Nov 8, 2015)

    • Major reorganization of the modules
    • Introduced clean API for the HTTP server
    • Introduced the Fluent module/framework
    • Improved the GUI components
    • Improved the API for the classpath scanner
    • Many bug fixes
    Source code(tar.gz)
    Source code(zip)
  • 4.1.0(Aug 14, 2015)

    • Replaced the Java-based page construction with Mustache templates
    • Added Cassandra-based implementation of the DB plugin (using the Datastax driver)
    • Included C3P0 for JDBC connection pooling for Hibernate and the simple SQL API
    • Added Micro-services support
    • Implemented caching of file resources, with reloading and change notifications
    • Added Jackson-based YAML parser utils
    • Added support for multi-threaded context spanning
    • Switched to async HTTP client
    • Implemented simple Watch service, notifying about file system changes (a simplification on top of Java NIO's watch service)
    • Introduced multi-app request routing
    • Improved transaction management
    • Simplified GUI pages (now defined by methods instead of classes)
    • Introduced more plugins Email, SMS, Templates etc
    • Added simple utils for scripting with JavaScript (Rhino or Nashorn)
    • Defined project resources layout ("dynamic", "static" and "templates" folders)
    • Added support for JavaScript-based RESTful services or dynamic pages using scripting
    • Simplified app configuration (App details, OAuth config etc.) using "app.yaml" configuration file
    • Simplified app menu construction using "menu.yaml" configuration file
    • Added even more cool utils in U (dynamic, mapOfMaps, mapOfLists, etc.)
    • Added support for multi-path resource trac
    • Improved the default CSS theme
    • Enhanced the error page
    • Improved the snippet widget
    • Simplified logging, re-based it on top of SLF4j, and included Logback by default
    • Introduced new context-aware job executor service with reference-counting clean-up
    Source code(tar.gz)
    Source code(zip)
  • rapidoid-4.0.1(Jul 5, 2015)

  • rapidoid-4.0.0(Jul 2, 2015)

    • Major changes in HTTP API (simplified and improved),
    • Added new small modules with utils for finer granularity,
    • Introduced "cookiepack" scope - stateless cookie-persisted session,
    • Introduced "local" scope - stateless page-local data persisted across ajax requests,
    • Refactored GUI widgets and state - using "local" view state,
    • Implemented more powerful classpath scanner (super-simple, no config required),
    • Replaced name-based with annotation-based component discovery mechanism,
    • Separated per-request transaction management through configurable AOP-style method interceptors,
    • Introduced JS and CSS library packs,
    • Many bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • rapidoid-3.0.0(Jun 1, 2015)

    • Major redesign of many modules and components.
    • Separated the experimental X-modules from the main distribution.
    • De-coupled subsystems through plugin architecture (e.g DB plugin).
    • Introduced SQL module with a simple JDBC abstraction DSL.
    • Added built-in support for JPA (the default implementation of the DB plugin).
    • Replaced convention-based with annotation-based RESTful services.
    • Added module "Quick" for quick development (including JPA/Hibernate and H2 in-mem database).
    • Added new CSS utils and components.
    • Enhanced the default application look&feel.
    • Many bug fixes.
    Source code(tar.gz)
    Source code(zip)
  • rapidoid-2.4.0(Jun 1, 2015)

    • Added support for clean, empty pages (without navbar etc.)
    • Added simple debug widget
    • Improved AngularJS support
    • Introduced a card widget
    • Added multi-column support in stream widget
    • Introduced Dict data structure
    • Many bug fixes
    Source code(tar.gz)
    Source code(zip)
  • rapidoid-2.3.0(Mar 6, 2015)

    • Implemented generic HTTP protocol upgrade,
    • Implemented basic (incomplete) WebSocket server,
    • Introduced Rapidoid Query Language (RQL),
    • Simplified GUI widget construction,
    • Included AngularJS in the stack,
    • Added AngularJS-based Infinite Stream Widget,
    • Added Code Snippet widget,
    • Added Button widget,
    • Added support for all Font Awesome icons as constants,
    • Fixed several bugs.
    Source code(tar.gz)
    Source code(zip)
    rapidoid-2.3.0.jar(11.48 MB)
  • rapidoid-2.2.0(Feb 19, 2015)

    • Simplified the modeling of DB relations through domain model collections.
    • Enriched Entity model with "createdOn", "createdBy", "lastUpdatedOn" and "lastUpdatedBy" built-in properties.
    • Improved DSL for grid and panel widgets.
    • Introduced CanManage security annotation (insert/update/delete).
    • Improved security defaults.
    • Many minor bug fixes and small improvements.
    Source code(tar.gz)
    Source code(zip)
    rapidoid-2.2.0.jar(11.40 MB)
  • rapidoid-2.1.1(Feb 17, 2015)

  • rapidoid-2.1.0(Feb 17, 2015)

  • rapidoid-2.0.3(Feb 17, 2015)

  • rapidoid-2.0.2(Feb 17, 2015)

  • rapidoid-2.0.1(Feb 17, 2015)

  • rapidoid-2.0.0(Feb 17, 2015)

  • rapidoid-1.0.1(Feb 17, 2015)

  • rapidoid-1.0.0(Feb 17, 2015)

  • rapidoid-0.9.0(Feb 17, 2015)

A simple http wrapper

HTTP Wrapper A Java 8 HTTP Wrapper Lib to deserialize the response! Explore the docs » Examples · Report Bug · Request Feature Getting Started This is

Diego Cardenas 13 Jul 22, 2021
A damn simple library for building production-ready RESTful web services.

Dropwizard Dropwizard is a sneaky way of making fast Java web applications. It's a little bit of opinionated glue code which bangs together a set of l

Dropwizard 8.3k Jan 5, 2023
Feign makes writing java http clients easier

Feign makes writing java http clients easier Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign's first goal

null 8.5k Jan 2, 2023
Feign makes writing java http clients easier

Feign makes writing java http clients easier Feign is a Java to HTTP client binder inspired by Retrofit, JAXRS-2.0, and WebSocket. Feign's first goal

null 6.8k Mar 13, 2021
Rest.li is a REST+JSON framework for building robust, scalable service architectures using dynamic discovery and simple asynchronous APIs.

Rest.li is an open source REST framework for building robust, scalable RESTful architectures using type-safe bindings and asynchronous, non-blocking I

LinkedIn 2.3k Dec 29, 2022
A type-safe HTTP client for Android and the JVM

Retrofit A type-safe HTTP client for Android and Java. For more information please see the website. Download Download the latest JAR or grab from Mave

Square 41k Jan 5, 2023
JHipster is a development platform to quickly generate, develop, & deploy modern web applications & microservice architectures.

Greetings, Java Hipster! Full documentation and information is available on our website at https://www.jhipster.tech/ Please read our guidelines befor

JHipster 20.2k Jan 5, 2023
Spring HATEOAS - Library to support implementing representations for hyper-text driven REST web services.

Spring HATEOAS This project provides some APIs to ease creating REST representations that follow the HATEOAS principle when working with Spring and es

Spring 996 Dec 28, 2022
Spring HATEOAS - Library to support implementing representations for hyper-text driven REST web services.

Spring HATEOAS This project provides some APIs to ease creating REST representations that follow the HATEOAS principle when working with Spring and es

Spring 920 Mar 8, 2021
Leading REST API framework for Java

Restlet Framework The leading REST API framework for Java Thanks to Restlet Framework's powerful routing and filtering capabilities, unified client an

Restlet Framework 633 Dec 18, 2022
Examples and server integrations for generating the Swagger API Specification, which enables easy access to your REST API

Swagger Core NOTE: If you're looking for Swagger Core 1.5.X and OpenAPI 2.0, please refer to 1.5 branch. NOTE: Since version 2.1.7 Swagger Core suppor

Swagger 7.1k Jan 5, 2023
A simple banking system written in Java used to teach object-oriented programming and best coding practices.

didactic-bank-application A simple banking system written in Java used to teach object-oriented programming and best coding practices. It is a three-l

Ingrid Nunes 32 Aug 28, 2022
A simple API wrapper for discords.com (alias botsfordiscord.com) written in Java.

Discords.com / BotsForDiscord.com Java Library A simple API wrapper for discords.com (alias botsfordiscord.com) written in Java 8. Installation This w

Dorian 3 Aug 6, 2021
Simple JSP Servlets REST api.

Simple JSP Servlets REST api.

MisterFunny01 3 May 9, 2021
Microserver is a Java 8 native, zero configuration, standards based, battle hardened library to run Java Rest Microservices via a standard Java main class. Supporting pure Microservice or Micro-monolith styles.

Microserver A convenient modular engine for Microservices. Microserver plugins offer seamless integration with Spring (core), Jersey, Guava, Tomcat, G

AOL 936 Dec 19, 2022
A Java API wrapper for the pastemyst api

Pastemyst.java What is pastemyst.java? pastemyst.java is a pastemyst API Wrapper, written in Java. The library is in early development, and all contri

YeffyCodeGit 8 Sep 28, 2022
API de Clientes - Java+Quarkus

com.clientes.api Project This project uses Quarkus, the Supersonic Subatomic Java Framework. If you want to learn more about Quarkus, please visit its

null 5 Oct 12, 2021
Better compatibility, compatible with konas, future, pyro and rusher.

Compatible phobos 1.9.0 compatible with pyro, future, konas and rusher. to build it yourself, use: MACOS/LINUX: ./gradlew setupDecompWorkspace ./gradl

Hurb 15 Dec 2, 2022