python調用java編寫的Webservice

首先我使用的是java自帶的對webservice的支持包來編寫的服務端和發佈程序,代碼如下。

webservice的接口代碼:

package jk.kaifa.ws;

import javax.jws.WebMethod;
import javax.jws.WebService;

@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 jk.kaifa.ws;

import javax.jws.WebService;

@WebService(
		portName = "CalculatorPort",
		serviceName = "CalculatorService",
		targetNamespace = "http://xxx.com/wsdl",
		endpointInterface = "jk.kaifa.ws.CalculatorWs")
public class Calculator implements CalculatorWs{

	@Override
	public int sum(int add1, int add2) {
		// TODO Auto-generated method stub
		return add1 + add2;
	}

	@Override
	public int multiply(int mul1, int mul2) {
		// TODO Auto-generated method stub
		return mul1 * mul2;
	}

}


發佈代碼:

package jk.kaifa.endpoint;

import javax.xml.ws.Endpoint;

import jk.kaifa.ws.Calculator;

public class CalculatorPublisher {
	public static void main(String[] args){
		Endpoint.publish("http://localhost:8080/test/calc", 
				new Calculator());
	}

}
運行上面的這段代碼,讓你的webservice跑起來,接下來就可以使用Python來測試你的webservice代碼了。

上面的代碼跑起來後,你可以直接使用瀏覽器訪問 http://localhost:8080/test/calc?wsdl  點擊打開鏈接 來驗證是否啓動成功。


接下來是python的測試代碼:

import suds

url = 'http://localhost:8080/test/calc?wsdl'
client = suds.client.Client(url)
service = client.service

print client

sum_result = service.sum(10,34)
multiply_result = service.multiply(2,3)
print sum_result
print multiply_result
print client.last_received()


輸出結果如下:

Suds ( https://fedorahosted.org/suds/ )  version: 0.4 GA  build: R699-20100913

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
6
<?xml version="1.0" encoding="UTF-8"?>
<S:Envelope>
   <S:Body>
      <ns2:multiplyResponse>
         <return>6</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庫,可以用easy_install安裝suds庫:



easy_install如何使用可以百度一下,這裏就不詳細講解了




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章