在创建完BPEL工作流后,有时需要通过代码执行BPEL工作流,本文主要介绍如何使用Java编程语言调用BPEL工作流。
一、创建并部署BPEL工作流项目
1、创建BPEL工程
启动Eclipse,点击File->New->Other,然后选择BPEL 2.0 ->BEPL Project,在弹出的对话框中输入项目名Stream_bpel,结果如图1.1。

图1.1 创建BPEL工程
2、创建BPEL流程
右键项目Stream_bpel,点击New->Other,选择BPEL 2.0- > New BPEL Process File,出现New BPEL Process对话框,输入流程名Stream_Process,名字空间设为:下拉选择,点击Next,如图1.2;下一步选择同步流程,如图1.3;最后点击Finish,如图1.4。

图1.2 创建BPEL Process文件

图1.3 设置BPEL Process参数

图1.4 BPEL Process文件存放路径
3、BPEL流程设计
打开空间视图,Window->Show View->Palette,如图1.5,对应了第6张2.2小结里所有流程控制操作

图1.5 Palette面板
以上操作均提供可视化控件,通过拖放即可完成BPEL流程设计,一个简单的调用WPS服务的流程如图1.6,Assign_wps为WPS服务参数赋值,Invoke_wps调用WPS服务,Assign_output将结果赋值给输出。

图1.6 BPEL流程设计
4、导入调用WPS服务的wsdl文件
把从ODE下载的wps_service.wsdl复制到工程目录下。
5、为Invoke创建Partner Link
打开属性视图,Window->Show View->Properties,然后点击bpel流程中的invoke_wps节点,在Properties中选择Details选项卡,创建一个Partner Link,输入name,选择来自工程的服务例如wps_servicePortType,如图1.7,点击OK;然后输入Partner Link Type Name,如图1.8;最后输入一个Role Name即可,如图1.9,点击Finish。

图1.7 创建一个Partner Link

图1.8 设置Partner Link Type Name

图1.9 设置Role Name
一个服务可以有多种处理功能,对应java类中的每一个函数,接下来指定Operation。双击Quick Pick中对应的函数名,Operation参数会自动添加,并自动创建该函数所需的参数变量,如图1.10所示。

图1.10 设置Operation
6、赋值操作
bpel流程需要从外部传入参数,并将结果输出,由Assign操作来完成,Assign作用相当于“管道”,但是该操作只是负责向下传递参数。
- 添加bpel输入参数,如图1.11;并设置参数名称,如图1.12。

图1.11 添加bpel输入参数

图1.12 设置参数名称
2.wps服务参数赋值
选中Assign_wps节点,Properties->Details->new,从From里选择变量,赋值给To里的变量,每增加一个就New一次,如图1.13。

图1.13 服务参数赋值
- 将结果赋值给输出,如图1.14,BPEL流程赋值结束

图1.14 BPEL流程赋值结束
7、修改SOAP地址
stream_process对应的stream_processArtifacts.wsdl文件的Server的SOAP地址需要手动修改,如图1.15,默认生成的地址位于Tomcat服务器中:http://localhost:8080/stream_process,需要修改到ODE服务器下:http://localhost:8080/ode/processes/stream_process,Ctrl+S保存。

图1.15 修改SOAP地址
8、BPEL流程发布
BPEL流程最终的目的也是发布成一个web-service,只不过这个web服务自己基本上不实现功能,主要是通过调用别人的功能来完成任务。因此,最后也要把流程对应的WSDL发布出去。默认生成的WSDL只有类型定义,消息定义,和操作定义,缺少绑定信息和服务定义。
在bpel工程的bpelContent文件夹中创建一个deploy.xml文件。选择File->New->Other->BPEL 2.0 Apache ODE Deployment Descriptor,如图1.16所示,点击Next,直接Finish即会生成一个deploy.xml文件。

图1.16 创建一个deploy.xml文件
双击打开deploy.xml文件,配置Partner Link端口。client对应BPEL流程端口,选择stream_processPort;wps对应调用的外部服务wps_service端口,选择SOAP端口:wps_serviceHttpSoap11Endpoint,结果如图1.17。

图1.17配置Partner Link端口
二、创建SoapUI项目调用BPEL工作流
-
查看BPEL工作流的WSDL的url
双击tomcat的D:\apache-tomcat-6.0.33\bin目录下的startup.bat程序,打开tomcat服务器和ODE服务器,如图2.1所示;在ODE服务器打开完成后,在浏览器中输入http://localhost:8080/ode/deployment/services/查看已发布的BPEL工作流的WSDL的url,如图2.2所示,该BPEL工作流的WSDL的url即为:http://localhost:8080/ode/processes/Process_Workflow?wsdl

图2.1 打开ODE服务器

图2.2 查看BPEL工作流的WSDL的url
2、创建SoapUI工程
点击File->New Project创建SoapUI工程,如图2.3所示;左侧选择Create project from,右侧选择WSDL definition(SOAP),如图2.4所示;在Project Name后的框中输入项目名,并将第1步查看得到的BPEL工作流的WSDL的url输入Initial WSDL后的框中,最后点击OK按钮即可完成SoapUI工程的创建。

图2.3 开始创建工程

图2.4 选择项目创建来源

图2.5 配置项目名和WSDL地址
3、通过SoapUI运行BPEL工作流
运行方法1:展开创建的SoapUI项目,并双击Request 1即可看到右侧的BPEL工作流运行界面,如图2.6所示;在右侧input框中输入BPEL工作流输入参数,点击图中箭头指向的绿色三角即可开始运行BPEL工作流,如图2.7所示。

图2.6 配置项目名和WSDL地址

图2.7 配置参数并运行BPEL工作流
运行方法2:展开创建的SoapUI项目,并双击Request 1,然后点击右侧的XML即可看到BPEL工作流XML格式运行代码,如图2.8所示;在图中箭头指向的XML语句处添加BPEL语句运行输入参数,点击箭头指向的绿色三角形,即可开始运行BPEL工作流,如图2.9所示。

图2.8 配置项目名和WSDL地址

图2.9 配置参数并运行BPEL工作流
三、通过Java调用BPEL工作流
-
创建Java工程
点击File->New->Java Project创建Java工程,如图3.1所示;在Project Name后的框中输入项目名称,点击Finish完成项目的创建。

图3.1 开始创建Java工程

图3.2 配置Java工程
2、创建类,并编写代码
点开创建的Java工程,在src包名上点击New->Class开始创建Java类,如图3.3所示;在弹出的窗口的Name后框中输入类名,点击Finish完成Java类的创建,如图3.4所示;双击打开创建的Java类,并将下列代码粘贴至类中,修改代码中类名为刚创建的Java类的类名。

图3.3 开始创建Java类

图3.4 配置Java类
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
public class MonitorEmergencyTest {
// httpURLConnection方式调用
// java根据WSDL文档,如何调用WebService?
// https://blog.youkuaiyun.com/myblogzz/article/details/80311038
public static void main(String[] args) throws IOException {
// 第一步:创建服务地址
URL url = new URL("http://localhost:8080/ode/processes/Process_Workflow?wsdl");
// 第二步:打开一个通向服务地址的连接
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
// 第三步:设置参数
// 3.1发送方式设置:POST必须大写
connection.setRequestMethod("POST");
// 3.2设置数据格式:content-type
connection.setRequestProperty("content-type", "text/xml;charset=utf-8");
// 3.3设置输入输出,因为默认新创建的connection没有读写权限,
connection.setDoInput(true);
connection.setDoOutput(true);
// 第四步:组织SOAP数据,发送请求
String soapXML = getXML("1");
// 将信息以流的方式发送出去
OutputStream os = connection.getOutputStream();
os.write(soapXML.getBytes());
// 第五步:接收服务端响应,打印
int responseCode = connection.getResponseCode();
if (200 == responseCode) {
// 表示服务端响应成功 获取当前连接请求返回的数据流
InputStream is = connection.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
StringBuilder sb = new StringBuilder();
String temp = null;
while (null != (temp = br.readLine())) {
sb.append(temp);
}
/**
* 打印结果
*/
System.out.println(sb.toString());
System.out.println(parseXMLResponse(sb.toString()));
is.close();
isr.close();
br.close();
}
os.close();
}
public static String getXML(String monitorEmergencyType) {
String soapXML = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:sam=\"http://eclipse.org/bpel/sample\">\r\n" +
" <soapenv:Header/>\r\n" +
" <soapenv:Body>\r\n" +
" <sam:Process_WorkflowRequest>\r\n" +
" <sam:input>"+ monitorEmergencyType + "</sam:input>\r\n" +
" </sam:Process_WorkflowRequest>\r\n" +
" </soapenv:Body>\r\n" +
"</soapenv:Envelope>";
return soapXML;
}
public static String parseXMLResponse(String ResponseXML) {
String s = ResponseXML.substring(ResponseXML.indexOf("<tns:outputnumber>") + 18,
ResponseXML.toString().indexOf("</tns:outputnumber>"));
return s;
}
}

图3.5 编写代码
3、根据需要修改Java代码
根据创建的BPEL工作流和SoapUI工程,修改上一步骤中添加到Java工程中的Java代码,主要需要修改三个位置。
(1)修改WSDL的url
如图3.6所示,修改图中红色方框框起来的WSDL url为第二大步中第1小步(查看BPEL工作流的WSDL的url)中得到的WSDL的url

图3.6 修改WSDL的url
(2) 修改BPEL调用XML代码
打开上一步骤创建的SoapUI项目,双击Request 1打开右侧窗口,点击XML即可看到对应运行BPEL工作流的XML代码,如图3.7所示;将复制的XML代码粘贴到getXML函数中,并根据XML语句中输入参数的个数修改getXML函数的参数个数,如图3.8所示。

图3.7 复制BPEL工作流调用XML代码

图3.8 修改getXML函数
(3) 修改getXML函数调用参数
根据getXML函数的参数个数及类型修改图中调用getXML函数的参数,如图3.9所示。

图3.9 修改getXML调用参数
4、运行Java代码
在Java类中,右键->Run As->Java Application,即可运行调用BPEL工作流的Java代码。

图3.10 运行Java代码
本文介绍如何使用Java编程语言调用BPEL工作流,包括创建和部署BPEL工作流项目、通过SoapUI调用以及通过Java代码直接调用的方法。
2768

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



