Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Version 3.5.3 of org.wiremock:wiremock-standalone references removed wiremock.org.apache.commons.io.IOUtils #2688

Closed
ksiczek opened this issue Apr 18, 2024 · 8 comments
Labels

Comments

@ksiczek
Copy link

ksiczek commented Apr 18, 2024

Proposal

I understand you have some reasons to discourage ppl from reporting ClassNotFoundException here as bugs but it seems not to be the case here. We have a PR upgrading wiremock-standalone from 3.5.2 to 3.5.3 and, suddenly, all our integration tests in all projects started failing. I had a quick look and found

Response code '500', message '[500 Server Error] during [POST] to [http://localhost:60032/xxx/yyy/zzzz] [MailgunMessagesApi#sendMessage(String,Message)]: [{
"cause1":"java.lang.ClassNotFoundException: wiremock.org.apache.commons.io.IOUtils",
"servlet":"com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet-1fb2eec",
"cause0":"java.lang.NoClassDefFoundError: wiremock/org/apache/commons/io/IOUtils",
"message":"java.lang.NoClassDefFoundError: wiremock/org/apache/commons/io/IOUtils",
"url":"/xxx/yyy/zzzz",
"status":"500"
}]'

which seems something is missing in the 3.5.3. I also ran a pkgdiff which confirmed the IOUtils had been removed (among others).

Reproduction steps

I'm not sure if any steps are needed but I was able to print the stack trace of the error which is

java.lang.NoClassDefFoundError: wiremock/org/apache/commons/io/IOUtils
	at wiremock.org.apache.commons.fileupload.util.Streams.copy(Streams.java:121)
	at wiremock.org.apache.commons.fileupload.util.Streams.copy(Streams.java:68)
	at wiremock.org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:622)
	at wiremock.org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:646)
	at wiremock.org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:664)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload$FileItemIteratorImpl.findNextItem(FileUpload.java:654)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload$FileItemIteratorImpl.<init>(FileUpload.java:633)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload.getItemIterator(FileUpload.java:84)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload.parseRequest(FileUpload.java:108)
	at com.github.tomakehurst.wiremock.http.multipart.PartParser.parseFrom(PartParser.java:54)
	at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.getParts(WireMockHttpServletRequestAdapter.java:283)
	at com.github.tomakehurst.wiremock.verification.LoggedRequest.createFrom(LoggedRequest.java:74)
	at com.github.tomakehurst.wiremock.stubbing.ServeEvent.of(ServeEvent.java:99)
	at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:58)
	at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:165)
	at wiremock.jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
	at wiremock.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
	at wiremock.org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
	at wiremock.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
	at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
	at wiremock.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
	at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
	at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
	at wiremock.org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:822)
	at wiremock.org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
	at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
	at wiremock.org.eclipse.jetty.server.Server.handle(Server.java:563)
	at wiremock.org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
	at wiremock.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
	at wiremock.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
	at wiremock.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
	at wiremock.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
	at wiremock.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
	at wiremock.org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:193)
	at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
	at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
	at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)
	at java.base/java.lang.Thread.run(Thread.java:1589)
Caused by: java.lang.ClassNotFoundException: wiremock.org.apache.commons.io.IOUtils
	at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:641)
	at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:188)
	at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
	... 46 more
java.lang.NoClassDefFoundError: wiremock/org/apache/commons/io/IOUtils
	at wiremock.org.apache.commons.fileupload.util.Streams.copy(Streams.java:121)
	at wiremock.org.apache.commons.fileupload.util.Streams.copy(Streams.java:68)
	at wiremock.org.apache.commons.fileupload.MultipartStream.readBodyData(MultipartStream.java:622)
	at wiremock.org.apache.commons.fileupload.MultipartStream.discardBodyData(MultipartStream.java:646)
	at wiremock.org.apache.commons.fileupload.MultipartStream.skipPreamble(MultipartStream.java:664)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload$FileItemIteratorImpl.findNextItem(FileUpload.java:654)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload$FileItemIteratorImpl.<init>(FileUpload.java:633)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload.getItemIterator(FileUpload.java:84)
	at com.github.tomakehurst.wiremock.http.multipart.FileUpload.parseRequest(FileUpload.java:108)
	at com.github.tomakehurst.wiremock.http.multipart.PartParser.parseFrom(PartParser.java:54)
	at com.github.tomakehurst.wiremock.servlet.WireMockHttpServletRequestAdapter.getParts(WireMockHttpServletRequestAdapter.java:283)
	at com.github.tomakehurst.wiremock.verification.LoggedRequest.createFrom(LoggedRequest.java:74)
	at com.github.tomakehurst.wiremock.stubbing.ServeEvent.of(ServeEvent.java:99)
	at com.github.tomakehurst.wiremock.http.AbstractRequestHandler.handle(AbstractRequestHandler.java:58)
	at com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet.service(WireMockHandlerDispatchingServlet.java:165)
	at wiremock.jakarta.servlet.http.HttpServlet.service(HttpServlet.java:587)
	at wiremock.org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:764)
	at wiremock.org.eclipse.jetty.servlet.ServletHandler$ChainEnd.doFilter(ServletHandler.java:1665)
	at wiremock.org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:527)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:221)
	at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1381)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:176)
	at wiremock.org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:484)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:174)
	at wiremock.org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1303)
	at wiremock.org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:129)
	at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
	at wiremock.org.eclipse.jetty.server.handler.gzip.GzipHandler.handle(GzipHandler.java:822)
	at wiremock.org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:141)
	at wiremock.org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:122)
	at wiremock.org.eclipse.jetty.server.Server.handle(Server.java:563)
	at wiremock.org.eclipse.jetty.server.HttpChannel$RequestDispatchable.dispatch(HttpChannel.java:1598)
	at wiremock.org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:753)
	at wiremock.org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:501)
	at wiremock.org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:287)
	at wiremock.org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:314)
	at wiremock.org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:100)
	at wiremock.org.eclipse.jetty.io.SelectableChannelEndPoint$1.run(SelectableChannelEndPoint.java:53)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.runTask(AdaptiveExecutionStrategy.java:421)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.consumeTask(AdaptiveExecutionStrategy.java:390)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.tryProduce(AdaptiveExecutionStrategy.java:277)
	at wiremock.org.eclipse.jetty.util.thread.strategy.AdaptiveExecutionStrategy.produce(AdaptiveExecutionStrategy.java:193)
	at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:969)
	at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.doRunJob(QueuedThreadPool.java:1194)
	at wiremock.org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:1149)

Let me know if there is something more I could do.

References

No response

@ksiczek ksiczek added the bug label Apr 18, 2024
@JanKipka
Copy link

We are facing the exact same issue on a pull request since our Renovate bot upgraded the version to 3.5.3 last night.
In our case, this only seems to be a problem when using urlMatching:
wireMockServer.stubFor(post(urlMatching("/xyz.*"))

In our integration tests we use stubFor without urlMatching before that and this seems to be no problem, only when the matcher is coming into action.

@jamfor352
Copy link

I believe it's related to this PR:
https://github.com/wiremock/wiremock/pull/2632/files

@osoykan
Copy link

osoykan commented Apr 20, 2024

Same here!

"cause1":"java.lang.ClassNotFoundException: wiremock.org.apache.commons.io.IOUtils",
"servlet":"com.github.tomakehurst.wiremock.servlet.WireMockHandlerDispatchingServlet-35636217",
"cause0":"java.lang.NoClassDefFoundError: wiremock/org/apache/commons/io/IOUtils",
"message":"java.lang.NoClassDefFoundError: wiremock/org/apache/commons/io/IOUtils",

@himangshuj
Copy link

I use the docker version of wiremock and urlmatching, I had to set the docker to 3.5.2 to pass my tests
Screenshot 2024-04-20 at 6 51 38 PM

@erdi
Copy link

erdi commented Apr 22, 2024

FWIW, I'm also affected by this issue.

@leeturner
Copy link
Contributor

Hi, many thanks for reporting this issue. We will be releasing a fix for this asap

@leeturner
Copy link
Contributor

Hi, we have just released WireMock 3.5.4 with a dependency update which will hopefully fix this. Could you give it a try and see how you get on

@ksiczek
Copy link
Author

ksiczek commented Apr 23, 2024

I had checked one service and it worked just fine. I'll update our services over the night to be 100% sure, but I'm pretty sure it will be just fine. Thank you 🤩

@ksiczek ksiczek closed this as completed Apr 23, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

7 participants