首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Wiremock返回某些媒体文件时导致500的全局响应模板

Wiremock返回某些媒体文件时导致500的全局响应模板
EN

Stack Overflow用户
提问于 2022-04-01 14:14:03
回答 1查看 308关注 0票数 0

我有一个测试项目,需要启用全局响应模板,因为许多模拟的响应包含动态内容。

问题是,我还需要返回一些响应的图像/视频,这似乎与一些图像/视频的响应模板(但不是全部)没有很好的配合。

似乎当它试图返回视频响应时,它试图将模板应用到图像文件中,并抱怨响应中存在无效字符,至少我认为这个堆栈是这样告诉我的(它没有显示在wiremock服务器日志中,它封装在HTML主体中并作为响应返回)。

代码语言:javascript
运行
复制
<tr><th>STATUS:</th><td>500</td></tr>
<tr><th>MESSAGE:</th><td>wiremock.com.google.common.util.concurrent.UncheckedExecutionException: wiremock.com.github.jknack.handlebars.HandlebarsException: inline@1756a128:1:2: found: &apos;?&apos;
{{?-)2?}?/&gt;4?????{?E??????????????????%???z??x???S????2z???{?;??fs??Wn??e?wGwr?????(t+?[??????n??ww}?{&lt;)?U??t??
  ^
</td></tr>
<tr><th>SERVLET:</th><td>com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet-6e20b53a</td></tr>
<tr><th>CAUSED BY:</th><td>wiremock.com.google.common.util.concurrent.UncheckedExecutionException: wiremock.com.github.jknack.handlebars.HandlebarsException: inline@1756a128:1:2: found: &apos;?&apos;
{{?-)2?}?/&gt;4?????{?E??????????????????%???z??x???S????2z???{?;??fs??Wn??e?wGwr?????(t+?[??????n??ww}?{&lt;)?U??t??
  ^
</td></tr>
<tr><th>CAUSED BY:</th><td>wiremock.com.github.jknack.handlebars.HandlebarsException: inline@1756a128:1:2: found: &apos;?&apos;
{{?-)2?}?/&gt;4?????{?E??????????????????%???z??x???S????2z???{?;??fs??Wn??e?wGwr?????(t+?[??????n??ww}?{&lt;)?U??t??
  ^
</td></tr>
</table>
<h3>Caused by:</h3><pre>wiremock.com.google.common.util.concurrent.UncheckedExecutionException: wiremock.com.github.jknack.handlebars.HandlebarsException: inline@1756a128:1:2: found: &apos;?&apos;
{{?-)2?}?/&gt;4?????{?E??????????????????%???z??x???S????2z???{?;??fs??Wn??e?wGwr?????(t+?[??????n??ww}?{&lt;)?U??t??
  ^

    at wiremock.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2051)
    at wiremock.com.google.common.cache.LocalCache.get(LocalCache.java:3962)
    at wiremock.com.google.common.cache.LocalCache$LocalManualCache.get(LocalCache.java:4859)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer.getTemplate(ResponseTemplateTransformer.java:242)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer.transform(ResponseTemplateTransformer.java:158)
    at com.github.tomakehurst.wiremock.stubbing.InMemoryStubMappings.applyTransformations(InMemoryStubMappings.java:101)
    at com.github.tomakehurst.wiremock.stubbing.InMemoryStubMappings.serveFor(InMemoryStubMappings.java:80)
    at com.github.tomakehurst.wiremock.core.WireMockApp.serveStubFor(WireMockApp.java:209)
    at com.github.tomakehurst.wiremock.http.StubRequestHandler.handleRequest(StubRequestHandler.java:56)
    at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:64)
    at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:121)
    at wiremock.javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at wiremock.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:799)
    at wiremock.org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1626)
    at wiremock.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:548)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
    at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1435)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
    at wiremock.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:501)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
    at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1350)
    at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at wiremock.org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:735)
    at wiremock.org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
    at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
    at wiremock.org.eclipse.jetty.server.Server.handle(Server.java:516)
    at wiremock.org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:388)
    at wiremock.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:633)
    at wiremock.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:380)
    at wiremock.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:277)
    at wiremock.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
    at wiremock.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:105)
    at wiremock.org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
    at wiremock.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
    at wiremock.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
    at wiremock.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
    at wiremock.org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
    at wiremock.org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:383)
    at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:882)
    at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1036)
    at java.lang.Thread.run(Thread.java:748)
Caused by: wiremock.com.github.jknack.handlebars.HandlebarsException: inline@1756a128:1:2: found: &apos;?&apos;
{{?-)2?}?/&gt;4?????{?E??????????????????%???z??x???S????2z???{?;??fs??Wn??e?wGwr?????(t+?[??????n??ww}?{&lt;)?U??t??
  ^

    at wiremock.com.github.jknack.handlebars.internal.HbsErrorReporter.syntaxError(HbsErrorReporter.java:93)
    at wiremock.com.github.jknack.handlebars.internal.antlr.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41)
    at wiremock.com.github.jknack.handlebars.internal.HbsParserFactory$2.notifyListeners(HbsParserFactory.java:136)
    at wiremock.com.github.jknack.handlebars.internal.antlr.Lexer.nextToken(Lexer.java:144)
    at wiremock.com.github.jknack.handlebars.internal.antlr.BufferedTokenStream.fetch(BufferedTokenStream.java:169)
    at wiremock.com.github.jknack.handlebars.internal.antlr.BufferedTokenStream.sync(BufferedTokenStream.java:152)
    at wiremock.com.github.jknack.handlebars.internal.antlr.BufferedTokenStream.consume(BufferedTokenStream.java:136)
    at wiremock.com.github.jknack.handlebars.internal.antlr.atn.ParserATNSimulator.execATN(ParserATNSimulator.java:537)
    at wiremock.com.github.jknack.handlebars.internal.antlr.atn.ParserATNSimulator.adaptivePredict(ParserATNSimulator.java:393)
    at wiremock.com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:215)
    at wiremock.com.github.jknack.handlebars.internal.HbsParser.template(HbsParser.java:164)
    at wiremock.com.github.jknack.handlebars.internal.HbsParserFactory$1.parse(HbsParserFactory.java:86)
    at wiremock.com.github.jknack.handlebars.cache.NullTemplateCache.get(NullTemplateCache.java:54)
    at wiremock.com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:513)
    at wiremock.com.github.jknack.handlebars.Handlebars.compileInline(Handlebars.java:473)
    at wiremock.com.github.jknack.handlebars.Handlebars.compileInline(Handlebars.java:453)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.HandlebarsOptimizedTemplate.uncheckedCompileTemplate(HandlebarsOptimizedTemplate.java:54)
    at com.github.tomakehurst.wirem
100  9076  100  9076    0     0  55629      0 --:--:-- --:--:-- --:--:-- 55680
ock.extension.responsetemplating.HandlebarsOptimizedTemplate.&lt;init&gt;(HandlebarsOptimizedTemplate.java:49)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer$3.call(ResponseTemplateTransformer.java:245)
    at com.github.tomakehurst.wiremock.extension.responsetemplating.ResponseTemplateTransformer$3.call(ResponseTemplateTransformer.java:242)
    at wiremock.com.google.common.cache.LocalCache$LocalManualCache$1.load(LocalCache.java:4864)
    at wiremock.com.google.common.cache.LocalCache$LoadingValueReference.loadFuture(LocalCache.java:3529)
    at wiremock.com.google.common.cache.LocalCache$Segment.loadSync(LocalCache.java:2278)
    at wiremock.com.google.common.cache.LocalCache$Segment.lockedGetOrLoad(LocalCache.java:2155)
    at wiremock.com.google.common.cache.LocalCache$Segment.get(LocalCache.java:2045)
    ... 40 more
</pre>

下面是我用来上传文件的代码:

代码语言:javascript
运行
复制
byte[] attachmentVideo = FileUtils.loadFileBytes("classpath:payloads/video.mp4");
        response = given().body(attachmentVideo).contentType("video/mp4").put(wiremockUrl() + FILES_ENDPOINT + "video.mp4");
        assertThat(response.getStatusCode(), is(HttpStatus.SC_OK));

以下是返回文件的代码:

代码语言:javascript
运行
复制
        wiremock.register(WireMock.get(WireMock.urlMatching(ATTACHMENT_VIDEO_REGEX))
                .willReturn(aResponse().withBodyFile("video.mp4").withHeader("Content-Type", "video/mp4")
                        .withStatus(200).withFixedDelay(VIDEO_RESPONSE_TIME_MS)));

一旦我关闭了全局响应模板,视频就会像预期的那样返回。

EN

回答 1

Stack Overflow用户

发布于 2022-04-04 13:23:08

这里您的唯一选择是在启动时通过内置的.global(false)切换到本地响应模板,并将.withTransformers("response-template")添加到需要它的存根中。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71708345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档