Hi guys,
I got stuck on this issue. I get exceptions when I call a stub that has been created using Java and has a fixed delay.
stubFor(get(urlMatching(MOCK_PATH)).willReturn(aResponse()
.withHeader("Content-Type", "application/json")
.withBodyFile(payload)
.withFixedDelay(2000)));
is causing an exception:
2016-02-05 16:23:25,262 ERROR [WireMock] (15105658@qtp-89448984-4) /mock/ java.lang.RuntimeException: wiremock.org.mortbay.jetty.EofException at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.writeAndTranslateExceptions(Jetty6HandlerDispatchingServlet.java:134) at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.applyResponse(Jetty6HandlerDispatchingServlet.java:124) at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.service(Jetty6HandlerDispatchingServlet.java:103) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at wiremock.org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at wiremock.org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) at wiremock.org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at wiremock.org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at wiremock.org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at wiremock.org.mortbay.jetty.Server.handle(Server.java:326) at wiremock.org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at wiremock.org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:928) at wiremock.org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) at wiremock.org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) at wiremock.org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at wiremock.org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at com.github.tomakehurst.wiremock.jetty6.DelayableSocketConnector$1.run(DelayableSocketConnector.java:49) at wiremock.org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: wiremock.org.mortbay.jetty.EofException at wiremock.org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:791) at wiremock.org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:569) at wiremock.org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1012) at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.writeAndTranslateExceptions(Jetty6HandlerDispatchingServlet.java:131) ... 17 more Caused by: java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at wiremock.org.mortbay.io.ByteArrayBuffer.writeTo(ByteArrayBuffer.java:368) at wiremock.org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:129) at wiremock.org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:161) at wiremock.org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:714) ... 20 more 2016-02-05 16:23:28,013 ERROR [WireMock] (87923312@qtp-89448984-3) /mock/ java.lang.RuntimeException: wiremock.org.mortbay.jetty.EofException at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.writeAndTranslateExceptions(Jetty6HandlerDispatchingServlet.java:134) at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.applyResponse(Jetty6HandlerDispatchingServlet.java:124) at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.service(Jetty6HandlerDispatchingServlet.java:103) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at wiremock.org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) at wiremock.org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:401) at wiremock.org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:766) at wiremock.org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) at wiremock.org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) at wiremock.org.mortbay.jetty.Server.handle(Server.java:326) at wiremock.org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) at wiremock.org.mortbay.jetty.HttpConnection$RequestHandler.content(HttpConnection.java:945) at wiremock.org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:756) at wiremock.org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:218) at wiremock.org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) at wiremock.org.mortbay.jetty.bio.SocketConnector$Connection.run(SocketConnector.java:228) at com.github.tomakehurst.wiremock.jetty6.DelayableSocketConnector$1.run(DelayableSocketConnector.java:49) at wiremock.org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) Caused by: wiremock.org.mortbay.jetty.EofException at wiremock.org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:791) at wiremock.org.mortbay.jetty.AbstractGenerator$Output.flush(AbstractGenerator.java:569) at wiremock.org.mortbay.jetty.HttpConnection$Output.flush(HttpConnection.java:1012) at com.github.tomakehurst.wiremock.jetty6.Jetty6HandlerDispatchingServlet.writeAndTranslateExceptions(Jetty6HandlerDispatchingServlet.java:131) ... 17 more Caused by: java.net.SocketException: Software caused connection abort: socket write error at java.net.SocketOutputStream.socketWrite0(Native Method) at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:109) at java.net.SocketOutputStream.write(SocketOutputStream.java:153) at wiremock.org.mortbay.io.ByteArrayBuffer.writeTo(ByteArrayBuffer.java:368) at wiremock.org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:129) at wiremock.org.mortbay.io.bio.StreamEndPoint.flush(StreamEndPoint.java:161) at wiremock.org.mortbay.jetty.HttpGenerator.flush(HttpGenerator.java:714) ... 20 more
Same configuration using JSON and Postman is working with no issues.
And If I remove the delay the exception goes away.
Let me know if I am doing anything wrong here or there is an actual problem.
Thank you in advance!
Vlad
Alternatively I'd suggest using tcpdump if you're on osx or linux to look at the raw exchange between the client and server.
POST /mock/ HTTP/1.1
Content-Length: 659
Content-Type: application/x-www-form-urlencoded; charset=ISO-8859-1
Host: localhost:8089
Connection: Keep-Alive
body
HTTP/1.1 200 OK
Content-Type: application/x-www-form-urlencoded
Transfer-Encoding: chunked
Server: Jetty(6.1.x)
8C4
I find it odd that a read or connect timeout would have any effect in the scenario you captured with rawcap since wiremock managed to return a response.
<dependency>
<groupId>com.github.tomakehurst</groupId>
<artifactId>wiremock-standalone</artifactId>
<version>2.0.8-beta</version>
</dependency>
Without changing the way wiremock is being imported, instantiated and used, when I run the code I am getting an exception:
Caused by: java.lang.ClassFormatError: Absent Code attribute in method that is not native or abstract in class file javax/servlet/DispatcherType at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(ClassLoader.java:760) at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) at java.net.URLClassLoader.access$100(URLClassLoader.java:73) at java.net.URLClassLoader$1.run(URLClassLoader.java:368) at java.net.URLClassLoader$1.run(URLClassLoader.java:362) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:361) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) at com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory.buildHttpServer(JettyHttpServerFactory.java:31) at com.github.tomakehurst.wiremock.WireMockServer.<init>(WireMockServer.java:106) ... 28 more at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:479) at org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:352) at org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:158) at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeProvider(AbstractSurefireMojo.java:958) at org.apache.maven.plugin.surefire.AbstractSurefireMojo.executeAfterPreconditionsChecked(AbstractSurefireMojo.java:822) at org.apache.maven.plugin.surefire.AbstractSurefireMojo.execute(AbstractSurefireMojo.java:720) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:134) ... 21 more [ERROR] [ERROR] Re-run Maven using the -X switch to enable full debug logging.
Do you know if the latest version is backwards compatible? Should I use it in a different way compared to 1.58?
Thanks!
Vlad
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>7.0</version>
</dependency>
Is there any chance you have another depenency that's pulling an incompatible servlet api transitively?
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
</dependency>
at java.lang.Class.forName(Class.java:264)
at com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory.getServerConstructor(JettyHttpServerFactory.java:35)
at com.github.tomakehurst.wiremock.jetty9.JettyHttpServerFactory.<clinit>(JettyHttpServerFactory.java:30)
at com.github.tomakehurst.wiremock.core.WireMockConfiguration.<init>(WireMockConfiguration.java:78)
...
using wiremock-jre8-standalone 2.24.1. The exception comes when getServerConstructor attempts to get the class for name "com.github.tomakehurst.wiremock.jetty94.Jetty94HttpServer". I can fix it with a dependency on javaee-api as before:
<dependency> <groupId>javax</groupId> <artifactId>javaee-api</artifactId> <version>8.0</version> <scope>test</scope> </dependency>