执行http:set-cookie时,Tomcat中的NoSuchMethodError嵌入了MULE

时间:2014-06-21 08:13:22

标签: mule mule-studio

在Tomcat 7.0.27中运行Mule ESB 3.2.1作为嵌入式服务器(使用webapp-runner执行)时,在使用Http端点执行流程期间,在将响应发送回调用者时,会引发异常:

java.lang.NoSuchMethodError: org.apache.tomcat.util.http.ServerCookie.appendCookieValue(Ljava/lang/StringBuffer;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)V

以下例外:

org.mule.api.MuleRuntimeException: Connector that caused exception is: connector.http.mule.default

    at org.mule.transport.AbstractConnector.handleWorkException(AbstractConnector.java:2034)

    at org.mule.transport.AbstractConnector.workCompleted(AbstractConnector.java:1998)

    at org.mule.work.WorkerContext.run(WorkerContext.java:369)

    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)

    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)

    at java.lang.Thread.run(Thread.java:662)

Caused by: java.lang.NoSuchMethodError: org.apache.tomcat.util.http.ServerCookie.appendCookieValue(Ljava/lang/StringBuffer;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;IZ)V

    at org.mule.transport.http.CookieHelper.formatCookieForASetCookieHeader(CookieHelper.java:310)

    at org.mule.transport.http.transformers.MuleMessageToHttpResponse.createResponse(MuleMessageToHttpResponse.java:261)

    at org.mule.transport.http.transformers.MuleMessageToHttpResponse.transformMessage(MuleMessageToHttpResponse.java:90)

    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:145)

    at org.mule.transformer.AbstractMessageTransformer.transform(AbstractMessageTransformer.java:93)

    at org.mule.DefaultMuleMessage.applyAllTransformers(DefaultMuleMessage.java:1387)

    at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1348)

    at org.mule.DefaultMuleMessage.applyTransformers(DefaultMuleMessage.java:1331)

    at org.mule.transport.AbstractMessageReceiver.applyResponseTransformers(AbstractMessageReceiver.java:235)

    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:214)

    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:163)

    at org.mule.transport.AbstractMessageReceiver.routeMessage(AbstractMessageReceiver.java:150)

    at org.mule.transport.http.HttpMessageReceiver$HttpWorker.doRequest(HttpMessageReceiver.java:299)

    at org.mule.transport.http.HttpMessageReceiver$HttpWorker.processRequest(HttpMessageReceiver.java:258)

    at org.mule.transport.http.HttpMessageReceiver$HttpWorker.run(HttpMessageReceiver.java:163)

    at org.mule.work.WorkerContext.run(WorkerContext.java:310)

2 个答案:

答案 0 :(得分:0)

如果您使用的是Mule 3.2.1,则无法使用http:response-builder。这个功能就在那里。这就是你无法使用它的原因。

检查出来:

答案 1 :(得分:0)

我也有这个问题。在此处查看答案。

Mule ESB does not work with cookie

简而言之,请确保为m子3.7.0提供了组:“ org.apache.tomcat”,名称:“土狼”,版本:“ 6.0.44”。

在您的情况下,您应该拥有另一个库- tomcat-util 5.5.23 ,因为您使用的是不同版本的m子 3.2.1

compile group: 'tomcat', name: 'tomcat-util', version: '5.5.23'

enter image description here

当您使用SpringBoot时,它会验证某些库的版本(取决于Spring和Mule的版本),因此您将收到此错误。您拥有类ServerCookie,但是方法appendCookieValue将消失!

解决方案-使用库。或其他解决方法,编写您自己的其中一个失败的类的版本,并确保classloader将使用您的类的版本。 (同样,用相同的名称和包创建一个类来修复错误-是一件危险且不好的事情...)