GithubHelp home page GithubHelp logo

ca-archived / aeromock Goto Github PK

View Code? Open in Web Editor NEW
151.0 18.0 11.0 3.47 MB

Lightweight mock web application server

License: MIT License

Java 0.77% Scala 69.58% Groovy 6.03% HTML 7.38% JavaScript 4.54% CSS 0.04% CoffeeScript 0.34% Shell 3.94% Protocol Buffer 1.18% FreeMarker 6.20%
mock json template-engine java scala freemarker handlebars velocity jade groovy

aeromock's Introduction

Aeromock

Gitter chat Maven Central Circle CI License: MIT Coverage Status logo

What is Aeromock?

Aeromock is an application server that generates HTML from template files and data files. It enables speedy frontend development without the need for server side modules. Aeromock is referred to as a lightweight mock web application server.

Features

  • No need to restart the application server once it has been started.
  • HTML pages are generated from template files and their corresponding data files (JSON or YAML).
  • Supports templates that invoke methods and make use of custom tags and functions.
  • Various patterns can be rendered per template file.
  • URL rewriting can be controlled via a routing script.
  • Capable of functioning as a mock JSON API server.
  • Capable of functioning as a static content server (js, css, images).
  • Respond binary data of Protocol Buffers, and messagepack.

Getting started

Please refer to the wiki.

Requirements

  • Java >= 1.7
  • Git
  • Vagrant >= 1.5 (If using Vagrant Share)

Docker Image

Docker Hub

Supported template engines (Currently)

  • Freemarker
  • handlebars.java
  • Jade4j
  • Velocity
  • Groovy Template Engine
  • Thymeleaf

Contributors

License

See LICENSE.

Copyright © CyberAgent, Inc. All Rights Reserved.

aeromock's People

Contributors

elyzion avatar xuwei-k avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

aeromock's Issues

GString cast error at data.groovy

At data.groovy, error occurs as follows.

org.codehaus.groovy.runtime.GStringImpl cannot be cast to java.lang.String

It's impossible to cast GString to String, so GString should be casted java.lang.CharSequence.

Date型のエラー

Node.js のプロジェクトで利用しています。
new Date().toISOString() の値をクライアントに返すケースがあります。

banner.get:
  sequence: 1
  term:
    start: 2015-01-01T00:00:00.000Z
    end:   2015-01-31T00:00:00.000Z

上記 term のような記述するとエラーがでます。
yaml の Date 型とは違う書式で書いているため、文字列として認識してもらいたいのですが、Aeromock は Date 型として読み取ろうとするようです。シングルクォーテーションで括ると解決します。
これは不具合でしょうか?

2015-01-28 11:38:29 INFO    j.c.c.a.c.http.HttpRequestProcessor#execute (Rewrite Finish) /api -> /api/banner/get
scala.MatchError: Thu Jan 01 09:00:00 JST 2015 (of class java.util.Date)
    at jp.co.cyberagent.aeromock.msgpack.MessagepackValue$class.createValue(MessagepackValue.scala:16)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$.createValue(MessagepackValue.scala:44)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$$anonfun$1.apply(MessagepackValue.scala:50)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$$anonfun$1.apply(MessagepackValue.scala:49)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:252)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:252)
    at scala.collection.immutable.Map$Map2.foreach(Map.scala:137)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:252)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$.fromIterable(MessagepackValue.scala:49)
    at jp.co.cyberagent.aeromock.msgpack.MessagepackValue$class.createValue(MessagepackValue.scala:18)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$.createValue(MessagepackValue.scala:44)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$$anonfun$1.apply(MessagepackValue.scala:50)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$$anonfun$1.apply(MessagepackValue.scala:49)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:252)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:252)
    at scala.collection.immutable.HashMap$HashMap1.foreach(HashMap.scala:221)
    at scala.collection.immutable.HashMap$HashTrieMap.foreach(HashMap.scala:428)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:252)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$.fromIterable(MessagepackValue.scala:49)
    at jp.co.cyberagent.aeromock.msgpack.MessagepackValue$class.createValue(MessagepackValue.scala:18)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$.createValue(MessagepackValue.scala:44)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$$anonfun$1.apply(MessagepackValue.scala:50)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$$anonfun$1.apply(MessagepackValue.scala:49)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:252)
    at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:252)
    at scala.collection.immutable.Map$Map1.foreach(Map.scala:116)
    at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:252)
    at scala.collection.AbstractTraversable.flatMap(Traversable.scala:104)
    at jp.co.cyberagent.aeromock.msgpack.JsonMessagepackValue$.fromIterable(MessagepackValue.scala:49)
    at jp.co.cyberagent.aeromock.msgpack.MessagepackResponseService$.render(MessagepackResponseService.scala:41)
    at jp.co.cyberagent.aeromock.server.http.MessagepackResponseWriter.process(MessagepackResponseWriter.scala:36)
    at jp.co.cyberagent.aeromock.server.http.HttpRequestProcessor$class.delegate(HttpRequestProcessor.scala:22)
    at jp.co.cyberagent.aeromock.server.http.MessagepackResponseWriter.delegate(MessagepackResponseWriter.scala:16)
    at jp.co.cyberagent.aeromock.server.AeromockServerHandler.channelRead0(AeromockServerHandler.scala:32)
    at jp.co.cyberagent.aeromock.server.AeromockServerHandler.channelRead0(AeromockServerHandler.scala:15)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
    at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:86)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
    at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:161)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:333)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:319)
    at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:787)
    at io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:130)
    at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:511)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:468)
    at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:382)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:354)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at io.netty.util.concurrent.DefaultThreadFactory$DefaultRunnableDecorator.run(DefaultThreadFactory.java:137)
    at java.lang.Thread.run(Thread.java:722)
2015-01-28 11:38:29 access  HTTP    /api    500 curl/7.30.0 0.044
システムエラーです(´・ω・`)。Aeromockのバグの可能性があるので、是非この問題についてのバグレポートをお願いします。<br/>Thu Jan 01 09:00:00 JST 2015 (of class java.util.Date)

When use custom config path, occurs NPE.

e.g.)

aeromock -c ./config.yaml

occurs NPE.

java.lang.NullPointerException
  at jp.co.cyberagent.aeromock.core.script.GroovyScriptRunner.run(GroovyScriptRunner.scala:39)
  at jp.co.cyberagent.aeromock.core.http.HttpRequestProcessor$.execute(HttpRequestProcessor.scala:60)
  at jp.co.cyberagent.aeromock.server.AeromockServerHandler.channelRead0(AeromockServerHandler.scala:28)
  at jp.co.cyberagent.aeromock.server.AeromockServerHandler.channelRead0(AeromockServerHandler.scala:13)

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.