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中的实例方法、静态方法、类方法、类变量和实例变量浅析
Apr 26 Python
python进程类subprocess的一些操作方法例子
Nov 22 Python
详解Python中如何写控制台进度条的整理
Mar 07 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
python监测当前联网状态并连接的实例
Dec 18 Python
浅析python的Lambda表达式
Feb 27 Python
pytorch中使用cuda扩展的实现示例
Feb 12 Python
python如何爬取动态网站
Sep 09 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
python 实现两个变量值进行交换的n种操作
Jun 02 Python
一文搞懂python异常处理、模块与包
Jun 26 Python
Python实现8种常用抽样方法
Jun 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无限级分类方法及代码
2013/06/21 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
实例说明js脚本语言和php脚本语言的区别
2019/04/04 PHP
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
js使用html()或text()方法获取设置p标签的显示的值
2014/08/01 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
Javascript实现的SHA-256加密算法完整实例
2016/02/02 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
关于jquery中动态增加select,事件无效的快速解决方法
2016/08/29 Javascript
Vue和React组件之间的传值方式详解
2019/01/31 Javascript
浅谈vue单页面中有多个echarts图表时的公用代码写法
2020/07/19 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
Python实现简单拆分PDF文件的方法
2015/07/30 Python
python执行使用shell命令方法分享
2017/11/08 Python
对Pycharm创建py文件时自定义头部模板的方法详解
2019/02/12 Python
我们为什么要减少Python中循环的使用
2019/07/10 Python
Django的ListView超详细用法(含分页paginate)
2020/05/21 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
完美解决python针对hdfs上传和下载的问题
2020/06/05 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
用CSS3的box-reflect设置文字倒影效果的方法讲解
2016/03/07 HTML / CSS
详解如何使用rem或viewport进行移动端适配
2020/08/14 HTML / CSS
Spartoo葡萄牙鞋类网站:线上销售鞋履与时尚配饰
2017/01/11 全球购物
Marc Jacobs官方网站:美国奢侈品牌
2017/08/29 全球购物
联想印度官方网上商店:Lenovo India
2019/08/24 全球购物
美国家用和厨房电器销售网站:Appliances Connection
2020/01/24 全球购物
Java面试题:请问一下代码输出是什么
2015/05/27 面试题
大一新生军训时的自我评价分享
2013/12/05 职场文书
教师民族团结演讲稿
2014/08/27 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
2015年上半年党建工作总结
2015/03/30 职场文书
病假条格式范文
2015/08/17 职场文书
一个成功的互联网创业项目,必须满足这些要求
2019/08/23 职场文书