文档章节

今天被这么问题搞的头晕 no SOAPAction header!

vachel_lin
 vachel_lin
发布于 2015/07/31 16:16
字数 329
阅读 262
收藏 0

错误信息:

<?xml version="1.0" encoding="utf-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

soapenv:Body soapenv:Fault <faultcode xmlns:ns1="http://xml.apache.org/axis/">ns1:Client.NoSOAPAction</faultcode> <faultstring>no SOAPAction header!</faultstring> <detail> <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">eroad-PC</ns2:hostname> </detail> </soapenv:Fault> </soapenv:Body> </soapenv:Envelope> httpClient 调用webservice 错误 问题分析 wsdl soapAction 为空通过httpClient 调用的失败 只需在httpHeard 增加 headers.add(new Header("SOAPAction", "Jakarta Commons-HttpClient/3.1"));

Demo:

StringBuffer  sb = new StringBuffer();
		sb.append("<soapenv:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:log=\"http://login.webservice.bos.kingdee.com\">");
			sb.append("<soapenv:Header>");
			sb.append("<RequestSOAPHeader MyAttribute=\"\" xmlns=\"http://www.zwson.com/\">");
			      
		    sb.append("</RequestSOAPHeader>");
			sb.append("</soapenv:Header>");
			sb.append("<soapenv:Body>");
			sb.append("<log:login soapenv:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">");
			sb.append("<userName xsi:type=\"xsd:string\">A</userName>");
			sb.append("<password xsi:type=\"xsd:string\">B</password>");
			sb.append("<slnName xsi:type=\"xsd:string\">eas</slnName>");
			sb.append("<dcName xsi:type=\"xsd:string\">CSK</dcName>");
			sb.append("<language xsi:type=\"xsd:string\">L2</language>");
			sb.append("<dbType xsi:type=\"xsd:int\">1</dbType>");
			sb.append("</log:login>");
			sb.append("</soapenv:Body>");
			sb.append("</soapenv:Envelope>");
		    PostMethod postMethod = new PostMethod("#");  
		    byte[] b;
			try {
				b = sb.toString().getBytes("utf-8");
				 //设置http头  
		        List<Header> headers = new ArrayList<Header>(); 
				headers.add(new Header("User-Agent", "Jakarta Commons-HttpClient/3.1"));  
				headers.add(new Header("SOAPAction", "Jakarta Commons-HttpClient/3.1"));
				
			    InputStream is = new ByteArrayInputStream(b, 0, b.length);
			      RequestEntity re = new InputStreamRequestEntity(is, b.length,"text/xml;charset=utf-8");
			      RequestEntity re2  = new StringRequestEntity(sb.toString(),"text/xml; charset=UTF-8; type=\"text/xml\"","UTF-8");
			      postMethod.setRequestEntity(re);
			      
				    // 最后生成一个HttpClient对象,并发出postMethod请求
			     HttpClient httpClient = new HttpClient();
			     
			    // httpClient.setTimeout(newTimeoutInMilliseconds)meout(60000);
			     httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(30000);  
			     httpClient.getHttpConnectionManager().getParams().setSoTimeout(30000);
			     httpClient.getHostConfiguration().getParams().setParameter("http.default-headers", headers);  
			     int statusCode = httpClient.executeMethod(postMethod);
			     System.out.println(statusCode);
			     String soapResponseData = postMethod.getResponseBodyAsString();
			     System.out.println(soapResponseData);
			} catch (UnsupportedEncodingException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (HttpException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		  

© 著作权归作者所有

vachel_lin
粉丝 0
博文 5
码字总数 1043
作品 0
深圳
项目经理
私信 提问
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
0
2
Java调用.Net WebService 发生异常:服务器未能识别 HTTP 头 SOAPA...

使用XFire方式调用这个Web服务,但出现了异常:SoapException: 服务器未能识别 HTTP 头 SOAPAction 的值。 这可能是 Client 端没有正确的按照 WSDL 建立反项工程的原因。 我们的WSDL地址是:...

钱佳庆
2011/10/04
0
1
如何直接soap字符串,访问webservice

1.Webservice.GetVcardByUserNo(String userId,String userNo);这个是封装了的webservice接口。 2.在程序中连续两次调用该接口时,ksoap2在解析第二次调用返回的结果时抛异常。 异常信息如下...

沈健
2011/12/09
0
0
soap1.1与soap1.2的区别

SOAP 1.1 request: SOAP 1.2 request: I see 3 differences: + SOAP 1.2 uses "application/soap+xml" as Content-Type and SOAP 1.1 uses "text/xml".+ SOAP 1.2 does not use SOAPAction h......

苏叶晚晚
2013/10/28
0
0
php 设置 response header 时的小问题

今天遇到一个感觉很诡异的问题,就是 php 设置header 总是不成功,设置为返回xml ,但总是返回html 。源码大概如下: 只要把header 一行移到第一个echo 的前面就行了 对php 理解和实践都不深...

鉴客
2011/10/26
3K
1

没有更多内容

加载失败,请刷新页面

加载更多

干货 | 解读MySQL 8.0新特性:Skip Scan Range

MySQL从8.0.13版本开始支持一种新的range scan方式,称为Loose Skip Scan。该特性由Facebook贡献。我们知道在之前的版本中,如果要使用到索引进行扫描,条件必须满足索引前缀列,比如索引idx...

迷你芊宝宝
29分钟前
1
0
观点 | 云原生时代来袭 下一代云数据库技术将走向何方?

全面云化的时代已经到来,面对一系列的新技术和挑战,数据库市场将面临怎样的变革?作为云服务提供商,如何帮助更多的企业级用户把握“云”潮,提供最高效、最具价值的数据库解决方案? 日前...

zhaowei121
38分钟前
1
0
ReentrantLock是如何基于AQS实现的

ReentrantLock是一个可重入的互斥锁,基于AQS实现,它具有与使用 synchronized 方法和语句相同的一些基本行为和语义,但功能更强大。 lock和unlock ReentrantLock 中进行同步操作都是从lock方...

java菜分享
38分钟前
1
0
比特币钱包开发【C#】

在这个教程中,我们将使用C#来开发一个比特币钱包,我们使用NBitcoin这个库。教程中的代码实现了比特币的存储、接收和支付功能,可以很容易地移植到其他应用中。 如果要快速掌握在C#程序中N...

汇智网教程
39分钟前
1
0
centos7.4编译安装nginx

1、安装准备环境 yum install gcc gcc-c++ automake pcre pcre-devel zlip zlib-devel openssl openssl-devel pcre* 下载pcre wget https://jaist.dl.sourceforge.net/project/pcre/pcre/8.......

Marhal
40分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部