pythonがjavaを呼び出すWebserviceの例

4356 ワード

一、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


  
     
         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.