python开发webService接口给java调用

python 专栏收录该内容
2 篇文章 0 订阅

一、python webService接口

首先系统(winds)上要有python,本人安装的是:Anaconda2-5.0.1-Windows-x86.exe,环境搭建不会请自行百度。

其次要用python进行webservice开发,还需要一些库:

1、lxml :
  命令行下 easy_install lxml 就能安装,如果不能正常安装下载lxml安装 :https://pypi.python.org/pypi/lxml/3.2.2,下载后,打开解压的文件夹,在当前文件夹中打开命令行工具,同时按中ctrl+shift键,点击“在此处打开命令行窗口” ,在命令行窗口输入python setup.py install 回车即可。注意这里他会依赖Microsoft vissual C++ ,如果安装报错,你直接根据他提供的连接去下载安装即可,安装完成,再次执行命令。

如下图:

  安装完成,如下图

  

 

 

2、pytz :
   命令行下  easy_install pytz 就能安装,如果不能正常安装下载pytz安装 :https://pypi.python.org/pypi/pytz/

3、zope:

  命令行下  easy_install zope 就能安装,如果不能正常安装下载zope安装 :https://pypi.python.org/pypi/zope.interface#download

4、pyOpenSSL

 命令行下  easy_install pyOpenSSL 就能安装,如果不能正常安装下载pyOpenSSL安装 :https://pypi.python.org/pypi/pyOpenSSL

5、twisted:

  命令行下  easy_install twisted 就能安装,如果不能正常安装下载twisted安装     https://pypi.python.org/pypi/Twisted/ or https://pypi.python.org/simple/twisted/

6、soaplib:

  命令行下  easy_install soaplib 就能安装,如果不能正常安装下载soaplib安装 :    https://github.com/soaplib/soaplib

7、suds:

  命令行下  easy_install suds 就能安装,如果不能正常安装下载suds安装 :    https://pypi.python.org/pypi/suds-jurko/0.6

由于上面的安装包存在依赖关系最好安装顺序下载和安装。安装完成后就可以进行webservice的开发和调用了。

在开发工具里面(或者任意地方)新建一个py文件,例如:server.py,代码如下

  

# coding: utf-8
import soaplib
from soaplib.core.util.wsgi_wrapper import run_twisted #发布服务
from soaplib.core.server import wsgi
from soaplib.core.service import DefinitionBase  #所有服务类必须继承该类
from soaplib.core.service import soap  #声明注解
from soaplib.core.model.clazz import Array #声明要使用的类型
from soaplib.core.model.clazz import ClassModel  #若服务返回类,该返回类必须是该类的子类
from soaplib.core.model.primitive import Integer,String

class C_ProbeCdrModel(ClassModel):
   __namespace__ = "C_ProbeCdrModel"
   Name=String
   Id=Integer
class HelloWorldService(DefinitionBase):  #这是一个web service
   @soap(String,_returns=String)    #声明一个服务,标识方法的参数以及返回值
   def say_hello(self,name):      #定义接口方法say_hello,参数name;下同
      #这里是接口的具体的操作,这里根据自己的情况.....
      return 'hello %s!'%name
   @soap(_returns=Array(String))
   def GetCdrArray(self):
      L_Result=["1","2","3"]
      return L_Result
   @soap(_returns=C_ProbeCdrModel)
   def GetCdr(self):     #返回的是一个类,该类必须是ClassModel的子类,该类已经在上面定义
      L_Model=C_ProbeCdrModel()
      L_Model.Name=L_Model.Name
      L_Model.Id=L_Model.Id
      return L_Model
if __name__=='_main__':
   soap_app=soaplib.core.Application([HelloWorldService], 'tns')
   wsgi_app=wsgi.Application(soap_app)
   print 'listening on 127.0.0.1:7789'
   print 'wsdl is at: http://127.0.0.1:7789/SOAP/?wsdl'
   run_twisted( ( (wsgi_app, "SOAP"),), 7789)
if __name__=='__main__':  #发布服务
   try:
      from wsgiref.simple_server import make_server
      soap_application = soaplib.core.Application([HelloWorldService], 'tns')
      wsgi_application = wsgi.Application(soap_application)
      server = make_server('localhost', 7789, wsgi_application)
      server.serve_forever()
   except ImportError:
      print 'error'

如果是python开发工具,直接启动 。运行服务后打开浏览器,地址栏上键入: http://localhost:7789/SOAP/?wsdl;

如果是没有在工具里面,则需要使用python服务来执行server.py文件(找到python安装目录,D:\Users\yangminit\AppData\Local\Continuum\anaconda2\  使用python.exe 执行server.py文件),注意执行窗口不要关闭。
看到如下即为成功;
二、java中调用,注意相关jar包需要下载,

import java.util.Date;  
import java.text.DateFormat;  
import org.apache.axis.client.Call;  
import org.apache.axis.client.Service;  
import javax.xml.namespace.QName;  
import java.lang.Integer;  
import javax.xml.rpc.ParameterMode; 

public class CaClient {

public static void test(){
        try {  
            String endpoint = "http://localhost:7788/SOAP/?wsdl";  
            // 直接引用远程的wsdl文件  
            // 以下都是套路  
            Service service = new Service();  
            Call call = (Call) service.createCall();  
            call.setTargetEndpointAddress(endpoint);  
            call.setOperationName("say_hello");// WSDL里面描述的接口名称  
            call.addParameter("name",  
                    org.apache.axis.encoding.XMLType.XSD_DATE,  
                    javax.xml.rpc.ParameterMode.IN);// 接口的参数  
            call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);// 设置返回类型  
            String temp = "测试人员";  
            String result = (String) call.invoke(new Object[] { temp });  
            // 给方法传递参数,并且调用方法  
            System.out.println("result is " + result);  
        } catch (Exception e) {  
            System.err.println(e.toString());  
        }   
    }
    public static void main(String[] args) {
        test();
    }
}

  • 2
    点赞
  • 2
    评论
  • 14
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2021 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值