Java调用BPEL工作流方法

在创建完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复制到工程目录下。

打开属性视图,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作用相当于“管道”,但是该操作只是负责向下传递参数。

  1. 添加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. 将结果赋值给输出,如图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工作流

  1. 查看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工作流

  1. 创建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.csdn.net/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代码

©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值