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调用java的Webservice示例
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@