WebService开发时错误,Received content of invalid Content-Type setting:text/html - SOAP expects "text/xml"

博客讲述了在Delphi7 + MS SQL2000 + WINDOWS 2K PRO环境下开发WebService时,客户端调用出现Received content of invalid Content - Type setting:text/html - SOAP expects \text/xml\的问题,服务类型为ISAPI,解决方法是将服务器webservice.dpr文件中ISAPIThreadPool和ISAPIApp调换位置。

在开发WebService 时,客户端调用出现
Received content of invalid Content-Type setting:text/html - SOAP expects "text/xml"
服务类型为ISAPI

解决方法:将服务器webservice .dpr 文件     ISAPIThreadPool,ISAPIApp,调换一下位置.

开发环境为:
  Delphi7 + MS SQL2000+WINDOWS 2K PRO

当 Java WebServiceClient 不支持 Content-Type 为 `application/soap+xml; charset=utf-8`,仅支持 `text/xml` ,可以尝试以下几种解决方法: ### 修改请求头的 Content-Type 在创建 WebServiceClient 发送请求,手动将请求头的 Content-Type 修改为 `text/xml`。示例代码如下: ```java import javax.xml.ws.BindingProvider; import java.util.Map; // 假设 service 是你的 WebService 服务实例 MyWebService service = new MyWebService(); MyWebServicePortType port = service.getMyWebServicePort(); // 获取 BindingProvider 对象 BindingProvider bindingProvider = (BindingProvider) port; Map<String, Object> requestContext = bindingProvider.getRequestContext(); // 设置请求头的 Content-Typetext/xml requestContext.put(BindingProvider.HTTP_REQUEST_HEADERS, java.util.Collections.singletonMap("Content-Type", java.util.Collections.singletonList("text/xml"))); // 调用 WebService 方法 port.someMethod(); ``` ### 使用拦截器 通过实现 `ClientInterceptor` 来拦截请求,并修改请求头的 Content-Type。示例代码如下: ```java import org.apache.cxf.interceptor.Fault; import org.apache.cxf.message.Message; import org.apache.cxf.phase.AbstractPhaseInterceptor; import org.apache.cxf.phase.Phase; import java.util.HashMap; import java.util.Map; public class ContentTypeInterceptor extends AbstractPhaseInterceptor<Message> { public ContentTypeInterceptor() { super(Phase.PRE_PROTOCOL); } @Override public void handleMessage(Message message) throws Fault { Map<String, Object> headers = (Map<String, Object>) message.get(Message.PROTOCOL_HEADERS); if (headers == null) { headers = new HashMap<>(); message.put(Message.PROTOCOL_HEADERS, headers); } headers.put("Content-Type", "text/xml"); } } ``` 然后在创建 WebServiceClient 添加该拦截器: ```java import org.apache.cxf.endpoint.Client; import org.apache.cxf.frontend.ClientProxy; // 假设 service 是你的 WebService 服务实例 MyWebService service = new MyWebService(); MyWebServicePortType port = service.getMyWebServicePort(); // 获取 Client 对象 Client client = ClientProxy.getClient(port); client.getOutInterceptors().add(new ContentTypeInterceptor()); // 调用 WebService 方法 port.someMethod(); ``` ### 检查服务端配置 确保服务端支持 `text/xml` 的 Content-Type。如果服务端仅支持 `application/soap+xml; charset=utf-8`,则需要对服务端进行相应的配置调整,使其支持 `text/xml`。 ### 升级相关库版本 有候,问题可能是由于使用的 WebService 相关库版本过低导致的。可以尝试升级相关库到最新版本,以获取更好的兼容性。
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值