webservice 简单实例

来源:互联网 发布:卖耐克阿迪折扣店淘宝 编辑:程序博客网 时间:2024/05/02 01:27


一、

文档大部分内容是网上已有的文档,我动手操作后还是有些出入。所以在此基础上又完善了一下文档

文档做的不够细致,请各位看官见谅!

我应用的配置:

Eclipse IDE for java EE DevelopersLuna

Apache ODE 1.3.6

BPEL 2.0 http://download.eclipse.org/bpel/site/1.0.4

 环境配置

1.1  预置环境

Eclipse IDE for Java EE

luna

1.2  配置Apache ODE(BPEL解析器)

1)下载地址http://ode.apache.org/getting-ode.html,选择1.3.6release版本

2)解压文件,将ode.war拷贝到tomcatwebapps目录下

3)启动tomcat,输入http://localhost:8080/ode可以看到ODE的启动界面,如下所示

至此,ODE 安装成功。

 

1.3  安装BPEL Designer插件

1)启动Eclipse,选择Help -> Install New Software,进入Install wizard,如下所示

2)选择Add按钮,并输入如下地址:

http://download.eclipse.org/bpel/site/1.0.4(版本号),点击OK

网上好多文档的地址都不同,我也是搜索实验了好多才确定这个是正确。记得加版本号

如果不加会读不到,我是没搞懂什么原因

3)根据下图所示,安装BPEL Visual Designer

4)安装成功后,在Eclipse中选择File->New-> Other,可以查看到BPEL选项,如下图所示:

      至此,BPEL开发环境配置完成。

 

二、加减法Web Services的开发部署。

2.1   新建Web工程

启动Eclipse,选择File->New->Other->Web->Dynamic Web Project,新建一个web工程。命名为webServiceProj,如下图所示:

 

2.2   新建加减法AddService以及SubService

建立AddService以及SubService两个class,分别是加减法的实现流程,如下图所示:

      代码

publicclass AddService {

   publicdouble add(double a,double b){

      System.out.println(a +"+" + b +" = "+(a+b));

      return a+b;

   }

}

publicclass SubService {

   publicdouble sub(double a,double b){

      System.out.println(a +"-" + b +" = "+(a-b));

      return a-b;

   }

}

 

2.3   生成加减法的Web Service WSDL

1)     生成加减法的Web Service WSDL描述文件,右键选择AddService.java,选择Web Services->Create Web Service,按照如下界面选择功能点:

2)     点击Finish就会生成java类对应的wsdl文件和配置文件,并发布到tomcat中,同时会生成调用服务的客户端,选择adddoubledouble),对该方法进行测试,如下所示:

 

同样生成SubService.javaWSDL文件。

2.4   加减法Web Services的部署

为了能够让其他服务去调用加减法服务,必须先将其部署在服务器上。首先,右键webServiceProj工程,Export->Web->WAR file,导出War包,将导出的War包放到tomcatwebapps目录下,即完成部署。

 

 

2.5   测试服务是否发布成功,在浏览器里输入http://localhost:8080/webServiceProj/services/AddService?wsdl,若能打开加法服务对应的wsdl就意味着服务发布成功。

三、BPEL实例开发、部署

3.1 创建BPEL工程。

启动Eclipse,点击File->New->Other,然后选择BPEL 2.0 ->BEPL Project,在弹出的对话框中输入项目名Caculator

3.2 创建BPEL流程,

右键Caculator,点击New->Other,选择BPEL 2.0- > New BPEL Process File,出现New BPEL Process对话框,输入流程名CaculatorProcess,名字空间设为:下拉选择,点击NextTemplate:Asynchronous BPEL Process,点击下一步 如下图所示:

 

 

3.3 导入加法服务和减法服务的wsdl文件

AddService.wsdlSubService.wsdl复制到工程目录里。

 

3.4 设置伙伴链接

Bpel把涉及其中的所有服务都称之为伙伴链接。Bpel对应的wsdlCaculatorProcess.bpel)本身也是一个伙伴链接。系统已经自动生成了。对于流程中要用到的加法服务,减法服务,应该生成对应的伙伴链接。

a)     在右上角的Partner Links中,增加两个链接,分别是addPLsubPL。如下图所示:

b)     设置伙伴链接,右击addPL,选择属性打开属性视图,在属性视图中Details页面中点Browser,打开对话框。点Add WSDL把用到的两个WSDLAddService.wsdlSubService加进来

 

选上AddService接口,点Ok,弹出伙伴链接类型定义,把名字取为addPLT,点Next。要求输入Role Name,这里输入“addProvider,Finish完成。

 

同时在属性视图中把ParterRole选为addProvider。如下图所示:

 

      

以同样建立subPL设置。

 

3.5 修改CaculatorProcessArtifacts.wsdl中的输入输出

因为其默认的输入输出不符合我们项目的要求,右键CaculatorProcessArtifacts.wsdl文件,用open with WSDL Editor打开该文件,转到设计视图里。如下图所示:

 

      单击input后边对应的箭头,打开一个新的Editor对输入消息进行配置。进去后选中类型,右键,就可以增加元素,并设置元素的类型,结果如下,其中ab分别表示需要加减的2个值,type用来区别加减法,当type=add’,时,调用加法服务,当type=sub’时调用减法服务。

             同理,单击output后边对应的箭头,修改类型,结果如下:

 

3.6 创建调用服务时需要的变量

每次invoke一个服务时都要有对应的变量,同时要进行赋值。我们这里要调用加法服务和减法服务。因此需要额外加入addRequest,addResponse,subRequest,subResponse加完后的效果如下:

 

3.7 配置变量

点上addRequest变量,属性视图中切换到Details页,点右上角的Browse..按钮,打开类型选择对话框。addRequest是加法服务的输入,因此把它的类型设为加法服务里的输入定义就可以了。

一个变量的类型可以是简单类型,也可以是复杂类型,还可以是wsdl中的Message定义。简单起见,我们这里就把addRequest的类型设为AddService服务中的addRequest Message

同理,其他3个变量也做相应的处理。

 

3.8 BPEL流程设计

打开控件视图,Window->Show View->Palette,将IF控件,拖到receiveInput后面,选中刚建好的if模块,点右键,依次点Add ElseIf Else。基本结构如下:

同理,拖入其他控件,最终效果如下图哦所示:

a)     If语句的配置

选择If,在属性视图中点开Details页,在Expression language选择Same as Process做如下配置:输入条件语句:$input.payload/tns:type='add'

如下图所示:

同样,选择Else If

b)     Assign语句的设置

第一个Assign的作用是把输入变量input中的前两个参数传给addRequest变量。需要注意的是,BEPL中的变量赋值只能是一个一个的赋,不能直接把input赋给addRequest(当然这里也不匹配,即使匹配也不行),而只能把input下的参数挨个赋给addRequest。如下图所示,将input的值a赋给addRequest的值a,此时会弹出一个对话框,询问是否要初始化addRequest,选择Yes。同理,将input的值b赋给addRequest的值b

对于Assign1,它的作用是把addResponse的值传给流程的输出变量output.如果如下:

对于Assign4,直接返回一个错误消息就行了,别忘了这些变量的类型都是消息,因此直接赋值也需要返回一条相应的消息。为了不会书写错误,我首先还是点New..,但此时From里需不选任何东西,直接在to里选择outputàpayloadàresult,然后再在别处点一下鼠标,Eclipse会提醒你要给output变量赋初值。点”Yes”

Variable to Variable赋值语句删掉。然后把上面的<tns:result></tns:result>间加上一句话

需要注意的是,To里面选择的应该是outputàpayload,而不是下面的result.

   

剩下Assign的配置和上面相同!

c)     Invoke语句的设置

Invoke的作用是调用伙伴链接对应接口下的对应操作,还需要指定输入输出变量。左键选择InvokeAddInvoke),在属性视图的Details页面中进行如下配置:

                           同理,处理InvokeSubInvoke1):

 

 

 

 

 

 

 

 

 

注意:

 

Caculator对应的CaculatorProcessArtifacts.wsdl文件的Serversoapaddress需要手动修改,默认生成的地址是:

<soap:address location="http://localhost:8080/Caculator"/>

需要修改成:

<soap:address location="http://localhost:8080/ode/processes/Caculator/CaculatorProcess"/>

                         Caculator是项目名称, CaculatorProcess是上面的那个bpel文件的名字,也就是主流程的名字。

也可以通过右击上面的 CaculatorProcess,打开属性选项卡。

address这一行里面修改。

 

3.9 BPEL流程发布

BPEL流程最终的目的也是发布成一个web-service,只不过这个web服务自己基本上不实现功能,主要是通过调用别人的功能来完成任务。因此,最后也要把流程对应的WSDL发布出去。默认生成的WSDL只有类型定义,消息定义,和操作定义,缺少绑定信息和服务定义。

选择File->New Other BPEL 2.0 Apache ODE Deployment Descriptor,如下所示,直接Finish即会生成一个deploy.xml文件。

打开配置伙伴端口:

四、BPEL运行与测试

4.1   创建ODE服务器

首先找到当前bpel项目的文件目录,把整个项目复制到 tomcat目录下的webapps\ode\WEB-INF\processes下面,然后打开新复制过来的bpel项目目录,可以看到文件结构如下:

然后再打开bpelContent文件夹,把里面的内容复制到出来,直接放在bpel项目目录下,就像这样

 

 

4.2   测试AddService.wsdl以及SubService.wsdl

重新回到eclipse,右键AddService.wsdl,选择Web Services->Test with web service explorer,在弹出的页面中,选择AddServiceSoapBinding中的add方法,进行测试,若成功,测试结果如下所示:

      同理,测试SubService,结果如下所示:

 

4.3   测试BPEL

至于测试bpel,经过我的反复验证,发现在eclipsetomcatode插件是有问题的。

所以首先都把eclipse里面的服务器关掉。

在外部启动重新启动tomcat

然后在浏览器里面打开地址:http://localhost:8080/ode/

可以看到有:  

processes 1”的字样,这是因为我成功部署了三个bpel项目,

数字的多少代表部署了多少个bpel项目。

 

打开processes选项卡

 

可以看到目前已经部署了的bpel项目:

证明已经部署发布成功了。

 

接下来是最终的测试。

重新打开eclipse

再次测试里面的wsdl文件。终于都得到结果了。(再次提醒,eclipse里面的插件tomcat服务器是关闭的,tomcat服务器需要在外部打开)

 

 

0 0
原创粉丝点击