Question about setting fixedDelayMilliseconds in response using parameter from request

823 views
Skip to first unread message

dragon liu

unread,
Sep 6, 2017, 6:50:51 PM9/6/17
to wiremock-user
Hi,

Wish you all have a great day!

I am trying to setup a mock that takes in a parameter from request and use it as a fixedDelay in the response using standalone jar.

If i just use that parameter ("time") in response body:

{
    "request": {
        "method": "ANY",
        "urlPath": "/delayed"
    },
    "response": {
        "status": 200,
        "body": "{{request.query.time}}",
        "transformers": ["response-template"]
    }
}
everything's fine.


However, since fixedDelayMilliseconds is of int value, i cannot just use something like:

{
    "request": {
        "method": "ANY",
        "urlPath": "/delayed"
    },
    "response": {
        "status": 200,
        "fixedDelayMilliseconds": "{{request.query.time}}",
        "transformers": ["response-template"]
    }
}

It will return error :
Exception in thread "main" wiremock.com.fasterxml.jackson.databind.exc.InvalidFormatException: Can not deserialize value of type java.lang.Integer from String "{{request.query.time}}": not a valid Integer value
 at [Source: {
    "request": {
        "method": "ANY",
        "urlPath": "/delayed"
    },
    "response": {
        "status": 200,
        "fixedDelayMilliseconds": "{{request.query.time}}",
        "transformers": ["response-template"]
    }
}
; line: 8, column: 35] (through reference chain: com.github.tomakehurst.wiremock.stubbing.StubMapping["response"]->com.github.tomakehurst.wiremock.http.ResponseDefinition["fixedDelayMilliseconds"])
at wiremock.com.fasterxml.jackson.databind.exc.InvalidFormatException.from(InvalidFormatException.java:74)
at wiremock.com.fasterxml.jackson.databind.DeserializationContext.weirdStringException(DeserializationContext.java:1410)
at wiremock.com.fasterxml.jackson.databind.DeserializationContext.handleWeirdStringValue(DeserializationContext.java:926)
at wiremock.com.fasterxml.jackson.databind.deser.std.StdDeserializer._parseInteger(StdDeserializer.java:451)
at wiremock.com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer.deserialize(NumberDeserializers.java:301)
at wiremock.com.fasterxml.jackson.databind.deser.std.NumberDeserializers$IntegerDeserializer.deserialize(NumberDeserializers.java:279)
at wiremock.com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeWithErrorWrapping(BeanDeserializer.java:511)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializer._deserializeUsingPropertyBased(BeanDeserializer.java:400)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializerBase.deserializeFromObjectUsingNonDefault(BeanDeserializerBase.java:1191)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializer.deserializeFromObject(BeanDeserializer.java:314)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:148)
at wiremock.com.fasterxml.jackson.databind.deser.SettableBeanProperty.deserialize(SettableBeanProperty.java:504)
at wiremock.com.fasterxml.jackson.databind.deser.impl.MethodProperty.deserializeAndSet(MethodProperty.java:104)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializer.vanillaDeserialize(BeanDeserializer.java:276)
at wiremock.com.fasterxml.jackson.databind.deser.BeanDeserializer.deserialize(BeanDeserializer.java:140)
at wiremock.com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3814)
at wiremock.com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2858)
at com.github.tomakehurst.wiremock.common.Json.read(Json.java:48)
at com.github.tomakehurst.wiremock.stubbing.StubMapping.buildFrom(StubMapping.java:68)
at com.github.tomakehurst.wiremock.standalone.JsonFileMappingsSource.loadMappingsInto(JsonFileMappingsSource.java:82)
at com.github.tomakehurst.wiremock.core.WireMockApp.loadMappingsUsing(WireMockApp.java:151)
at com.github.tomakehurst.wiremock.core.WireMockApp.loadDefaultMappings(WireMockApp.java:147)
at com.github.tomakehurst.wiremock.core.WireMockApp.<init>(WireMockApp.java:84)
at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:70)
at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.run(WireMockServerRunner.java:65)
at com.github.tomakehurst.wiremock.standalone.WireMockServerRunner.main(WireMockServerRunner.java:113)

Not sure how I can set it up correctly to make this work.

Could someone please help me to figure this out?  Thx!


Tom Akehurst

unread,
Sep 7, 2017, 6:43:28 AM9/7/17
to wiremock-user
Unfortunately this isn't possible using the response templating feature at the moment. The best solution is probably to write a ResponseDefinitionTransformer extension class that sets the delay as you require.

dragon liu

unread,
Sep 7, 2017, 11:13:13 AM9/7/17
to wiremock-user
Ok, got it. Thank you for the reply!

Tom Akehurst於 2017年9月7日星期四 UTC-4上午6時43分28秒寫道:
Reply all
Reply to author
Forward
0 new messages