当前位置 博文首页 > python调用java的Webservice示例

    python调用java的Webservice示例

    作者:admin 时间:2021-06-29 09:03

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

    OK。

    js