一、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();
}
}
本文详细介绍了在Windows环境下使用Python进行WebService接口开发的步骤,包括所需库的安装,如lxml、pytz等,以及如何通过Python代码创建和发布WebService。此外,还提供了在Java中调用Python WebService的示例代码。

656

被折叠的 条评论
为什么被折叠?



