关闭

Activiti工作流REST方式访问URI的解析

126人阅读 评论(0) 收藏 举报
分类:

在Activiti工作流中提供一种访问方式为REST方式访问。针对查询字符串的格式采用一个如下一个工具类解析Uri中的提供的各种信息。

package org.activiti.explorer.util;

 

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.net.URLEncoder;

import java.util.ArrayList;

import java.util.LinkedHashMap;

import java.util.List;

import java.util.Map;

import java.util.Map.Entry;

import java.util.Scanner;

 

/**

 * @author 'Frederik Heremans'

 */

public class UriUtility {

 

  private static final String PARAMETER_SEPARATOR = "&";

  private static final String QUERY_STRING_SEPARATOR = "?";

  private static final String NAME_VALUE_SEPARATOR = "=";

  private static final String URL_PART_SEPARATOR = "/";

 

  /**

   * Get path fragments. eg: "/task/inbox/123" will return a list with three

   * values: "task", "inbox" and "123" in that order.

   */

  public static List<String> getFragmentParts(String url) {

    if (url != null) {

      List<String> parts = new ArrayList<String>();

      String[] partsArray = url.split(URL_PART_SEPARATOR);

      for (String part : partsArray) {

        if (part.length() > 0) {

          parts.add(part);

        }

      }

      return parts;

    }

    return null;

  }

 

  /**

   * Extracts the query parameters from the given url fragment.

   */

  public static String extractQueryString(String fragment) {

    if (fragment != null) {

      int firstIndex = fragment.indexOf(QUERY_STRING_SEPARATOR);

      if (firstIndex >= 0) {

        return fragment.substring(firstIndex);

      }

    }

    return null;

  }

 

  /**

   * Extracts uri from the given url fragment, without the query params.

   */

  public static String extractUri(String fragment) {

    if (fragment != null) {

      int firstIndex = fragment.indexOf(QUERY_STRING_SEPARATOR);

      if (firstIndex >= 0) {

        return fragment.substring(0, firstIndex);

      } else {

        // No query string present, use full fragment

        return fragment;

      }

    }

    return null;

  }

 

  /**

   * Parses the parameters from the given url query string. When no encoding is

   * passed, default UTF-8 is used. Based on the implementation in Commons

   * httpclient UrlEncodedUtils.

   */

  public static Map<String, String> parseQueryParameters(String queryString, String encoding) {

    Map<String, String> parameters = new LinkedHashMap<String, String>();

    if (queryString != null) {

      // Remove '?' if present at beginning of query-string

      if(queryString.startsWith(QUERY_STRING_SEPARATOR)) {

        queryString = queryString.substring(1);

      }

     

      Scanner scanner = new Scanner(queryString);

      scanner.useDelimiter(PARAMETER_SEPARATOR);

      while (scanner.hasNext()) {

        final String[] nameValue = scanner.next().split(NAME_VALUE_SEPARATOR);

        if (nameValue.length == 0 || nameValue.length > 2)

          throw new IllegalArgumentException("bad parameter");

 

        final String name = decode(nameValue[0], encoding);

        String value = null;

        if (nameValue.length == 2) {

          value = decode(nameValue[1], encoding);

        }

        parameters.put(name, value);

      }

    }

    return parameters;

  }

 

  /**

   * Gets a valid query-string based on the given parameters.

   */

  public static String getQueryString(Map<String, String> parameters) {

    StringBuilder result = new StringBuilder();

 

    if (parameters != null) {

      for (Entry<String, String> param : parameters.entrySet()) {

        final String encodedName = encode(param.getKey(), null);

        final String value = param.getValue();

        final String encodedValue = value != null ? encode(value, null) : "";

        if (result.length() > 0) {

          result.append(PARAMETER_SEPARATOR);

        } else {

          result.append(QUERY_STRING_SEPARATOR);

        }

        result.append(encodedName);

        result.append(NAME_VALUE_SEPARATOR);

        result.append(encodedValue);

      }

    }

 

    return result.toString();

  }

 

  /**

   * Gets full path based on the given parts.

   */

  public static String getPath(List<String> parts) {

    if (parts != null) {

      StringBuilder result = new StringBuilder();

      for (String part : parts) {

        if(result.length() > 0) {

          result.append(URL_PART_SEPARATOR);

        }

        result.append(part);

      }

      return result.toString();

    }

    return "";

  }

 

  private static String decode(final String content, final String encoding) {

    try {

      return URLDecoder.decode(content, encoding != null ? encoding : "UTF-8");

    } catch (UnsupportedEncodingException problem) {

      throw new IllegalArgumentException(problem);

    }

  }

 

  private static String encode(final String content, final String encoding) {

    try {

      return URLEncoder.encode(content, encoding != null ? encoding : "UTF-8");

    } catch (UnsupportedEncodingException problem) {

      throw new IllegalArgumentException(problem);

    }

  }

}

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

【Activiti工作流】4.准备开发环境(配置文件)和核心api的介绍

我们上一次已经搭建了Activiti工作流工程的环境, 1.在Eclipse中加入了Activiti插件 2.创建了Activiti工程 3.引入了所需要的jar包 4.创建了加载流程引擎配置...
  • u013517797
  • u013517797
  • 2017-02-26 18:26
  • 2388

Activiti框架的工作流

一.Activiti的简单使用         activiti的运转是基于流程引擎ProcessEngine和数据库的,一共操作23张表,常用的有7张表,主要关于流程部署,流程定义,流程实例,任务,...
  • hspringh
  • hspringh
  • 2016-12-26 13:09
  • 855

Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作

可以在项目中加入log4j,将logj4.properties文件拷入到src目录下,这样框架执行的sql就可以输出到到控制台,log4j提供的日志级别有以下几种: Fatal  error  wa...
  • xnf1991
  • xnf1991
  • 2016-09-26 23:00
  • 5955

工作流学习——Activiti流程定义管理三步曲

我们这篇文章主要讲解了流程定义的概念,然后详细的讲解了不同方式的流程定义部署,还讲解了流程定义的查询、流程定义的文档资源的获取、流程定义的删除等这些内容。
  • zwk626542417
  • zwk626542417
  • 2015-06-23 09:51
  • 24653

Activiti - 设置会签

正好有两个人问道:支持会签吗? 也有人也问道:什么是会签? 如果从process engine的角度上讲呢? 可以说一个task节点下有多个task instance。 而不是一个从task...
  • junlong750
  • junlong750
  • 2016-03-16 14:44
  • 4850

工作流框架Activiti常用功能初探

Activiti项目是一项新的基于Apache许可的开源BPM平台,从基础开始构建,旨在提供支持新的BPMN 2.0标准,包括支持对象管理组(OMG),面对新技术的机遇,诸如互操作性和云架构,提供技术...
  • puhaiyang
  • puhaiyang
  • 2016-06-28 17:28
  • 8804

Activiti工作流(一)之基本操作介绍

工作流的概念:        工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文档、信息或任务的过程自动...
  • h254532699
  • h254532699
  • 2017-01-10 13:06
  • 1011

工作流学习——Activiti整体认识二步曲

我们本篇文章主要讲述了activiti的环境准备包含各个软件的版本和安装流程设计器,接下来我们讲解了两种方式来创建activiti的23张表,还夹杂着一个数据库连接url的写法,接下来是activit...
  • zwk626542417
  • zwk626542417
  • 2015-06-22 17:47
  • 19137

Activiti工作流引擎的官方实例配置详细步骤

概述 创建Java web项目 复制文件到web项目中 创建数据库 启动运行 示例配置完成概述学习Activiti工作流引擎,第一步自然是是下载官方提供的Demo源码来参考。 Activiti官网:...
  • YEN_CSDN
  • YEN_CSDN
  • 2017-01-20 19:57
  • 14847

Activiti工作流服务和功能介绍

Activiti 基本架构和服务组件介绍 Activiti 流程引擎重点关注在系统开发的易用性和轻量性上。每一项 BPM 业务功能 Activiti 流程引擎都以服务的形式提供给开发人员。通过使用这...
  • OoO__0o0
  • OoO__0o0
  • 2016-11-25 09:45
  • 2239
    个人资料
    • 访问:27217次
    • 积分:761
    • 等级:
    • 排名:千里之外
    • 原创:38篇
    • 转载:75篇
    • 译文:0篇
    • 评论:0条
    文章分类