文档章节

Java调用.Net WebService 发生异常:服务器未能识别 HTTP 头 SOAPA...

Leafe
 Leafe
发布于 2011/10/04 19:32
字数 410
阅读 1.1K
收藏 0

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

这可能是 Client 端没有正确的按照 WSDL 建立反项工程的原因。

我们的WSDL地址是:WEB服务地址+?wsdl ,如:http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx?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 请求和响应示例(部分代码)要求的格式是:

......
<soap:Body>
    <getDetailInfoByTrainCode xmlns="http://WebXml.com.cn/">
      <TrainCode>string</TrainCode>
      <UserID>string</UserID>
    </getDetailInfoByTrainCode>
  </soap:Body>
......



//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"));






其他参考相关链接:
Soap action is empty

© 著作权归作者所有

Leafe
粉丝 2
博文 7
码字总数 4708
作品 0
徐汇
技术主管
私信 提问
加载中

评论(1)

稻草鸟人
稻草鸟人
为什么你这里的url后面没有加上wsdl呢?
call.setTargetEndpointAddress(new URL(
"http://www.webxml.com.cn/WebServices/TrainTimeWebService.asmx"));
请指教啊
Java调用.NET webservice方法的几种方式

一. 使用axis1.x调用webservice方法 Axis的最常用版本:1.4和2.0版本。以下为1.4版本 核心代码: // webserviceURL serviceurl = "http://vip.cxcod.com/PodApi/GetPodStr.asmx?wsdl"; Ser......

钱佳庆
2011/10/04
3.8K
2
解决办法:服务器未能识别 HTTP 标头 SOAPAction 的值

转自:http://www.cnsaturn.com/logs/2009/05/26/http-header-soapaction-value-cannot-recognized-by-server-errors 本文主要探讨跨平台调用Web Service出现:"服务器未能识别 HTTP 标头 SO......

slimboy123
2009/07/20
0
0
SpringBoot | 第三十四章:CXF构建WebService服务

前言 上一章节,讲解了如何使用构建服务。其实,创建的方式有很多的,今天来看看如何使用来构建及调用服务。 一点知识 何为Apache-CXF 是一个开源的框架,帮助您利用编程 API 来构建和开发S...

oKong
2018/11/12
358
0
综合技术 --webservice理解

目前,几乎所有的应用程序都需要与运行在其它异构平台上的应用程序进行数据交换,这就需要一个接口来满足两个不同的平台。webservice能满足客户端和服务器之间通过http进行通信,无论这两个程...

求是科技
2015/04/06
107
0
jaxws-webservice编程(第一个记录)

随着近几年来,SOA,EAI等架构体系的日渐成熟,Webservice越来越炽手可热,尤其是在企业做异质平台整合时成为了首选的技术。 Java的Webservice技术更是层出不穷,比较流行的有:Axis2,Sprin...

heroShane
2014/02/28
2.3K
0

没有更多内容

加载失败,请刷新页面

加载更多

web前端入门很容易,全栈却很难,为什么每个程序员都那么说?

互联网行业无疑是当今社会颇具包容性且发展前景广阔的一个行业,如果单纯只是学习前端编程语言、而不懂后端编程语言,也不能算作是优秀的前端工程师。在成为一个优秀的前端工程师的道路上,充...

梦想编程
9分钟前
7
0
E.T. 团队:TiDB 开源生态宇宙构造者|PingCAP 招聘季

Welcome ! The Builders ! 这是一篇招募 TiDB 生态宇宙创造者、工程师、看管者的文章。 众所周知,PingCAP 一直坚定地拥抱「开源」,“自由灵魂”、“人文主义” 的信仰也深植每个 PingCAPe...

TiDB
20分钟前
10
0
面试刷题29:mysql事务隔离实现原理?

mysql的事务是innodb存储引擎独有的,myisam存储引擎不支持事务。 事务最经典的例子就是转账了,事务要保证的是一组数据库的操作要么全部成功,要么全部失败。是为了保证高并发场景下数据的正...

李福春carter
21分钟前
8
0
Java并发编程:volatile关键字解析

volatile这个关键字可能很多朋友都听说过,或许也都用过。在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生...

riseee
24分钟前
10
0
Parallels Desktop 15 for Mac 稳定版

Parallels Desktop 15是功能最强大灵活度最高的虚拟化方案,无需重启即可在同一台电脑上随时访问Windows和Mac两个系统上的众多应用程序。从仅限于PC的游戏到生产力软件,Parallels Desktop 1...

麦克W
25分钟前
10
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部