python调用java的Webservice示例


Posted in Python onMarch 10, 2014

一、java端
首先我使用的是java自带的对webservice的支持包来编写的服务端和发布程序,代码如下。
webservice的接口代码:

package com.xxx.test.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 14-3-5
 * Time: 下午3:11
 */
@WebService(targetNamespace = "http://xxx.com/wsdl")
public interface CalculatorWs {
    @WebMethod
    public int sum(int add1, int add2);
    @WebMethod
    public int multiply(int mul1, int mul2);
}

接口实现代码:
package com.xxx.test.ws;
import javax.jws.WebService;
/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 14-3-5
 * Time: 下午3:12
 */
@WebService(
        portName = "CalculatorPort",
        serviceName = "CalculatorService",
        targetNamespace = "http://xxx.com/wsdl",
        endpointInterface = "com.xxx.test.ws.CalculatorWs")
public class Calculator implements CalculatorWs {
    public int sum(int add1, int add2) {
        return add1 + add2;
    }
    public int multiply(int mul1, int mul2) {
        return mul1 * mul2;
    }
}

发布Webservice代码:[code]
package com.xxx.test.endpoint;
import com.xxx.test.ws.Calculator;
import javax.xml.ws.Endpoint;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 14-3-10
 * Time: 下午3:10
 */
public class CalclulatorPublisher {
    public static void main(String[] args) {
        Endpoint.publish("http://localhost:8080/test/calc", new Calculator());
        //Endpoint.publish("http://10.3.18.44:8080/test/calc", new Calculator());
    }
}[/code]
运行上面的这段代码,让你的webservice跑起来,接下来就可以使用Python来测试你的webservice代码了。
上面的代码跑起来后,你可以直接使用浏览器访问:

http://localhost:8080/test/calc?wsdl

来验证是否启动成功。
二、python端
接下来是python的测试代码:
#!/usr/bin/python
import suds
url = 'http://localhost:8080/test/calc?wsdl'
#url = 'http://10.3.18.44:8080/test/calc?wsdl'
client = suds.client.Client(url)
service = client.service
print client
sum_result = service.sum(10, 34)
print sum_result
print client.last_received()
multiply_result = service.multiply(5, 5)
print multiply_result
print client.last_received()

将上述代码保存成webservice.py文件,再修改一下可执行权限:

chmod +x webservice.py

输出结果如下:

Suds ( https://fedorahosted.org/suds/ )  version: 0.3.9 (beta)  build: R658-20100210
Service ( CalculatorService ) tns="http://xxx.com/wsdl"
   Prefixes (1)
      ns0 = "http://xxx.com/wsdl"
   Ports (1):
      (CalculatorPort)
         Methods (2):
            multiply(xs:int arg0, xs:int arg1, )
            sum(xs:int arg0, xs:int arg1, )
         Types (4):
            multiply
            multiplyResponse
            sum
            sumResponse

44
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope>
   <S:Body>
      <ns2:sumResponse>
         <return>44</return>
      </ns2:sumResponse>
   </S:Body>
</S:Envelope>
25
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope>
   <S:Body>
      <ns2:multiplyResponse>
         <return>25</return>
      </ns2:multiplyResponse>
   </S:Body>
</S:Envelope>

三、常见问题

注意,在执行上面的代码时,有可能提示:

Traceback (most recent call last):
  File "ws.py", line 1, in <module>
    import suds
ImportError: No module named suds

说缺少依赖的包,我们可以手工下载安装suds包。
wget http://downloads.sourceforge.net/project/python-suds/suds/0.3.9/suds-0.3.9.tar.gz?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpython-suds%2Ffiles%2F&ts=1394436413&use_mirror=nchc
tar zxvf suds-0.3.9.tar.gz
cd suds-0.3.9
sudo python setup.py install

OK。

Python 相关文章推荐
Python中exit、return、sys.exit()等使用实例和区别
May 28 Python
使用Python脚本生成随机IP的简单方法
Jul 30 Python
Python读取网页内容的方法
Jul 30 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
pycharm下查看python的变量类型和变量内容的方法
Jun 26 Python
解决django前后端分离csrf验证的问题
Feb 03 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
python logging 日志的级别调整方式
Feb 21 Python
关于Python字符串显示u...的解决方式
Mar 06 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 Python
python中re模块知识点总结
Jan 17 Python
使用Python脚本对GiteePages进行一键部署的使用说明
May 27 Python
pyqt4教程之messagebox使用示例分享
Mar 07 #Python
pyqt4教程之widget使用示例分享
Mar 07 #Python
pyqt4教程之实现windows窗口小示例分享
Mar 07 #Python
python爬虫教程之爬取百度贴吧并下载的示例
Mar 07 #Python
python处理json数据中的中文
Mar 06 #Python
Python中针对函数处理的特殊方法
Mar 06 #Python
python连接mysql调用存储过程示例
Mar 05 #Python
You might like
PHP异步调用socket实现代码
2012/01/12 PHP
php 中文字符串首字母的获取函数分享
2013/11/04 PHP
PHP正则提取不包含指定网址的图片地址的例子
2014/04/21 PHP
PHP中Memcache操作类及用法实例
2014/12/12 PHP
php解决和避免form表单重复提交的几种方法
2016/08/31 PHP
php微信分享到朋友圈、QQ、朋友、微博
2019/02/18 PHP
PHP设计模式之适配器模式(Adapter)原理与用法详解
2019/12/12 PHP
splice slice区别
2006/10/09 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
Javascript this 的一些学习总结
2012/08/02 Javascript
Javascript中的delete介绍
2012/09/02 Javascript
枚举的实现求得1-1000所有出现1的数字并计算出现1的个数
2013/09/10 Javascript
js通过iframe加载外部网页的实现代码
2015/04/05 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
2015/08/21 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
nodejs入门教程五:连接数据库的方法分析
2017/04/24 NodeJs
Node.js中sequelize时区的配置方法
2017/12/10 Javascript
详解使用mpvue开发github小程序总结
2018/07/25 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
[04:31]2016国际邀请赛中国区预选赛妖精采访
2016/06/27 DOTA
[00:57]英雄,你的补给到了!
2020/11/13 DOTA
Python常用列表数据结构小结
2014/08/06 Python
python正则表达式match和search用法实例
2015/03/26 Python
使用python爬虫实现网络股票信息爬取的demo
2018/01/05 Python
Python检测网络延迟的代码
2018/05/15 Python
python Matplotlib模块的使用
2020/09/16 Python
python实现在列表中查找某个元素的下标示例
2020/11/16 Python
世界第一曲奇连锁店:Mrs. Fields Cookies
2017/02/04 全球购物
检察官就职演讲稿
2014/01/13 职场文书
学生喝酒检讨书
2014/02/06 职场文书
网络研修随笔感言
2014/02/17 职场文书
军人离婚协议书样本
2014/10/21 职场文书
2015小学音乐教师个人工作总结
2015/07/21 职场文书
SpringBoot整合JWT的入门指南
2021/06/29 Java/Android
什么是动态刷新率DRR? Windows11动态刷新率功能介绍
2021/11/21 数码科技