现在java调用webservice教程java是用什么技术?

2013年10月 总版技术专家分月排行榜第三
2014年3月 Java大版内专家分月排行榜第一2014年1月 Java大版内专家分月排行榜第一2013年12月 Java大版内专家分月排行榜第一2013年11月 Java大版内专家分月排行榜第一2013年10月 Java大版内专家分月排行榜第一
2013年10月 总版技术专家分月排行榜第三
2014年3月 Java大版内专家分月排行榜第一2014年1月 Java大版内专家分月排行榜第一2013年12月 Java大版内专家分月排行榜第一2013年11月 Java大版内专家分月排行榜第一2013年10月 Java大版内专家分月排行榜第一
2012年5月 Oracle大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
2013年10月 Java大版内专家分月排行榜第二2013年3月 Java大版内专家分月排行榜第二2013年2月 Java大版内专家分月排行榜第二
2013年7月 Java大版内专家分月排行榜第三2013年5月 Java大版内专家分月排行榜第三2013年4月 Java大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
2012年5月 Oracle大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。其他回答(6)
Webservice 存在就是解决不同平台的问题了.Webservice基于的是xml,soap协议来折,跟平台毛关系.
不知道你说的平台底层的访问原理指代的什么?
你这个问题没有到要了解底层的级别.
收获园豆:1
Webservice 直接调用咯~
添加服务引用~ 填写正确的 Webservice 路径
收获园豆:5
园豆:1046
webservice 是标准的协议,要是调不通,要么就是对方发布有问题,要么就是你的地址写错了
收获园豆:1
园豆:8243
参考文章:
收获园豆:21
园豆:32879
一楼说的在理,你最后提的问题跟你前半分的描述有直接有关系吗?你若真要问两个平台底层实现的不同,又有几个人能给你完美的解释?
收获园豆:1
估计不能直接引用, 用那个命令行的工具(忘了叫什么名字)生成soap的代理类,然后再修改其代码,加入证书ssl
收获园豆:1
&&&您需要以后才能回答,未注册用户请先。近日在找工作时,经常碰到公司很关心webservice的操作。于是从没使用过的我在家里自己研究了一阵。在本机上发布在本机上调用很顺利的完成了,可是后来我试着调用网上免费的web服务时,老是出问题。我在网上查找资料也收获很少,最后在QQ问问上,百度上向高手求助,最后在几天之后的今天,在一个叫echo的网友帮助下,然后再根据他的提示上网搜索资料,终于解决啦。下面对把我困扰了几天的问题及解决办法公布,好让以后学习webservice碰到我同样问题的人少走弯路,也是因为我这几天一直受到各位不认识的朋友的无私帮助,很感激。
我要调用的是.net发布的一个天气预报服务。描述如下:
引用2400多个城市天气预报 WEB服务 公用事业
Endpoint: .cn/WebServices/WeatherWS.asmx&&
Disco: .cn/WebServices/WeatherWS.asmx?disco&&
WSDL: .cn/WebServices/WeatherWS.asmx?wsdl&&
我的客户端调用使用axis1.4,代码如下:
// webservice路径
String endpoint = ".cn/WebServices/WeatherWS.asmx?wsdl";
String res =
// 查询城市天气的接口方法名
String operationName = "getWeather";
// 定义service对象
Service service = new Service();
// 创建一个call对象
Call call = (Call) service.createCall();
// 设置目标地址,即webservice路径
call.setTargetEndpointAddress(endpoint);
// 设置操作名称,即方法名称
call.setOperationName("getWeather");
// 设置方法参数
call.addParameter( new QName(".cn/","getWeatherHttpGetIn"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 设置返回值类型
//对于返回是字符串数组的返回类型只有这两种可行
call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING);
call.setUseSOAPAction(true);
call.setSOAPActionURI(".cn/");
res=(String) call.invoke(new Object[]{""});
这段代码是我现在在正确的基础上回忆的,可能之前尝试了好多种方法,如果有部分失误,请见谅!下面继续。
这个代码的运行是老是抛异常
java调用.net的webservice异常:
严重: Servlet.service() for servlet WeatherServlet threw exception
org.codehaus.xfire.XFireRuntimeException: Could not invoke service.. Nested exception is org.codehaus.xfire.fault.XFireFault: 服务器未能识别 HTTP 头 SOAPAction 的值: 。
org.codehaus.xfire.fault.XFireFault: 服务器未能识别 HTTP 头 SOAPAction 的值: 。
我在网上找了好多,修改了我的call.setSOAPActionURI(),但是无论我怎么改还是不行。今天那个echo告诉我,不但我的call.setSOAPActionURI()有问题,而且我的输入参数也错啦。后来我才开始检查,按照他给我的一些思路和代码去改,果然是的,我的代码漏洞百出,修改后是这样的,功能实现了。
// .cn/是wsdl中definitions根节点的targetNamespace属性
// webservice路径
// 这里后面加不加 "?wsdl" 效果都一样的
String endpoint = ".cn/WebServices/WeatherWS.asmx?wsdl";
String[] res =
// 查询城市天气的接口方法名
String operationName = "getWeather";
// 定义service对象
Service service = new Service();
// 创建一个call对象
Call call = (Call) service.createCall();
// 设置目标地址,即webservice路径
call.setTargetEndpointAddress(endpoint);
// 设置操作名称,即方法名称
call.setOperationName(new QName(".cn/",operationName));
// 设置方法参数
call.addParameter( new QName(".cn/","theCityCode"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
call.addParameter( new QName(".cn/","theUserID"),
org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 设置返回值类型
//对于返回是字符串数组的返回类型只有这两种可行
//call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_VECTOR);
call.setReturnClass(java.lang.String[].class);
call.setUseSOAPAction(true);
call.setSOAPActionURI(".cn/"+"getWeather");
res=(String[]) call.invoke(new Object[]{cityCode,userId});
// 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收
//Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});
for(String str:res)
System.out.println(str);
原来我主要是对wsdl文件的结构不熟悉,误解了它的意思,导致我很多地方参数设置错误了。
这里总结以下几点我觉得需要初学者注意的:
一个wsdl的命名空间就是defininations的targetnamespace属性
call.setSOAPActionURI(".cn/"+"getWeather");这个方法网上好多地方都只是传入一个URI,就是那个wsdl的命名空间,这是错的,必须接上我们要调用的接口方法
对于我类似我这种返回类型是字符串数组型的,可以设置返回类型为org.apache.axis.encoding.XMLType.SOAP_VECTOR或java.lang.String[].class,其它的好像不可以,我测了下
还有setOperationName()方法中的参数最好使用QName对象传入,防止出错。
对于其它的请看我的附件吧(是一个wsdl结构文档和我此次调用的代码)
这是我第一次在网上发表自己的东西,请各位多多包涵,呵呵。也希望我的这篇处女作确实能帮到人,也希望更多的人能够分享自己的心得
下载次数: 461
浏览 10992
浏览: 12227 次
来自: 南京
new Object[]{cityCode,userId}中的 ...
试了下,可以运行,但是就是版本有点老啦。
楼主,在吗?!我使用CXF的wsdl2java访问,就不成。总 ...
哦,不好意思,我做的是java,对于.net不是很了解。
楼主我到有个问题,如果对方是dataset类型的数据,该怎么处 ...
(window.slotbydup=window.slotbydup || []).push({
id: '4773203',
container: s,
size: '200,200',
display: 'inlay-fix'

我要回帖

更多关于 java webservice 框架 的文章

 

随机推荐