MTOM与Wiremock

发布于 2025-02-06 10:15:38 字数 4800 浏览 2 评论 0原文

我正在尝试将SOAP MTOM协议与WireMock一起使用,将一个文件附加到针对模拟服务的肥皂请求,但这给了我一些问题...

    @Test
    public void AfpToPdf() throws Exception {
        stubWireMock(FOLDER_PATH, "convertAfpToPdf", 200, RECUPERA_DOCUMENTO_FOLDER_RESPONSE_OK);
        ConvertAfpToPdfType request = createDocumentoAFPRequest();

        Testata testata = new Testata();

        ConvertAfpToPdfResponseType response = getPortNew().convertAfpToPdf(request, testata, new Holder<>());

        assertNotNull(response);
    }


    private ConvertAfpToPdfType createDocumentoAFPRequest() {
        ConvertAfpToPdfType request = new ConvertAfpToPdfType();
        ListaFileAfpType listaFileAfpType = new ListaFileAfpType();
        DataHandler dataHandlerAFP = new DataHandler(new FileDataSource("FOLD14.R00407A.NT01.D130606.AFP"));
        listaFileAfpType.setDocumentFileAfp(dataHandlerAFP);
        request.setListaFileAfp(listaFileAfpType);

        return request;

    }

protected void stubWireMock(String urlPath, String requestContained, int httpStatus, String bodyFileName) {
        wireMockRule.stubFor(post(urlPathEqualTo((BASE_URL_CONVERSIONE)))
                .withRequestBody(containing("conversioneAfp"))
                .willReturn(
                        aResponse()
                                .withStatus(200)
                                .withHeader("Content-Type", "multipart/form-data")
                                .withBody("prova")));
    }

错误

java.io.IOException: Buffer size exceeded: no line terminator
    at org.eclipse.jetty.util.ReadLineInputStream.readLine(ReadLineInputStream.java:68)
    at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:619)
    at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:491)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2374)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2326)
    at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.safelyGetRequestParts(WireMockHttpServletRequestAdapter.java:295)
    at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.getParts(WireMockHttpServletRequestAdapter.java:279)
    at com.github.tomakehurst.wiremock.verification.LoggedRequest.createFrom(LoggedRequest.java:70)
    at com.github.tomakehurst.wiremock.stubbing.InMemoryStubMappings.serveFor(InMemoryStubMappings.java:76)
    at com.github.tomakehurst.wiremock.core.WireMockApp.serveStubFor(WireMockApp.java:164)
    at com.github.tomakehurst.wiremock.http.StubRequestHandler.handleRequest(StubRequestHandler.java:50)
    at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:44)
    at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:108)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:543)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:481)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:666)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:531)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:750)

乍一看,这可能是与码头相关的 ,但我还没有找到任何关于它的东西。对我来说似乎也很奇怪,因为我只是嘲笑一项服务。您能找到一些有用的解决方案/解决方法吗?

I am trying to use soap MTOM protocol with WireMock, attaching one file to SOAP request directed to mocked service, but it gives me some problems...

    @Test
    public void AfpToPdf() throws Exception {
        stubWireMock(FOLDER_PATH, "convertAfpToPdf", 200, RECUPERA_DOCUMENTO_FOLDER_RESPONSE_OK);
        ConvertAfpToPdfType request = createDocumentoAFPRequest();

        Testata testata = new Testata();

        ConvertAfpToPdfResponseType response = getPortNew().convertAfpToPdf(request, testata, new Holder<>());

        assertNotNull(response);
    }


    private ConvertAfpToPdfType createDocumentoAFPRequest() {
        ConvertAfpToPdfType request = new ConvertAfpToPdfType();
        ListaFileAfpType listaFileAfpType = new ListaFileAfpType();
        DataHandler dataHandlerAFP = new DataHandler(new FileDataSource("FOLD14.R00407A.NT01.D130606.AFP"));
        listaFileAfpType.setDocumentFileAfp(dataHandlerAFP);
        request.setListaFileAfp(listaFileAfpType);

        return request;

    }

protected void stubWireMock(String urlPath, String requestContained, int httpStatus, String bodyFileName) {
        wireMockRule.stubFor(post(urlPathEqualTo((BASE_URL_CONVERSIONE)))
                .withRequestBody(containing("conversioneAfp"))
                .willReturn(
                        aResponse()
                                .withStatus(200)
                                .withHeader("Content-Type", "multipart/form-data")
                                .withBody("prova")));
    }

The error

java.io.IOException: Buffer size exceeded: no line terminator
    at org.eclipse.jetty.util.ReadLineInputStream.readLine(ReadLineInputStream.java:68)
    at org.eclipse.jetty.util.MultiPartInputStreamParser.parse(MultiPartInputStreamParser.java:619)
    at org.eclipse.jetty.util.MultiPartInputStreamParser.getParts(MultiPartInputStreamParser.java:491)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2374)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2326)
    at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.safelyGetRequestParts(WireMockHttpServletRequestAdapter.java:295)
    at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.getParts(WireMockHttpServletRequestAdapter.java:279)
    at com.github.tomakehurst.wiremock.verification.LoggedRequest.createFrom(LoggedRequest.java:70)
    at com.github.tomakehurst.wiremock.stubbing.InMemoryStubMappings.serveFor(InMemoryStubMappings.java:76)
    at com.github.tomakehurst.wiremock.core.WireMockApp.serveStubFor(WireMockApp.java:164)
    at com.github.tomakehurst.wiremock.http.StubRequestHandler.handleRequest(StubRequestHandler.java:50)
    at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:44)
    at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:108)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:543)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:255)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:203)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:481)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:201)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:144)
    at org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:666)
    at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:126)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:531)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:352)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:260)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:305)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:765)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:683)
    at java.lang.Thread.run(Thread.java:750)

At first glance it can be something jetty-related, but I haven't found anything online about it. It also seems strange to me, becauese I am only mocking a service. Can you find some useful solution/workaround?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灼疼热情 2025-02-13 10:15:40

我已经解决了添加此标头

Map<String, List<String>> headers = new HashMap<>();

headers.put("Content-type", Collections.singletonList("undefined;"));


bindingProvider.getRequestContext().put(MessageContext
            .HTTP_REQUEST_HEADERS, headers);

I have solved adding this header

Map<String, List<String>> headers = new HashMap<>();

headers.put("Content-type", Collections.singletonList("undefined;"));


bindingProvider.getRequestContext().put(MessageContext
            .HTTP_REQUEST_HEADERS, headers);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文