https://bugs.eclipse.org/bugs/show_bug.cgi?id=389668 - ugly hack to work
around the drools parser problem.
diff --git a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
index ef18eb8..d376f5f 100644
--- a/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
+++ b/org.eclipse.bpmn2.modeler.core/src/org/eclipse/bpmn2/modeler/core/model/Bpmn2ModelerResourceImpl.java
@@ -110,7 +110,7 @@
this.getDefaultSaveOptions().put(XMLResource.OPTION_URI_HANDLER, uriHandler);
// some interesting things to play with:
-// this.getDefaultLoadOptions().put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, true);
+ this.getDefaultLoadOptions().put(XMLResource.OPTION_LAX_FEATURE_PROCESSING, true);
// this.getDefaultLoadOptions().put(XMLResource.OPTION_LAX_WILDCARD_PROCESSING, true);
// this.getDefaultLoadOptions().put(XMLResource.OPTION_RECORD_UNKNOWN_FEATURE, true);
// this.getDefaultLoadOptions().put(XMLResource.OPTION_ANY_TYPE, BpmnDiPackage.eINSTANCE.getBPMNPlane());
@@ -608,7 +608,7 @@
}
}
- protected class Bpmn2ModelerXmlHelper extends BpmnXmlHelper {
+ public class Bpmn2ModelerXmlHelper extends BpmnXmlHelper {
public Bpmn2ModelerXmlHelper(Bpmn2ResourceImpl resource) {
super(resource);
diff --git a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java
index b5b1c6d..d861e32 100644
--- a/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java
+++ b/org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5/src/org/eclipse/bpmn2/modeler/runtime/jboss/jbpm5/model/util/ModelResourceImpl.java
@@ -32,6 +32,7 @@
import org.eclipse.bpmn2.modeler.runtime.jboss.jbpm5.model.ModelPackage;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.EStructuralFeature;
@@ -67,6 +68,51 @@
*/
public ModelResourceImpl(URI uri) {
super(uri);
+
+ this.xmlHelper = new Bpmn2ModelerXmlHelper(this) {
+ /* (non-Javadoc)
+ * @see org.eclipse.emf.ecore.xmi.impl.XMLHelperImpl#getQName(org.eclipse.emf.ecore.EStructuralFeature)
+ *
+ * This gets around the problem of including the "tns" namespace prefix for jBPM extension model elements.
+ * Normally, extension elements are serialized to XML like this:
+ *
+ * <bpmn2:extensionElements>
+ * <tns:global tns:identifier="globalVar123" tns:type="String"/>
+ * </bpmn2:extensionElements>
+ *
+ * Unfortunately the jBPM process engine parser can't handle the prefix for the "identifier" and "type"
+ * attributes, so we strip them off here. The result now looks like this:
+ *
+ * <bpmn2:extensionElements>
+ * <tns:global identifier="globalVar123" type="String"/>
+ * </bpmn2:extensionElements>
+ *
+ * This special serialization is done for the following extension elements:
+ *
+ * GlobalType
+ * ImportType
+ * OnEntryScriptType
+ * OnExitScriptType
+ */
+ @Override
+ public String getQName(EStructuralFeature feature)
+ {
+ EObject cc = feature.eContainer();
+ if (cc instanceof EClass) {
+ String name = ((EClass)cc).getName();
+ if ("GlobalType".equals(name)
+ || "ImportType".equals(name)
+ || "OnEntryScriptType".equals(name)
+ || "OnExitScriptType".equals(name)) {
+ return feature.getName();
+ }
+ }
+ return super.getQName(feature);
+ }
+ };
+ this.uriHandler = new FragmentQNameURIHandler(xmlHelper);
+ this.getDefaultLoadOptions().put(XMLResource.OPTION_URI_HANDLER, uriHandler);
+ this.getDefaultSaveOptions().put(XMLResource.OPTION_URI_HANDLER, uriHandler);
}