2013-03-12 120 views
7

有没有一种方法在Java中以编程方式生成BPEL?以编程方式生成BPEL文件?

我尝试使用BPEL的Eclipse设计的API来编写代码:

Process process = null; 
try { 



     Resource.Factory.Registry reg =Resource.Factory.Registry.INSTANCE; 

     Map<String, Object> m = reg.getExtensionToFactoryMap(); 

     m.put("bpel", new BPELResourceFactoryImpl());//it works with XMLResourceFactoryImpl() 



     //create resource 

     URI uri =URI.createFileURI("myBPEL2.bpel"); 



     ResourceSet rSet = new ResourceSetImpl(); 

      Resource bpelResource = rSet.createResource(uri); 



      //create/populate process 

      process = BPELFactory.eINSTANCE.createProcess(); 

      process.setName("myBPEL"); 

      Sequence mySeq = BPELFactory.eINSTANCE.createSequence(); 

      mySeq.setName("mainSequence"); 

      process.setActivity(mySeq); 



      //save resource 

      bpelResource.getContents().add(process); 

      Map<String,String> map= new HashMap<String, String>(); 
      map.put("bpel", "http://docs.oasis-open.org/wsbpel/2.0/process/executable"); 
      map.put("tns", "http://matrix.bpelprocess"); 
      map.put("xsd", "http://www.w3.org/2001/XMLSchema"); 
      bpelResource.save(map); 

    } 



    catch (Exception e) { 

      e.printStackTrace(); 

    } 


} 

但是我收到一个错误:

INamespaceMap cannot be attached to an eObject ...

我西蒙读this message

I understand that using the BPEL model outside of eclipse might be desirable, but it was never intended by us. Thus, this isn't supported

有没有其他API可以帮助?

+0

http://www.eclipse.org/forums/index.php/m/1015906/与你所看到的差不多。你已经遇到过吗?也许你应该坚持在日食论坛上寻找像你这样的问题。在其他人能够帮助你的概率比在这里stackoverflow。 – SpaceTrucker 2013-03-13 08:41:36

回答

2

这已被使用unify framework API加入必需的类来处理相关后得到解决。 @Daniel表示的BPELUnit似乎是另一种选择。

+0

您能否为您如何解决问题提供一步一步的指导? – 2016-06-07 06:40:20

+0

据我所知,这些步骤取决于您想要生成的过程,下载API,并且必须使用BpelProcess对象并添加所需的活动(Receive,Assign,Reply ....),然后使用BpelSerializer序列化进程并生成.bpel文件,希望这有助于。 – faridasabry 2016-06-08 08:26:58

+0

非常感谢您的回复。如果您可以请张贴一些示例代码,这将是非常好的吗? – 2016-06-16 07:10:08

2

Eclipse BPEL API基于EMF模型。因此,您可以使用JET或Xpand基于此生成自己的工件。这样就不需要在Eclipse中运行。

虽然您可能无法在Eclipse之外使用BPEL,但您是否考虑过在其中部署应用程序?

BPEL XML Schemas在appendig of the spec中列出。因此,您也可以将您的工作建立在此基础之上,并在必要时与现有BPEL应用程序集成。

+0

我在问Java动态创建.bpel文件的问题,我不需要创建一个图形模型..只是一个基于输入的动态工作流程 – faridasabry 2013-03-13 04:46:53

+1

@ user1925930我认为这就是我所说的。您可以通过EMF资源API将EMF模型保存为带有用户定义的文件扩展名的xml。 – SpaceTrucker 2013-03-13 07:17:23

+0

我编辑我的问题,包括我正在尝试与org.eclipse.bpel.model和org.eclipse.emf.ecore.resource的代码,但我收到上面提到的错误..你有一个想法如何解决? – faridasabry 2013-03-13 08:22:06

3

您可能想试试JAXB。它可以帮助您将官方BPEL XSD转换为Java类。您可以使用这些类来构建BPEL文档并将其输出。

3

我和BPELUnit [1]有完全相同的问题,所以我在BPELUnit中启动了一个模块,它具有生成和读取BPEL模型[2]所需的第一件事,尽管它远非完整。仅支持BPEL 2.0(1.1将在后面介绍),处理程序目前也不受支持(但将被添加)。它处于积极的发展阶段,因为BPELUnit的代码覆盖组件将基于它,因此它将随着时间的推移完成BPEL功能。如果您需要尽早缩小差距,您将受到高兴的邀请。

您可以从GitHub中检查出它,或者抓取Maven工件。

截至目前没有文档,但您可以看看读取和写入过程的JUnit测试。

如果不适合,我想与大家分享一些经验:

  1. 不要使用JAXB:您需要读取和写入未保留与JAXB XML命名空间。这就是我选择XMLBeans的原因。 DOM将是我能想到的另一种选择。

  2. XML Schema中的继承不是开发者友好的。这就是为什么在XMLBeans生成的类中有自己的接口结构和包装。

丹尼尔

[1] http://www.bpelunit.net
[2] https://github.com/bpelunit/bpelunit/tree/master/net.bpelunit.model.bpel

0

如果有人在仍然在eclipse环境中运行的时候想要解决上述问题。

如规定由卢卡·皮诺here加入的问题可以得到解决:

AdapterRegistry.INSTANCE.registerAdapterFactory(BPELPackage.eINSTANCE, BasicBPELAdapterFactory.INSTANCE); 

资源创建前行即

Resource bpelResource = rSet.createResource(uri); 

注:另一种解决方案,以同一问题,也说明如何解决依赖关系,使此代码的工作,可以在我的其他答案here找到。