博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java调用.Net WebService 发生异常:服务器未能识别 HTTP 头 SOAPA...
阅读量:6803 次
发布时间:2019-06-26

本文共 1484 字,大约阅读时间需要 4 分钟。

  hot3.png

使用XFire方式调用这个Web服务,但出现了异常:SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值。

这可能是 Client 端没有正确的按照 WSDL 建立反项工程的原因。
我们的WSDL地址是:WEB服务地址+?wsdl ,如:
SOAPAction 这个字段的设置规则也在 WSDL 里可以找到,你在 WSDL 里找一下:<soap:operation soapAction=
dot net 的默认soapaction 是和发布的Namespace/方法名,如上面的WSDL:<soap:operation soapAction="http://WebXml.com.cn/getVersionTime" style="document" />
而java写的部分代码产生的soapaction="" 
一般可以尝试在http header里将SOAPAction 设置为.NET 的 WEB服务的Namespace :http://WebXml.com.cn。如果找不到,尝试着在http header里将SOAPAction 设置为""(空),但一定要设置,如果你用的是 XFire 理论上是不用设置,可能是你的 Client 端没有正确的按照 WSDL 建立反项工程的原因,不过 XFire 应该也可以手动设置: Client.setProperty("SOAPAction",""); 
另外,.net 的 webservice 指定了namespace,我们的服务Namespace是:http://WebXml.com.cn/,但是java调用时没有指定,如果我们仔细查看.net webservice 的soap 请求格式时会发现,下面是一个 SOAP 请求和响应示例(部分代码)要求的格式是:

......
    
      
string
      
string
    
  
......

//JAVA 调用原来代码:

......try{Service service = new Service();   Call call = (Call) service.createCall();   call.setOperationName(new QName("", "getDetailInfoByTrainCode"));   call.addParameter("TrainCode", XMLType.XSD_STRING, ParameterMode.IN);   call.addParameter("UserID", XMLType.XSD_STRING, ParameterMode.IN);   call.setTargetEndpointAddress(new URL(       "http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx")); ......}

//JAVA 代码修改成以下代码:

   call.setOperationName(new QName("http://WebXml.com.cn/", "GetTestQuestions"));

其他参考相关链接:

转载于:https://my.oschina.net/leafe/blog/32920

你可能感兴趣的文章
电路的耦合方式
查看>>
JS 创建对象的7种方法(一)
查看>>
decode
查看>>
Python Socket套接字
查看>>
source from Other`s
查看>>
算法笔记--归并排序
查看>>
iOS --开发笔记:关于手机号码的判断【转】
查看>>
多标签分类
查看>>
Python基础教程(第2版 修订版) pdf
查看>>
python实现常见排序算法
查看>>
listctrl加入图标
查看>>
gem 更新源设置,ruby安装
查看>>
码农们:我们才是真正的土豪!
查看>>
[Node.js]NPM 使用
查看>>
Setup Factory打包winform程序
查看>>
window下php5.6-x64-ts可用php_redis.dll文件
查看>>
namenode 格式化错误 Unable to check if JNs are ready for formatting
查看>>
通达信公式-均线向上
查看>>
时间复杂度和空间复杂度
查看>>
NRF52832 能烧写代码 但是不运行 ,是因为没有烧写协议栈
查看>>