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发送伪造的arp请求
Jan 09 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
CentOS下Python3的安装及创建虚拟环境的方法
Nov 28 Python
python使用装饰器作日志处理的方法
Jul 11 Python
Python 实现数据结构-堆栈和队列的操作方法
Jul 17 Python
Python 使用 prettytable 库打印表格美化输出功能
Dec 26 Python
详解Python 重学requests发起请求的基本方式
Feb 07 Python
python可迭代对象去重实例
May 15 Python
Python enumerate() 函数如何实现索引功能
Jun 29 Python
Keras 中Leaky ReLU等高级激活函数的用法
Jul 05 Python
python模拟点击玩游戏的实例讲解
Nov 26 Python
详解Python openpyxl库的基本应用
Feb 26 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
一个域名查询的程序
2006/10/09 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
QQ邮箱的一个文本编辑器代码
2007/03/14 Javascript
JavaScript获取页面上某个元素的代码
2011/03/13 Javascript
JavaScript中的ubound函数使用实例
2014/11/04 Javascript
javascript异步编程代码书写规范Promise学习笔记
2015/02/11 Javascript
被遗忘的javascript的slice() 方法
2015/04/20 Javascript
javascript单例模式的简单实现方法
2015/07/25 Javascript
javascript实现动态统计图开发实例
2015/11/21 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
jQuery实现点击表格单元格就可以编辑内容的方法【测试可用】
2016/08/01 Javascript
详细总结Javascript中的焦点管理
2016/09/17 Javascript
JS实现简易刻度时钟示例代码
2017/03/11 Javascript
Javascript实现跨域后台设置拦截的方法详解
2017/08/04 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
详解解决小程序中webview页面多层history返回问题
2019/08/20 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
Python 正则表达式的高级用法
2016/12/04 Python
对python操作kafka写入json数据的简单demo分享
2018/12/27 Python
Python元组常见操作示例
2019/02/19 Python
PyTorch中 tensor.detach() 和 tensor.data 的区别详解
2020/01/06 Python
Python编程快速上手——Excel到CSV的转换程序案例分析
2020/02/28 Python
keras得到每层的系数方式
2020/06/15 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
Python直接赋值及深浅拷贝原理详解
2020/09/05 Python
python生成xml时规定dtd实例方法
2020/09/21 Python
1688平价精选商城:阿里集团旗下,工厂出厂价格直销
2017/04/24 全球购物
宿舍打麻将检讨书
2014/01/24 职场文书
什么样的创业计划书可行性高?
2014/02/01 职场文书
争论的故事教学反思
2014/02/06 职场文书
幼儿园社区活动总结
2014/07/07 职场文书
学习普通话的体会
2014/11/07 职场文书
同学聚会通知短信
2015/04/20 职场文书
继续教育心得体会(共6篇)
2016/01/19 职场文书
初中政治教学反思
2016/02/23 职场文书