pythonがjavaを呼び出す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
44
25
25
三、よくある問題
なお、上記のコードを実行すると、次のプロンプトが表示される可能性があります.
Traceback (most recent call last):
File "ws.py", line 1, in
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.