iphone如何查常去地方怎么查看去过的地方

下次自动登录
现在的位置:
& 综合 & 正文
解决Activiti Modeler 部署中文流程 报错问题
我的Activti 版本是5.13
在画流程图的时候 含有中文的流程图无法部署,看了半天。直接把流程图转成base64来解决。
1.在Modeler 保存流程是调用方法org.activiti.editor.rest.model.ModelSaveRestResource
下面是修改后的完整 json_xml传递过来发现是gbk的,这里我转成utf8 然后在进行base64编码。
/* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
package org.activiti.editor.rest.
import java.io.ByteArrayInputS
import java.io.ByteArrayOutputS
import java.io.InputS
import org.activiti.editor.constants.ModelDataJsonC
import org.activiti.engine.ProcessE
import org.activiti.engine.RepositoryS
import org.activiti.engine.repository.M
import org.apache.batik.transcoder.TranscoderI
import org.apache.batik.transcoder.TranscoderO
import org.apache.batik.transcoder.image.PNGT
import org.codehaus.jackson.map.ObjectM
import org.codehaus.jackson.node.ObjectN
import org.restlet.data.F
import org.restlet.data.S
import org.restlet.resource.P
import org.restlet.resource.ServerR
import org.slf4j.L
import org.slf4j.LoggerF
import sun.misc.BASE64E
* @author Tijs Rademakers
public class ModelSaveRestResource extends ServerResource implements
ModelDataJsonConstants {
protected static final Logger LOGGER = LoggerFactory
.getLogger(ModelSaveRestResource.class);
public void saveModel(Form modelForm) {
ObjectMapper objectMapper = new ObjectMapper();
String modelId = (String) getRequest().getAttributes().get("modelId");
// System.out.println("json " + modelForm.getFirstValue("json_xml"));
* ObjectNode modelNode = (ObjectNode)
* objectMapper.readTree(modelForm.getFirstValue("json_xml"));
* JsonToBpmnExport converter = new JsonToBpmnExport(modelNode);
* byte[] bpmnBytes = converter.convert();
* System.out.println("bpmn " + new String(bpmnBytes));
RepositoryService repositoryService = ProcessEngines
.getDefaultProcessEngine().getRepositoryService();
Model model = repositoryService.getModel(modelId);
ObjectNode modelJson = (ObjectNode) objectMapper.readTree(model
.getMetaInfo());
modelJson.put(MODEL_NAME, modelForm.getFirstValue("name"));
modelJson.put(MODEL_DESCRIPTION,
modelForm.getFirstValue("description"));
model.setMetaInfo(modelJson.toString());
model.setName(modelForm.getFirstValue("name"));
byte[] svg_xml=modelForm.getFirstValue("svg_xml").getBytes("UTF-8");
//转成UTF-8 然后使用base64编码
String gbk=new String(modelForm.getFirstValue("json_xml").getBytes("GBK"));
String iso = new String(gbk.getBytes("UTF-8"),"ISO-8859-1");
String utf8=new String(iso.getBytes("ISO-8859-1"),"UTF-8");
json_xml=new BASE64Encoder().encode(utf8.getBytes("UTF-8")).getBytes();
repositoryService.addModelEditorSource(model.getId(),json_xml);
InputStream svgStream = new ByteArrayInputStream(svg_xml);
TranscoderInput input = new TranscoderInput(svgStream);
PNGTranscoder transcoder = new PNGTranscoder();
// Setup output
ByteArrayOutputStream outStream = new ByteArrayOutputStream();
TranscoderOutput output = new TranscoderOutput(outStream);
// Do the transformation
transcoder.transcode(input, output);
final byte[] result = outStream.toByteArray();
repositoryService.addModelEditorSourceExtra(model.getId(), result);
outStream.close();
repositoryService.saveModel(model);
} catch (Exception e) {
LOGGER.error("Error saving model", e);
setStatus(Status.SERVER_ERROR_INTERNAL);
2.取流程图的时候调用的是 org.activiti.engine.impl.RepositoryServiceImpl 下面是修改后的代码
public byte[] getModelEditorSource(String modelId) {
byte[] json_byte= commandExecutor.execute(new GetModelEditorSourceCmd(modelId));
if(!new String(json_byte).startsWith("{")){
json_byte=new BASE64Decoder().decodeBuffer(new String(json_byte));
return json_
} catch (IOException e) {
e.printStackTrace();
return json_
3.发布的时候 String又成了默认编码
org.activiti.editor.ui.EditorProcessDefinitionDetailPanel
String bmpnString=new String(bmpnBytes) 改为String bmpnString=new String(bmpnBytes,“utf-8”)
protected void deployModelerModel(final ObjectNode modelNode) {
BpmnModel model = new BpmnJsonConverter().convertToBpmnModel(modelNode);
byte[] bpmnBytes = new BpmnXMLConverter().convertToXML(model);
String bpmnString=new String(bpmnBytes,"UTF-8");
String processName = modelData.getName() + ".bpmn20.xml";
Deployment deployment = repositoryService.createDeployment()
.name(modelData.getName())
//.addString(processName, new String(bpmnBytes))
.addString(processName, bpmnString)
.deploy();
ExplorerApp.get().getViewManager().showDeploymentPage(deployment.getId());
} catch (UnsupportedEncodingException e) {
LOGGER.debug("发布流程xml编码错误");
e.printStackTrace();
下面是我部署的含有中文的流程
&&&&推荐文章:
【上篇】【下篇】您所在的位置: &
3.2 在Activiti Explorer中使用Activiti Modeler
3.2 在Activiti Explorer中使用Activiti Modeler
机械工业出版社
《Activiti实战》第3章流程设计工具,本章涉及两种流程设计工具Activiti Modeler和Activiti Designer,分别适用于业务人员和开发人员,详细介绍了这两种工具如何安装以及使用,尤其是利用Activiti Designer和JUnit单元测试帮助读者在Activiti引擎基础上更好地理解BPMN 2.0规范。本节为大家介绍在Activiti Explorer中使用Activiti Modeler。
3.2 在Activiti Explorer中使用Activiti Modeler
从5.11版本开始官方提供的压缩包发生了较大变化(参考2.1.1节):把重新设计的Activiti Modeler整合到了Activiti Explorer中,可以直接创建新模型然后部署到引擎中,也可以根据已有的流程定义创建模型,修改后可以直接把最新的修改部署到引擎。
由于Activiti Modeler组件需要依赖REST服务,因此读者要了解如何把Activiti Modeler集成到自己的项目中,相关内容可参考20.8节。
Activiti 5.11版本之后的Activiti Modeler依然在Signavio的基础上开发,由KISBPM提供开源版本,同时KISBPM也提供商业版本支持更多的功能,例如模型的版本控制、表单设计器、自定义属性、模板库、模型部署、角色控制等。
新版Modeler移除了原Signavio对于其他规范的支持(例如jBPM),只保留Activiti支持的BPMN 2.0规范,并且支持Activiti扩展的活动以及属性。
把压缩包中提供的activiti-explorer.war部署到Tomcat中即可使用Activiti Modeler。使用kermit/kermit登录后单击&Processes&&&Model workspace&,即可看到如图3-18所示的页面(根据系统的语言不同界面显示的语言也不同,笔者在5.11版本发布前为Activiti Explorer添加了国际化的中文部分)。
单击&New Model&按钮后打开创建模型对话框,如图3-19所示。
新版设计器的界面和老版本一致(图3-8),如图3-20所示。
从左侧选择模型后拖动到工作区即可,单击模型可以在右侧设置该模型的属性,如图3-21所示。
从图3-21中右侧部分可以看到有表单属性(Form properties)、监听器(Task listeners)等设置。
编辑完模型之后单击图3-20左上角的保存按钮保存模型,再单击右上角的&X&关闭设计器返回到Activiti Explorer中,如图3-22所示。
单击图3-18中右上角的&Deploy&即可部署该模型,在流程定义界面就可以看到刚刚部署的流程定义,如图3-23所示。
喜欢的朋友可以添加我们的微信账号:
51CTO读书频道二维码
51CTO读书频道活动讨论群:
【责任编辑: TEL:(010)】&&&&&&
关于&&的更多文章
中小卖家想做大,大卖家想做强,淘宝商家想迅速打开品牌知名度。
本书描述了黑客用默默无闻的行动为数字世界照亮了一条道路的故事。
讲师: 22人学习过讲师: 7人学习过讲师: 12人学习过
不需要是技术专家,只要阅读《游戏设计艺术(第2版)
《软件小设计》从最基本编程理论开始,探讨了软件设计
《前端面试江湖》融合了Web前端面试题和主流开发技术
Cisco 640-802
Cisco Certified Network Associate (CCNA)
Testinside CCNA 640-802 V14 最新题库与Testinside CCNA 640-802 Q
51CTO旗下网站温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
对世界已经失望,对自己从未绝望。
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(173)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'转: 在firefox上运行activiti-modeler',
blogAbstract:'之前试过n多次,总是在用IE打开activiti-modeler时失败,后来换了火狐才知道oryx是用svg写的,而IE不支持svg。委屈&&&&& 但是,打开了activiti-modeler之后,在点击其中的一个文件,又是打不开,各种错误。。。但是看官网上说的,也觉得没有问题啊,可怎么就是不能正常打开???后来看了一下activiti-modeler下的WEB-INF/web.xml,其中有个是:&context-param&&&&&&&& &description&Define a reg exp for all user agents which are supported for the editor&/description&',
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:5,
publishTime:4,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'对世界已经失望,对自己从未绝望。',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}集成activiti 5.16.4中modeler - @洋 - ITeye技术网站
博客分类:
新发布的activiti5.16.4的modeler rest框架由Restlet改为Spring MVC,个人感觉和SSH项目集成更加方便,不用再引入一系列的Restlet相关jar包。集成过程如下:
在maven pom.xml引入activiti依赖,其它项目运行需要的包根据需要添加。在引入org.activiti.activiti-modeler时,activiti-engine等包被一起引进来。activiti modeler直接需要的jar包为activiti-modeler.jar,其中包括rest地址的映射,内容很简单就几个类。
&properties&
&activiti.version&5.16.4&/activiti.version&
&/properties&
&dependency&
&groupId&org.activiti&/groupId&
&artifactId&activiti-modeler&/artifactId&
&version&${activiti.version}&/version&
&/dependency&
&dependency&
&groupId&org.activiti&/groupId&
&artifactId&activiti-explorer&/artifactId&
&version&${activiti.version}&/version&
&exclusions&
&exclusion&
&artifactId&vaadin&/artifactId&
&groupId&com.vaadin&/groupId&
&/exclusion&
&exclusion&
&artifactId&dcharts-widget&/artifactId&
&groupId&org.vaadin.addons&/groupId&
&/exclusion&
&exclusion&
&artifactId&activiti-simple-workflow&/artifactId&
&groupId&org.activiti&/groupId&
&/exclusion&
&/exclusions&
&/dependency&
&dependency&
&groupId&org.activiti&/groupId&
&artifactId&activiti-diagram-rest&/artifactId&
&version&${activiti.version}&/version&
&/dependency&
activiti modeler使用的spring mvc,spring环境是必须的。在web.xml配置好spring和springmvc,参考如下,spring mvc默认拦截的所有的servlet请求。
&context-param&
&param-name&contextConfigLocation&/param-name&
&param-value&
classpath*:/applicationContext.xml
classpath*:/applicationContext-wf.xml
&/param-value&
&/context-param&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&!--字符编码过滤器
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&init-param&
&param-name&forceEncoding&/param-name&
&param-value&true&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&!--引入spring mvc --&
&servlet-name&springMVC&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&init-param&
&param-name&contextConfigLocation&/param-name&
&param-value&classpath:spring-servlet.xml&/param-value&
&/init-param&
&/servlet&
&servlet-mapping&
&servlet-name&springMVC&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
拷贝activiti modeler文件到指定目录,activiti modeler所需的文件都在activiti源码文件夹:modules\activiti-webapp-explorer2目录下。拷贝过程如下:将activiti-webapp-explorer2\src\main\resources下的stencilset.json、plugins.xml拷贝到项目的src\main\resources目录下;activiti-webapp-explorer2\src\main\resources下的editor.html拷贝到项目放web页面的目录下;activiti-webapp-explorer2\src\main\webapp下的aip、editor、explorer和libs文件夹拷贝到项目js资源目录下。
拷贝完成后目录结构如下图,我将editor.html改成了editor.jsp。
剩下的就配置spring mvc、activiti modeler服务和资源的请求地址了。spring mvc配置,在spring mvc配置文件中加入要扫描的activiti modeler需要的rest服务类包,如下。
&!-- activiti modeler rest服务,位于activiti-modeler.jar下 --&
&context:component-scan base-package="org.activiti.rest.editor"&&/context:component-scan&
spring mvc视图解析器的页面的根目录设置为/WEB-INF/views。
&bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /&
&property name="prefix" value="/WEB-INF/views/" /&
&property name="suffix" value=".jsp"&&/property&
在spring配置文件中,添加ObjectMapper的bean,activiti modeler在进行json转换时会用到。
&!-- json处理 --&
&bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper"&&/bean&
在spring中配置activiti,提供activiti各种服务端的bean。
更改oryx.debug.js中对activiti modeler服务和资源地址的引用。虽然在oryx中声明了配置的公共地址,但是在js文件中多处仍是写死的,附件oryx.debug.js规范对服务和资源的地址引用,下载后需要按照如下修改。
修改editor中js和css文件引用的路径,如下图。
提供创建Model和跳转editor.jsp页面的rest服务,如下。
@RequestMapping("wf")
@Controller
public class WFController {
@Autowired
private TaskService taskS
@Autowired
private RuntimeService runtimeS
@Autowired
private RepositoryService repositoryS
@Autowired
private ObjectMapper objectM
* 通过spring mvc 的rest地址打开bpmn编辑器
@RequestMapping("editor")
public ModelAndView getEditor(){
ModelAndView modelAndView = new ModelAndView("wfmodeler/editor") ;
return modelAndV
* 新建一个模型,返回新建模型的id
* @throws UnsupportedEncodingException
@RequestMapping("newmodeler")
@ResponseBody
public String createNewModeler() throws UnsupportedEncodingException{
//删除已有的流程模型
List&Model& models = repositoryService.createModelQuery().modelNameLike("%new design model%").list() ;
for (Model oldModel : models) {
repositoryService.deleteModel(oldModel.getId());
//新建模型
Model model = repositoryService.newModel() ;
model.setName("new design model");
model.setCategory("namespace");
model.setKey("form design key");
model.setTenantId(Constants.DEFAULT_TENANT);
model.setVersion(1);
ObjectNode metaNode = objectMapper.createObjectNode();
metaNode.put(ModelDataJsonConstants.MODEL_NAME, "new modeler");
metaNode.put(ModelDataJsonConstants.MODEL_REVISION, 1);
metaNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, "no formal data");
model.setMetaInfo(metaNode.toString());
//保存模型
repositoryService.saveModel(model);
//为模型生成一个空的wf模型
ObjectNode editorNode = new ObjectMapper().createObjectNode();
//id和resource可以没有
editorNode.put("id", "canvas");
editorNode.put("resourceId", "canvas");
ObjectNode stencilSetNode = objectMapper.createObjectNode();
//namespace的值和stencilset.json中namespace的值相同,
stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#");
editorNode.put("stencilset", stencilSetNode);
//只添加bpmn的json数据即可
repositoryService.addModelEditorSource(model.getId(), editorNode.toString().getBytes(Constants.CHARSET_UTF_8));
return model.getId() ;
按照如上配置,通过访问http://ip:port/projects-formdesigner/wf/editor/?id=19601就可以跳转到模型编辑页面。
(169.5 KB)
下载次数: 290
浏览: 62438 次
来自: 济南
我TM为这个问题纠结了一天...感谢楼主~不过正在纠结是通过注 ...
楼主你好,你的项目我整 了好久都没弄好,能完整单独发给我一份吗 ...
hailinliu 写道楼主,你重写了Oracle10gDia ...
楼主,你重写了Oracle10gDialectWithoutF ...
麻烦问下楼主有集成好的吗?可以发给我一份吗?从csdn下了一个 ...

我要回帖

更多关于 苹果查常去地怎么查看 的文章

 

随机推荐