我正在从 web 服务客户端(代码由 IBM RAD 7.5 生成)向主机发送 SOAP 消息,并且它带有 web 服务故障,并且主机日志中的消息读取为“prolog 中不允许的内容”。当我使用 SoapUI 或简单的 apache HttpClient 测试客户端发送相同的内容时,主机会接收并处理消息,并得到预期的响应。
据我所知,不同之处在于正在发送的 HTTP 标头。
RAD 生成的客户端:
POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1 主机:http://host.com/ws/mycompany/webservice/SomeWebServiceName/soap11 接受:application/soap+xml,multipart/related,text/* 用户代理:IBM WebServices/1.0 缓存控制:无缓存 Pragma:无缓存 SOAPAction:“” 连接:保持活动 保存连接:7814631881345232300226 IBM-WAS-CLIENT:是的 内容类型:多部分/相关;边界=MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773;类型=“应用程序/xop+xml”;开始=“”;开始信息=“文本/xml” 内容长度:2553 日期:格林威治标准时间 2012 年 8 月 17 日星期五 19:38:20 --MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773 内容类型:application/xop+xml;字符集=UTF-8;类型=“文本/xml” 内容传输编码:二进制 内容 ID: <soapenv:信封... --MIMEBoundaryurn_uuid_E54EE0B5F8ED486B811345232300773--
对于 SoapUI:
POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1 接受编码:gzip,deflate 内容类型:文本/xml;charset=UTF-8 SOAPAction:“” 内容长度:2732 主机:本地主机:9111 连接:保持活动 用户代理:Apache-HttpClient/4.1.1 (java 1.5) <soapenv:信封...
还有一个使用 apache HttpClient 实现的非常简单的客户端:
POST /ws/mycompany/webservice/SomeWebServiceName/soap11 HTTP/1.1 用户代理:Jakarta Commons-HttpClient/3.1 传输编码:分块 主机:本地主机:9111 8da <soapenv:信封... 0
据我所知,这三者之间的区别在于,由 RAD 生成的客户端生成的请求具有内容类型“多部分”并定义了 MIME 边界。我无权访问主机系统,但主机似乎无法处理多部分消息。
有没有办法强制 IBM 客户端代码像 SoapUI 或 HttpClient 一样简单地发送消息?