python呼叫java編寫的Webservice
阿新 • • 發佈:2019-02-20
首先我使用的是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; } }
釋出程式碼:
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()); } }
執行上面的這段程式碼,讓你的webservice跑起來,接下來就可以使用Python來測試你的webservice程式碼了。
上面的程式碼跑起來後,你可以直接使用瀏覽器訪問
http://localhost:8080/test/calc?wsdl
來驗證是否啟動成功。
接下來是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
然後就可以直接執行了:
./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
<完工>