如何js访问webservicee的问题

刚接触webService,发布了个很简单的webService
http://localhost:8888/axisTest/services/HelloAXIS/sayHello?name=bill
使用这个在浏览器中能输出sayHello这个方法返回的字符
发布的webService名称是HelloAXIS,里面有一个方法是sayHello(String name),需要一个name参数
我现在想在客户端程序访问这个webService,但是下面的写法不对,是url的问题么?
&&& HttpClient client = new HttpClient();
&&& PostMethod method = new PostMethod(url);
&&& method.setHttp11(true);
&&& method.addRequestHeader("Content-Type","text/charset=UTF-8");
&&& method.setRequestBody(requestBody);
&&&&&&&&&&& client.executeMethod(method);
&&&&&&&&&&& return method.getResponseBodyAsString();
&&&
&&& 在PostMethod method = new PostMethod(url) 中,这个url 应该怎么写?
&&& 如果我要调用HelloAXIS这个webService下面的其他方法又该怎么调用?
问题补充:你是说URL改成:http://localhost:8888/axisTest/services/HelloAXIS?wsdl& 这个?但是怎么知道我要调用里面哪个方法呢?
问题补充:呃,我现在就是想知道,如果地址只到 http://localhost:8888/axisTest/services/HelloAXIS ,那么他需要调用的方法和参数是怎么传过去的?是通过method.setRequestBody(requestBody) 这个方法传过去的?
requestBody内容,是根据http://localhost:8888/axisTest/services/HelloAXIS?wsdl 这个XML来拼出来的么?谢谢2位了!
问题补充:webService写的很简单,一个简单的pojo类里面有个sayHello方法返回一个字符串,在项目中引用了axis2的jar包,复制了axis2.xml,配置了下services.xml来指定了要发布的CLASS和方法,axis2应该是会自动根据WEB-INF\services\webservice\META-INF下面的services.xml发布webService
采纳的答案
引用
我说的意思是http://localhost:8888/axisTest/services/HelloAXIS?wsdl
这个地址是你如果要看接口的详细信息,那么把这个地址放到浏览器中就可以看到。
如果是要调用接口用的是http://localhost:8888/axisTest/services/HelloAXIS这个地址
你要传参数和指定访问的方法,就把他们拼接成xml当做字符串传过去就可以了。
那就按照这个哥们的办法做呗
axis2已经封装好了
你的webService 是怎么发布的?
用什么写的?
我说的意思是http://localhost:8888/axisTest/services/HelloAXIS?wsdl
这个地址是你如果要看接口的详细信息,那么把这个地址放到浏览器中就可以看到。
如果是要调用接口用的是http://localhost:8888/axisTest/services/HelloAXIS这个地址
你要传参数和指定访问的方法,就把他们拼接成xml当做字符串传过去就可以了。
用这种方式的话
你的URL只能对应到你的servlet
与你的方法无关,想调用方法的话,可以传递一些参数过去
调用对应的servlet& servlet根据你的参数,去调用不同的方法
引用http://localhost:8888/axisTest/services/HelloAXIS?wsdl
这个是访问的地址
楼上说的跟你的不是一回事
http://localhost:8888/axisTest/services/HelloAXIS?wsdl
这个是访问的地址
已解决问题
未解决问题js如何调用webservice
[问题点数:40分,结帖人buduan0]
js如何调用webservice
[问题点数:40分,结帖人buduan0]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关推荐:
2014年2月 企业软件大版内专家分月排行榜第一2013年10月 企业软件大版内专家分月排行榜第一2013年9月 企业软件大版内专家分月排行榜第一2013年7月 企业开发大版内专家分月排行榜第一2013年6月 企业开发大版内专家分月排行榜第一2013年5月 企业开发大版内专家分月排行榜第一2013年4月 企业开发大版内专家分月排行榜第一2013年3月 企业开发大版内专家分月排行榜第一2012年12月 企业开发大版内专家分月排行榜第一2012年11月 企业开发大版内专家分月排行榜第一
2013年1月 企业开发大版内专家分月排行榜第二
2014年2月 企业软件大版内专家分月排行榜第一2013年10月 企业软件大版内专家分月排行榜第一2013年9月 企业软件大版内专家分月排行榜第一2013年7月 企业开发大版内专家分月排行榜第一2013年6月 企业开发大版内专家分月排行榜第一2013年5月 企业开发大版内专家分月排行榜第一2013年4月 企业开发大版内专家分月排行榜第一2013年3月 企业开发大版内专家分月排行榜第一2012年12月 企业开发大版内专家分月排行榜第一2012年11月 企业开发大版内专家分月排行榜第一
2013年1月 企业开发大版内专家分月排行榜第二
2014年2月 企业软件大版内专家分月排行榜第一2013年10月 企业软件大版内专家分月排行榜第一2013年9月 企业软件大版内专家分月排行榜第一2013年7月 企业开发大版内专家分月排行榜第一2013年6月 企业开发大版内专家分月排行榜第一2013年5月 企业开发大版内专家分月排行榜第一2013年4月 企业开发大版内专家分月排行榜第一2013年3月 企业开发大版内专家分月排行榜第一2012年12月 企业开发大版内专家分月排行榜第一2012年11月 企业开发大版内专家分月排行榜第一
2013年1月 企业开发大版内专家分月排行榜第二
匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。解占辉 的BLOG
用户名:解占辉
文章数:195
评论数:155
访问量:370200
注册日期:
阅读量:15194
[匿名]什么都没说啊:
51CTO推荐博文
java 使用 spring webservice 发布的 service,由php使用SoapClient调用。
遇到有一个奇怪的现象,java调用发布的webservice,没有问题,使用工具SOAP UI调用,没有问题,
同样的php代码调用google的天气服务没问题,调用我们的wsdl就不行。
经过摸索调试,发现如下问题,以及解决的过程。
首先发布的wsdl如下:
&version=&1.0&&encoding=&UTF-8&&standalone=&no&&&
&xmlns:wsdl=&http://schemas.xmlsoap.org/wsdl/&&xmlns:sch=&/doorway&&xmlns:soap=&http://schemas.xmlsoap.org/wsdl/soap/&&xmlns:tns=&/doorway&&targetNamespace=&/doorway&&&
&&&&&xmlns:dw=&/doorway&&xmlns:s=&http://www.w3.org/2001/XMLSchema&&attributeFormDefault=&unqualified&&elementFormDefault=&qualified&&targetNamespace=&/doorway&&&
&&&&&&&name=&Error&&&
&&&&&&&&&name=&Code&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&Message&&type=&s:string&&use=&required&&&
&&&&&&&name=&Status&&&
&&&&&&&&&base=&s:string&&&
&&&&&&&&&&&value=&Successful&&&
&&&&&&&&&&&value=&Failed&&&
&&&&&&&&&&
&&&&&&&abstract=&true&&name=&BaseRequest&&&
&&&&&&&&&name=&Token&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&UserName&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&Password&&type=&s:string&&use=&required&&&
&&&&&&&abstract=&true&&name=&BaseResponse&&&
&&&&&&&&&&
&&&&&&&&&&&minOccurs=&0&&name=&Error&&type=&dw:Error&&&
&&&&&&&&&&
&&&&&&&&&name=&Token&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&Status&&type=&dw:Status&&use=&required&&&
&&&&&&&name=&StatusResponse&&&
&&&&&&&&&&
&&&&&&&&&&&base=&dw:BaseResponse&&&
&&&&&&&&&&
&&&&&&&&&name=&RatePlanCode&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&RoomTypeCode&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&NumberOfUnits&&type=&s:int&&use=&required&&&
&&&&&&&&&name=&HotelCode&&type=&s:string&&use=&required&&&
&&&&&&&&&name=&DistributorReservationId&&type=&s:string&&use=&required&&&
&&&&&&&name=&PingRequest&&&
&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&base=&dw:BaseRequest&&&
&&&&&&&&&&&&&&&name=&Echo&&type=&s:string&&use=&required&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&
&&&&&&&name=&PingResponse&&&
&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&&&&base=&dw:StatusResponse&&&
&&&&&&&&&&&&&&&name=&Echo&&type=&s:string&&use=&required&&&
&&&&&&&&&&&&&&
&&&&&&&&&&&&
&&&&&&&&&&
&&&name=&PingResponse&&&
&&&&&element=&tns:PingResponse&&name=&PingResponse&&&
&&&name=&PingRequest&&&
&&&&&element=&tns:PingRequest&&name=&PingRequest&&&
&&&name=&Doorway&&&
&&&&&name=&Ping&&&
&&&&&&&message=&tns:PingRequest&&name=&PingRequest&&&
&&&&&&&message=&tns:PingResponse&&name=&PingResponse&&&
&&&name=&DoorwaySoap11&&type=&tns:Doorway&&&
&&&&&style=&document&&transport=&http://schemas.xmlsoap.org/soap/http&&&
&&&&&name=&Ping&&&
&&&&&&&soapAction=&&&&
&&&&&&&name=&PingRequest&&&
&&&&&&&&&use=&literal&&&
&&&&&&&name=&PingResponse&&&
&&&&&&&&&use=&literal&&&
&&&name=&HotelDoorwayService&&&
&&&&&binding=&tns:DoorwaySoap11&&name=&DoorwaySoap11&&&
&&&&&&&location=&/soap/doorway/&&&
其中定义了一个方法&Ping& 输入为PingRequest 和 PingResponse 其中PingRequest包含一个echo的属性,并集成一个BaseRequest的对象。
下面是使用php调用的代码:
ini_set(&soap.wsdl_cache_enabled&,&&0&);&&&
$wsdl=&http://10.10.10.10:8888/doorway/soap/doorway/doorway.wsdl&;&&
$soap=new&SoapClient($wsdl,&array(&'trace'=&true,'cache_wsdl'=&WSDL_CACHE_NONE,&'soap_version'&&&=&&SOAP_1_1));&&
$method=&Ping&;&&
$params&=&array('Token'=&'E30ED3AA-65DE-48F9-BEA4-BA021B119625','UserName'=&'cccc','Password'=&'pppp',&'Echo'=&'hello');&&
$result=$soap-&$method($params);&&
}catch(Exception&$e)&{&&
&&&&echo&&Exception:&&&.&$e-&getMessage();&&
echo&$result-&Echo;&&
最初我们调用的时候获取到的错误是找不到Ping方法,这个后来不确定是如何解决的。
后来加了SoapClient
的调用参数WSDL_CACHE_NONE让soap调用的时候不缓存wsd,以避免服务器修改了wsdl无法及时更新。设置此参数后,每次调用,都会重 新load wsdl文件,因此监控java的log,将会拿到一个get请求,起初我们以为是调用wsdl的请求,后来发现,他是拿wsdl的请求。
过了这关后,会遇到如下错误:Unable to parse URL
这个原因经过google之后发现问题出在wsdl上面:&soap:address location=&/soap/doorway/&/&
这里有的wsdl会:&soap:address location=&&/&
这种方式使用java调用是没有问题的,但是使用php调用就是不行。再加上错误的提示信息,可以理解为,SoapClient没有智能的解析这个 location,因此无法调用到soap的地址(这里称之为地址,其实我也不知道是什么意思,要想搞懂的可以看wsdl的协议。)
按照往上介绍的方法,在SoapClient调用里面增加参数:location =&&/soap/doorway&
但这种方法显然是不太好的,更好的方法是在生成的wsdl中就将location参数直接设置成绝对的url地址不要是相对的,也不要是空。
另外需要注意一个细节就是soap_version,分为:SOAP_1_1,SOAP_1_2 这两者发送的header是不一样的,一个是:text/xml一个是soap/xml,有的时候不兼容,就会将请求拒绝掉。
最后还有一个问题就是组装调用方法参数:
所调用方法应该组装的参数,主要看方法对应的wsdl中的input,对于Ping方法来说,就是PingRequest。
pingRequest继承了一个BaseRequest,那么相当于PingRequest有:token、username、password,以及自身的echo,因此将这些属性直接组装成array塞进去就ok了。
这里没有实验过一个方法对应多个输入对象应该如何处理,大家可以自己去试。而对已简单到String类型的输入参数来说,我这边的param为:$params = array('arg0'=&&hello111&);
不过我的这个我使用的是另外一个wsdl,其输入参数的wsdl为(使用spring+cxf+aegis数据绑定生成):
&name=&sayHello&&&
&&&&&minOccurs=&0&&name=&arg0&&nillable=&true&&type=&xsd:string&&&
大家可以看看对应关系。是否能看出点什么规律。而对于复杂的对象,则可以层层的array进行嵌套。可以参开这个文章:
最后提醒一下:
php使用webservice的时候,需要确认开启了php_soap、php_curl的扩展(php.ini)
关于php的soap client 以及其option参数,可以参考官网:
使用php最好配置上xdebug以便可以调试,看到对象的值,相当明了,
SoapClient里面有发送的request的xml一看就知道是否有问题,以及问题出在哪里。
详情可以看一下xdebug等文章。
再就是php调用的时候我增加了try,catch,并且将exception输出,这样输出的结果似乎比直接跑异常要详细。
因此建议大家遇到问题的时候可以catch一下,以便能够看到详细的异常信息。
另外如果有对spring发布webservice以及spring+cxf发布webservice有问题的也可以找相关文章看一下。这里就不贴地址了。我也曾经介绍过cxf的。
总结一下,出错的缘由,由于本次webservice使用了手写xsd的方式,先手工写出了xsd,然后再生成的接口和对象,因此导致location设置不兼容。
分享一个xml在线格式化的工具:
文章转自/blog/1555715
了这篇文章
类别:┆阅读(0)┆评论(0)其他回答(2)
右击项目-&添加服务引用,输入地址,然后下面看到一个命名空间
收获园豆:20
园豆:9455
园豆:9455
LZ解决了麽,急切需要帮忙
&&&您需要以后才能回答,未注册用户请先。其他回答(1)
一般调用Web服务的步骤:
1.Web服务一定要添加[ScriptService]& 1)添加引用:System.Web.E& 2)using System.Web.Script.S
2.web.config中添加& &httpHandlers&&&&&& &remove verb="*" path="*.asmx"/&&&&&& &add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf"/&&&& &/httpHandlers&
3.jquery调用时需要指明格式:& contentType:"application/json"& dataType:"json"
&& 无参数时,需要以下方式来传递&& data:{}
Fencer在上面做了回答,但里面回答的有问题!你写的ajax提交的部分也是有问题的!如果你看过Jquery帮助文档的话,我想这里不会出现问题。首先我说下你上面出现的几个错误,contentType类型,这个是指浏览器支持的所有文件类型,而你这里设置成application/utf-8这是错误的,具我了解的不曾有这样的类型。同时在默认的情况下Jquery库支持的contentType类型是application/x-www-form-urlencoded,他可以满足一般所用到的情况,不是特别需要一般不用添加给添加这个类型。
从你的问题来看,你返回的数据格式是json类型,需要Jquery库能解析他,哪么你需要做的是设置ajax的dataType类型为json即可
另外一点,你传入的data参数如果按照你的写法是想传入一个json吗?不过即时是这样我想你的写法也是有问题的"{name"""+$("#inputName").val()+"""}",& 仔细看下会有几个问题的,是:不是;,即时是json类型也少不了name:'xxx'这样的格式。
ajax提交的data数据,Jquery会自动转换成字符串如果不是的话,因此按照你这里的写法会有错误产生,当然如果你不喜欢被Jquery本身说转换哪么你需要设置processDate为false,这样子他就会按照原样发送到服务器端
其次关于WebServices的东西,我这里不做过多的说,我想VS已经把我要说的都自动生成了
综上ajax提交部分可以如下写:
$.ajax({&",&type:"POST",&dataType:"json",&data:"name="+$("#inputName").val(),&success:function(obj){&&//处理返回的json对象&}});或者$.ajax({&",&type:"POST",&dataType:"json",&data:"{name:'"+$("#inputName").val()+"'}",&processData:false,&success:function(obj){&&//处理返回的json对象&}});
园豆:10378
&&&您需要以后才能回答,未注册用户请先。}

我要回帖

更多关于 js访问webservice 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信