首先我使用的是java自带的对webservice的支持包来编写的服务端和发布程序,代码如下。
webservice的接口代码:
- packagecom.xxx.test.ws;
- importjavax.jws.WebMethod;
- importjavax.jws.WebService;
- /**
- *CreatedwithIntelliJIDEA.
- *User:Administrator
- *Date:14-3-5
- *Time:下午3:11
- */
- @WebService(targetNamespace="http://xxx.com/wsdl")
- publicinterfaceCalculatorWs{
- @WebMethod
- publicintsum(intadd1,intadd2);
- @WebMethod
- publicintmultiply(intmul1,intmul2);
- }
- packagecom.xxx.test.ws;
- importjavax.jws.WebService;
- /**
- *CreatedwithIntelliJIDEA.
- *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")
- publicclassCalculatorimplementsCalculatorWs{
- publicintsum(intadd1,intadd2){
- returnadd1+add2;
- }
- publicintmultiply(intmul1,intmul2){
- returnmul1*mul2;
- }
- }
发布代码:
- packagecom.xxx.test.endpoint;
- importcom.xxx.test.ws.Calculator;
- importjavax.xml.ws.Endpoint;
- /**
- *CreatedwithIntelliJIDEA.
- *User:Administrator
- *Date:14-3-10
- *Time:下午3:10
- */
- publicclassCalclulatorPublisher{
- publicstaticvoidmain(String[]args){
- Endpoint.publish("http://localhost:8080/test/calc",newCalculator());
- //Endpoint.publish("http://10.3.18.44:8080/test/calc",newCalculator());
- }
- }
运行上面的这段代码,让你的webservice跑起来,接下来就可以使用Python来测试你的webservice代码了。
上面的代码跑起来后,你可以直接使用浏览器访问
- http://localhost:8080/test/calc?wsdl
接下来是python的测试代码:
- #!/usr/bin/python
- importsuds
- 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
- printclient
- sum_result=service.sum(10,34)
- printsum_result
- printclient.last_received()
- multiply_result=service.multiply(5,5)
- printmultiply_result
- printclient.last_received()
将上述代码保存成webservice.py文件,再修改一下可执行权限:
- chmod+xwebservice.py
- ./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:intarg0,xs:intarg1,)
- sum(xs:intarg0,xs:intarg1,)
- Types(4):
- multiply
- multiplyResponse
- sum
- sumResponse
- 44
- <?xmlversion="1.0"encoding="UTF-8"?>
- <S:Envelope>
- <S:Body>
- <ns2:sumResponse>
- <return>44</return>
- </ns2:sumResponse>
- </S:Body>
- </S:Envelope>
- 25
- <?xmlversion="1.0"encoding="UTF-8"?>
- <S:Envelope>
- <S:Body>
- <ns2:multiplyResponse>
- <return>25</return>
- </ns2:multiplyResponse>
- </S:Body>
- </S:Envelope>
注意,执行上面的代码时,有可能提示
- Traceback(mostrecentcalllast):
- File"ws.py",line1,in<module>
- importsuds
- ImportError:Nomodulenamedsuds
- wgethttp://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
- tarzxvfsuds-0.3.9.tar.gz
- cdsuds-0.3.9