Axis2 做webservice client 端时遇到的一个问题

问题描述

大家好:最近一直在做webservice 相关的东西。 webservice 的特性要是跨平台,跨语言。 我自己分别用 Java 和 Python 搭建了两套webservice(从某种意义上来讲,不仅是兴趣爱好,也是企业需求). 其中Java中使用Axis2框架,server 端和client端可以正常交互。 Python 中,server 端使用的是 tornadows(tornadow webservice), 客户端使用的是 suds, server 端和client端也可以正常交互。既然webservice 是跨平台的,我用python client 端来访问 Axis2 serve端,最早有一些 encoding 的问题,最后也解决了。现在我用 Axis2 client 访问我的 python server 端,一直不成功。 Axis2 client 收到的结果为null, python server端没有收到Axis2 client 的请求。 同样的python server, 我用python client(suds) 是可以的。现在我把我的 python server 端的code, 在浏览器中访问得到的wsdl 文件,以及 Axis2 client的code 一起贴上来。 希望高手轻移尊步,帮我指点迷津。part1: python server#NOTE: 功能很简单,就是提供一个getPrice() 方法,接受一个整数,返回一个整数import loggingimport tornado.httpserverimport tornado.ioloopimport tornado.webfrom tornadows import soaphandlerfrom tornadows import webservicesfrom tornadows import xmltypesfrom tornadows.soaphandler import webservicefrom tornado.options import define, optionsdefine('mode', default='deploy')define('port', type=int, default=8001)options['logging'].set('warning')class SMSService(soaphandler.SoapHandler): @webservice(_params=xmltypes.Integer,_returns=xmltypes.Integer) def getPrice(self,a): print 'come here' return 1987if __name__ == '__main__': service = [('SMSService',SMSService)] app = webservices.WebService(service) ws = tornado.httpserver.HTTPServer(app) ws.listen(options.port) logging.warn("SMSService running on: localhost:%d", options.port) tornado.ioloop.IOLoop.instance().start()part 2: wsdl #NOTE: 在浏览器中输入 ”http://172.16.2.46:8001/SMSService?wsdl“ 得到wsdl 文件如下:<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://127.0.1.1:8001/SMSService/getPrice" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="SMSService" targetNamespace="http://127.0.1.1:8001/SMSService/getPrice"><wsdl:types><xsd:schema targetNamespace="http://127.0.1.1:8001/SMSService/getPrice"><xsd:complexType name="paramsTypes"><xsd:sequence><xsd:element name="a" type="xsd:integer"/></xsd:sequence></xsd:complexType><xsd:element name="params" type="tns:paramsTypes"/><xsd:element name="returns" type="xsd:integer"/></xsd:schema></wsdl:types><wsdl:message name="SMSServiceRequest"><wsdl:part element="tns:params" name="parameters"/></wsdl:message><wsdl:message name="SMSServiceResponse"><wsdl:part element="tns:returns" name="parameters"/></wsdl:message><wsdl:portType name="SMSServicePortType"><wsdl:operation name="getPrice"><wsdl:input message="tns:SMSServiceRequest"/><wsdl:output message="tns:SMSServiceResponse"/></wsdl:operation></wsdl:portType><wsdl:binding name="SMSServiceBinding" type="tns:SMSServicePortType"><soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/><wsdl:operation name="getPrice"><soap:operation soapAction="http://127.0.1.1:8001/SMSService" style="document"/><wsdl:input><soap:body use="literal"/></wsdl:input><wsdl:output><soap:body use="literal"/></wsdl:output></wsdl:operation></wsdl:binding><wsdl:service name="SMSService"><wsdl:port binding="tns:SMSServiceBinding" name="SMSServicePort"><soap:address location="http://127.0.1.1:8001/SMSService"/></wsdl:port></wsdl:service></wsdl:definitions>part 3: Axis2 clientpackage client;import javax.xml.namespace.QName;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.rpc.client.RPCServiceClient;public class client_for_python {public static void main(String[] args) throws Exception {// step 1: 使用RPC方式调用WebServiceRPCServiceClient serviceClient = new RPCServiceClient();Options options = serviceClient.getOptions();// step 2: 指定调用WebService的URL// url for pythonString url2 = "http://172.16.2.46:8001/SMSService";EndpointReference targetEPR = new EndpointReference(url2);options.setTo(targetEPR);// step 3: 指定getGreeting方法的参数值// step 5-6: (similiar whit// it!)下面是调用getPrice方法的代码,这些代码与调用getGreeting方法的代码类似Class[] classes = new Class[] { int.class };QName opAddEntry = new QName("http://172.16.2.46:8001/SMSService/getPrice");System.out.println(serviceClient.invokeBlocking(opAddEntry,new Object[] {1}, classes)[0]);}}#NOTE: 没有任何输出:控制台上的所有输出就是:log4j:WARN No appenders could be found for logger (org.apache.axis2.context.AbstractContext).log4j:WARN Please initialize the log4j system properly.null在python server 端也没有收到任何参数。我个人分析,可能是 Axis2 端 url 的指向有问题,可以看了一部分API, 也做了一些尝试,还是不行。Hope someone can give me some points.Thanks! (The blog permit not to use GaoShao BanMang,hehe!)-- Jia Xiaolei

解决方案

我不知道你代码怎么做的,但是我可以告诉你怎么去解决这个问题,最简单有效的方法就是抓包,1.先确认请求能到服务端。2.从服务端抓两种不同客户端的访问过来的SOAP包。把两个抓到的包做对比,看看有什么不一样。排查代码问题还是网络问题,还是什么名空间的问题。祝你好运!
解决方案二:
抓包用这个 tcpmon,我比较喜欢的。

时间: 2024-12-25 14:55:45

Axis2 做webservice client 端时遇到的一个问题的相关文章

在使用Axis2做WebService客户端开发时,如何指定客户端(IP)发送请求的IP(不是服务端)?可以指定吗?

问题描述 在使用Axis2做客户端开发时,公司的服务器机器上有3个IP地址,同时只有一个是可以访问外网的,其他两个只能访问内网,现在的问题是访问服务端的IP地址正确,端口号正确,访问的服务以及方法都没有问题.就是把写好的客户端放进服务器(Tomcat5.28)里,总是引发连接超时的异常,客户端我设置的超时Call的Time为10分钟?还是提示连接超时问题!但是在机房的服务器电脑上的ie中可以得到WSDL文件?这个使用IE不需要指定IP?还是通过什么样的代理方式可以解决该问题?一台电脑有多个IP地

文件传输-关于Socket通信问题 ,Sever和Client端如何相互判断对方中断以及终断

问题描述 关于Socket通信问题 ,Sever和Client端如何相互判断对方中断以及终断 一个手机做为Server端,其他多个手机做为Client端,用Socket建立连接,然后进行文件传输,怎么判断Server和Client端的中断以及终断? 解决方案 百度查查Soket心跳检测怎样做.http://blog.sina.com.cn/s/blog_a459dcf5010153m5.html 解决方案二: 初学者,没怎么看懂,谢谢!! 解决方案三: 数据小的消息相互发送与应答(降低流量),定

client 端的调用 服务器端的webservice问题

问题描述 client端调用服务端的webservice(集于springMVC模式开发的)我写的webservice是用jaxws写的,现在有一个问题?是client调用服务端的可以成功,但是服务器的对象都是通过依赖注入方式新建哦,调用的时候,类的对象为null,没有办法实例?例如:service调dao层,dao层的对象,没有办法实例,对象为空请给位大神帮帮忙,急急急啊 解决方案

客户端调用WebService,服务端有时候接收不到消息的问题!!

问题描述 web应用,客户端和服务端均是C#,服务端只有一个调用方法,且在服务端接收消息时均有记录日志.现在的情况是,网络正常的情况下,客户端调用服务端时,传输相同的数据内容调用,50次里面可能有一两次调用会报TimeOut的错误,且这一两次TimeOut时服务端均没有接收到消息的日志记录.出现这种情况后,刷新一下页面,再次调用就又能成功了.弄了很久都没搞明白问题出在哪里,哪位大虾碰到过这种情况?? 解决方案 解决方案二:网络问题,你把WEBSERVICE设置成异步看看解决方案三:应该不会是网络

【APACHE MINA2.0开发之一】搭建APACHE MINA框架并实现SERVER与CLIENT端的简单消息传递!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/apache-mina/831.html Hibernate系列学习阶段到此结束了,那么紧接着进入Apache Mina的开发学习,很多童鞋在微薄和QQ中疑问Himi为什么突然脱离游戏开发了,嘿嘿,其实可能更多的童鞋已经看出来了,Himi在偏向服务器Server端开发了,Hibernate.MySQL等都是为了Server端Mina开发而做的

OpenVPN client端/server端配置文件详细说明

一,OpenVPN server端配置文件详细说明 ################################################# # 针对多客户端的OpenVPN 2.0 的服务器端配置文件示例 # # 本文件用于多客户端<->单服务器端的OpenVPN服务器端配置 # # OpenVPN也支持单机<->单机的配置(更多信息请查看网站上的示例页面) # # 该配置支持Windows或者Linux/BSD系统.此外,在Windows上,记得将路径加上双引号, #

【APACHE MINA2.0开发之二】自定义实现SERVER/CLIENT端的编解码工厂(自定义编码与解码器)!

本站文章均为 李华明Himi 原创,转载务必在明显处注明:  转载自[黑米GameDev街区] 原文链接: http://www.himigame.com/apache-mina/839.html 在上一篇博文中已经简单介绍过"过滤器"的概念,那么在Mina 中的协议编解码器通过过滤器 ProtocolCodecFilter 构造,这个过滤器的构造方法需 要一个 ProtocolCodecFactory,这从前面注册 TextLineCodecFactory 的代码就可以看出来. Pr

UDT协议在连接对端时出错(UDT4.11 connect)

问题描述 UDT协议在连接对端时出错(UDT4.11 connect) 本人最近在研究UDT协议,想用它写一个Windows下运行的客户端,用c++编写,在写完测试时发现个问题,随后用UDE demo测试发现问题依然存在.(非Rendezvous模式) 运行环境: Win7 VS2010 UDT版本4.11 问题描述: 因为是一个长期运行的程序,修改UDT demo recvfile.cpp 使它循环发送,不退出 对connect做如下处理 if (UDT::ERROR == UDT::conn

鼠标-fullpage做的PC端网页适配手机端的问题

问题描述 fullpage做的PC端网页适配手机端的问题 fullpage的全屏滚动插件默认是不允许html和body出现滚动条的,现在PC端的网页想要适配在手机上,又不能缩放的太厉害,内容会很小看不清,理想方法时出现滚动条,让手机页面可以滑动滚动条看到网页全内容.但是貌似该插件禁掉滚动条手机上无法触发滚动效果. 如果在html和body上允许滚动条出现的话,PC端上每屏页面的横向滚动条会出现在页面最下方,可以用鼠标拖动,但是放在手机端,页面已经占满屏了,左右滑动无法触发横向滚动条的滚动效果(不