python调用java的Webservice示例

时间:2021-07-31 13:36:09 

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

标签:python,java,Webservice
0
投稿

猜你喜欢

  • springboot如何读取自定义properties并注入到bean中

    2022-12-16 22:22:09
  • Java Socket编程(三) 服务器Sockets

    2023-05-24 21:18:19
  • Hibernate中的多表查询及抓取策略

    2022-02-22 18:58:28
  • Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据实例

    2022-08-19 20:58:06
  • Java Socket实现单线程通信的方法示例

    2022-04-22 15:43:02
  • java虚拟机原理:类加载过程详解

    2023-08-09 11:35:37
  • 浅析Bean Searcher 与 MyBatis Plus 区别介绍

    2022-08-28 03:25:41
  • 解决@RequestBody搭配@Data的大坑

    2022-08-29 18:25:35
  • java基础的详细了解第四天

    2022-11-25 07:24:51
  • SpringBoot整合mybatis的方法详解

    2023-09-02 06:23:57
  • Java Lambda 表达式源码解析

    2021-06-30 08:12:48
  • Java事务管理学习之Spring和Hibernate详解

    2023-04-11 00:01:25
  • JAVA如何定义构造函数过程解析

    2023-11-04 08:15:09
  • Feign如何自定义注解翻译器

    2022-11-09 07:05:04
  • 鉴权认证+aop+注解+过滤feign请求的实例

    2022-06-05 14:25:34
  • Java接口默认方法带来的问题分析【二义性问题】

    2023-11-27 20:32:55
  • C#实现GZip压缩和解压缩入门实例

    2021-05-29 08:20:45
  • SpringBoot常用数据库开发技术汇总介绍

    2023-11-11 09:39:22
  • java面向对象设计原则之里氏替换原则示例详解

    2023-02-02 05:04:41
  • C#中Invoke的用法讲解

    2023-10-26 03:24:36
  • asp之家 软件编程 m.aspxhome.com