我正在使用Mule 3.4.0并使用HTTPS出站端点创建一个在JIRA服务器上调用某些RESTful API端点的流。我遇到了问题,因为Mule由于某种原因发送了一个在JIRA中导致异常的Content-Type标头值。看起来,从JIRA堆栈跟踪来看,Mule正在发送这个:
application / json,application / json; charset = UTF-8
JIRA正在使用Jersey,而Jersey无法解析该Content-Type值。以下是JIRA返回的堆栈跟踪的一部分:
引起:java.lang.IllegalArgumentException:解析媒体类型' application / json,application / json; charset = UTF-8' at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:79) at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:53) 在javax.ws.rs.core.MediaType.valueOf(MediaType.java:119) 在com.sun.jersey.server.impl.model.HttpHelper.getContentType(HttpHelper.java:89) ......还有157个 引起:java.text.ParseException:预期的分隔符&#39 ;;'而不是',' 在com.sun.jersey.core.header.reader.HttpHeaderReader.nextSeparator(HttpHeaderReader.java:117) 在com.sun.jersey.core.header.reader.HttpHeaderReader.readParameters(HttpHeaderReader.java:239) at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.valueOf(MediaTypeProvider.java:97) at com.sun.jersey.core.impl.provider.header.MediaTypeProvider.fromString(MediaTypeProvider.java:77)
我希望能够强制发送特定的Content-Type值,但我无法弄清楚如何做到这一点。看起来Mule会根据多种因素自动构建Content-Type值:
http://www.mulesoft.org/documentation/display/current/HTTP+Transport+Reference
如果端点明确设置了编码,请使用它 否则,从消息的属性Content-Type中获取它 如果未设置这些,请使用Mule Context的配置默认值。 对于Content-Type,发送消息的属性Content-Type,但使用实际的编码集。
所以我认为它使用的是入站属性Content-Type,但由于这是一个入站属性,我认为我不能在流中修改/删除它。我尝试修改/删除Content-Type属性无效。我只能修改/删除出站的Content-Type属性,这似乎对我的出站HTTP请求没有帮助。
有关如何控制Content-Type值或修复它的任何信息,我们将不胜感激。
答案 0 :(得分:0)
我花了一些时间使用调试和断点,发现在第一个HTTPS出站端点之后,有一个" Content-Type" 变量(不入站或出站属性)正在设置为" application / json"。我不知道为什么会这样。对于HTTP传输或HTTP端点,我在文档中没有看到任何内容。如果有人可以指出有关那里发生的事情的文档会很棒。
作为一项实验,在我的下一个HTTPS出站端点之前,我添加了一个Variable变换器来删除" Content-Type"变量。这解决了问题!
因此,似乎Mule出于某种原因将#34; Content-Type" 变量,其中包含我在HTTP出站端点中指定的Content-Type值,从而生成" application / json,application / json;字符集= UTF-8"
我不得不在每个HTTPS出站端点之后放置它以继续删除变量: