采用axis2c进行webservice发布的流程3-通过wsdl文件,自动生成C的服务端代码

这一部分介绍采用wsdl文件生成axis2c的服务端代码。

2.1下载axis2-1.4.1的bin版

此处采用的是axis的1.4.1版本,由1.4.1java版本生成的c代码是对应的axis2c的1.3版本。

http://archive.apache.org/dist/ws/axis2/1_4_1/axis2-1.4.1-bin.zip下载axis2c的java1.4版本用于生成对应的C代码文件。

2.2下载axis2c版本

最新的axis2c的版本是1.6的,而由axis2的java生成的c版本是1.3的,这个后边有介绍。此处采用的axis2c是1.6的,可以兼容生成的代码,axis2c1.7版本的还处于rc阶段。

Axis2c须要从源码编译,centos6上二进制的安装包不大好找,fedora17有现成的rpm包,直接yum安装就可用,不过没有在此基础上测试过。

http://www.fayea.com/apache-mirror//ws/axis2/c/1_6_0/axis2c-src-1.6.0.tar.gz  下载linux下的源码包。

下面需要编译安装axis2c,这里的编译安装参考的是eucalyptus的处理流程。因为最终的服务时要发布在apache中,依照的是eucalyptus的服务模式。具体的编译安装过程如下,也可参考(http://open.eucalyptus.com/wiki/EucalyptusInstallationSource_v2.0):

A、安装环境centos6.2;

B、确定apache运行库目录:

安装httpd httpd-devel apr-devel

yum install httpd httpd-devel apr-devel

export APACHE_INCLUDES=/usr/include/httpd/

export APR_INCLUDES=/usr/include/apr-1/

C、配置编译选项:

export AXIS2C_HOME=/opt/axis2c-1.6.0 //设定好要安装的目录

tar zvxf axis2c-src-1.6.0.tar.gz

cd axis2c-src-1.6.0

CFLAGS="-w" ./configure --prefix=${AXIS2C_HOME} --with-apache2=$APACHE_INCLUDES --with-apr=$APR_INCLUDES --enable-multi-thread=no

在上述的编译选项中,如果选定--enable-multi-thread为no,会出现编译错误,需指明”-w”方可,意思就是取消编译器警告(具体原因还没有查明)。

D、安装axis2c:

make ; make install

至此,axis2c已经安装好了。可以在上简单测试下:

cd ${AXIS2C_HOME}/bin

./axis2_http_server

查看下服务的运行状态。

 

2.3生成C代码

采用axis2c的工具,生成对应的C服务端代码。

在axis2c的安装目录里${AXIS2C_HOME}/bin/tools/wsdl2c,有编译生成的工具WSDL2C.sh,可以借助于此工具生成客户端和服务端的代码,因为此处只是服务端的开发,故先在此处详细介绍服务端代码的生成方式,客户端代码生成将会在服务测试这部分补充。

将2.1节中下载下的axis的java版复制到合适的目录下,解压缩,设定好环境变量。

export AXIS2_HOME=axis目录

sh ${AXIS2C_HOME}/bin/tools/wsdl2c/WSDL2C.sh -uri dmsserver.wsdl  -sd -ss -d adb -u -uw -f -o generated | grep -v 'the classpath'

上边的意思就是说依据-uti dmsserver.wsdl这个服务文档,生成了服务端得代码-ss,代码最终生成在-o generated目录下。具体的命令参数可以通过—help查看。

没有错误的话,就可以在generated文件夹下看到生成的C服务端文件了,剩下的工作也就是在此中添加对应的逻辑处理工作。

根据我先前生成的wsdl(后期会将代码上传上来),可能会有下面的代码:

adb_ProductComplete.c

adb_ProductComplete.h

adb_ProductCompleteResponse.c

adb_ProductCompleteResponse.h

adb_ProductCompleteResponseType.c

adb_ProductCompleteResponseType.h

adb_ProductCompleteType.c

adb_ProductCompleteType.h

axis2_skel_DmsServer.c

axis2_skel_DmsServer.h

axis2_svc_skel_DmsServer.c

services.xml

build.sh

查看下最终的build.sh这个是编译服务的时候用的,不过此时暂时是用不到,暂略去不讲。

 

其中生成的这些文件分别与wsdl中的元素相对应,对比此处的wsdl,对应关系为:

"ProductCompleteType"

adb_ProductCompleteType.c

 

adb_ProductCompleteType.h

"ProductCompleteResponseType"

adb_ProductCompleteResponseType.c

 

adb_ProductCompleteResponseType.h

"ProductComplete"

adb_ProductComplete.c

 

adb_ProductComplete.h

"ProductCompleteResponse"

adb_ProductCompleteResponse.c

 

adb_ProductCompleteResponse.h

 

剩下的这些文件的是axis2c的框架程序和服务程序,具体如下:

axis2_skel_DmsServer.c

具体服务的逻辑处理部分

axis2_skel_DmsServer.h

 

axis2_svc_skel_DmsServer.c

Axis2c的框架程序

services.xml

部署时服务配置项

build.sh

服务编译脚本

这就是通过wsdl生成服务代码的过程。

posted on 2012-08-20 13:29  hanxiangduo  阅读(609)  评论(0编辑  收藏  举报

导航