WSO2 ESB将servlet响应处理为二进制

时间:2014-08-07 13:02:25

标签: servlets soap wso2 wso2esb

我在inSecuence中有一个肥皂来休息转换,为了测试我使用soap-ui作为cliente和一个用eclipse和axis在本地开发的servlet。到目前为止一切顺利,一切正常。

但是......当我将http端点更改为真正的servlet时,我得到了响应为二进制

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"> 
<soapenv:Body> 
  <axis2ns1073:binary xmlns:axis2ns1073="...">T0z=</axis2ns1073:binary> 
</soapenv:Body> 
</soapenv:Envelope> 

当我用任何浏览器(例如Firefox)使用相同的URL调用servlet时,我得到“NOK”

这意味着:

  • 使用本地模拟
  • 服务正常
  • 服务在调用真实servlet时将数据作为二进制文件返回
  • 像firefox这样的浏览器可以在调用真实servlet时正确处理消息

我使用tcpmon来查看mock的响应和真实servlet的响应之间的差异。主要区别在于真正的servlet使用传输编码进行响应:chunked

¿我能做些什么来正确对待反应?

enter image description here

1 个答案:

答案 0 :(得分:1)

您的servlet在响应中是否有“Content-Type”标头?

正如我在附件中看到的那样,Content-Type标头丢失了。当响应中缺少Content-Type标头时,ESB将Content-Type假定为二进制并将响应解析为二进制。

因此,为了解决您的问题,请更新您的servlet以在响应中包含Content-Type标头,并使用正确的Content-Type,例如:text / plain并再次尝试调用。它应该工作。

如果您无法更改servlet,则需要在缺少Content Type标头时将ESB配置为使用默认的Content Type。您可以在http://charithaka.blogspot.sg/2014/07/how-to-enforce-default-http-content.html

中找到有关如何操作的详细信息

希望这有帮助!

谢谢和问候,

Harshana