分享

eclipse中 jpdl.xml文件中文乱码

 噢麦噶 2012-03-26

在使用jbpm提供的工作流设计器设计好流程之后,打开.jpdl.xml发现全是乱码。

我的项目的编码是UTF-8,文件编码也是UTF-8,但是依旧乱码。最后在网上查了很多资料, 发现一个简单解决办法,那就是在eclipse的配置文件中加上下面的启动参数就ok了:

 -Dfile.encoding=UTF-8         但是这样也有问题,但是控制台会有乱码现在。

于是有参考如下资料 解决问题:

jbpm4的流程设计器对中文的支持还是不理想,在研究了插件源码后,做了如下下修改解决中文乱码问题 

1.在jbpm设置界面增加一个编码属性设置修改org.jboss.tools.jbpm.common插件中的JbpmLocationsPage类添加一个Text encode用来设置编码方式 
添加的代码内容如下 

  private Text encode; 

  protected Control createContents(Composite parent) { 
    Composite clientArea = createClientArea(parent); 
    createLabels(clientArea); 
    createJbpmHomeListTable(clientArea); 
    createButtons(clientArea); 
    //加入下面代码 
    createEncodeContent(parent); 
    return null; 
  } 

  private void createEncodeContent(Composite parent) { 
    Composite clientArea = new Composite(parent, SWT.NONE); 
    GridLayout layout = new GridLayout(); 
    layout.numColumns = 2; 
    clientArea.setLayout(layout); 
    Label encodeLabel = new Label(clientArea, SWT.NONE); 
    encodeLabel.setText("encode:"); 
    GridData gridData = new GridData(GridData.FILL_HORIZONTAL); 
    encode = new Text(clientArea, SWT.SINGLE | SWT.BORDER); 
    encode.setLayoutData(gridData); 
    initEncode(); 
  } 

  private void initEncode(){ 
    String encodeValue = plugin.getPreferenceStore().getString("encode"); 
    if(encodeValue == null || encodeValue == "") encodeValue = "UTF-8"; 
    encode.setText(encodeValue); 
  } 

  public boolean performOk() { 
    String name = ""; 
    PreferencesManager inputManager = (PreferencesManager) tableViewer 
        .getInput(); 
    inputManager.saveInstallations(); 
    TableItem item = getCheckedItem(tableViewer); 
    if (item != null) { 
      name = item.getText(0); 
    } 
    plugin.getPreferenceStore().setValue(Constants.JBPM_NAME, name); 
    //加入下面代码 
    plugin.getPreferenceStore().setValue("encode", encode.getText()); 
    return true; 
  } 

  public void performDefaults() { 
    plugin.getPreferenceStore().setToDefault(Constants.JBPM_NAME); 
    PreferencesManager inputManager = (PreferencesManager) tableViewer 
        .getInput(); 
    inputManager.getJbpmInstallationMap().clear(); 
    tableViewer.setInput(inputManager); 
    checkItemToCheck(tableViewer); 
    setMessage(""); 
    updateButtons(); 
    setValid(true); 
    //加入下面代码 
    initEncode(); 
  } 

2.修改org.jboss.tools.flow.jpdl4插件中JpdlSerializer,ProcessSerializer,NewJpdl4FileWizardPage 3个类中有关设置文件编码的地方 

JpdlSerializer类中serialize方法修改后代码为 
  public static void serialize(Wrapper wrapper, OutputStream os) throws IOException { 
    String encodeValue = Activator.getDefault().getPreferenceStore().getString("encode"); 
    if(encodeValue == null || encodeValue == "") encodeValue = "UTF-8"; 
    StringBuffer buffer = new StringBuffer(); 
    serialize(wrapper, buffer, 0); 
    Writer writer = new OutputStreamWriter(os, encodeValue); 
    writer.write(buffer.toString()); 
    writer.close(); 
  } 
根据1.中的配置编码来设置文件内容编码,默认编码为UTF-8 

ProcessSerializer中appendOpening方法修改后代码为 
  public void appendOpening(StringBuffer buffer, Wrapper wrapper, int level) { 
    String encodeValue = Activator.getDefault().getPreferenceStore().getString("encode"); 
    if(encodeValue == null || encodeValue == "") encodeValue = "UTF-8"; 
buffer.append("<?xml version=\"1.0\" encoding=\"").append(encodeValue).append("\"?>\n\n"); 
    buffer.append("<" + Registry.getXmlNodeName(wrapper.getElement())); 
appendAttributes(buffer, wrapper, level); 

NewJpdl4FileWizardPage中getInitialContentsAsString方法修改后代码为 
    private String getInitialContentsAsString() { 
      String encodeValue = Activator.getDefault().getPreferenceStore().getString("encode"); 
      if(encodeValue == null || encodeValue == "") encodeValue = "UTF-8"; 
    StringBuffer buffer = new StringBuffer(); 
      buffer.append("<?xml version=\"1.0\" encoding=\"").append(encodeValue).append("\"?>\n\n"); 
    buffer.append("<process xmlns=\"http:///4.0/jpdl\" name=\""); 
    buffer.append(getFileName().substring(0, getFileName().lastIndexOf(getFileExtension()) - 1)); 
    buffer.append("\">\n</process>"); 
    return buffer.toString(); 
    } 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约