以编程方式生成BPEL文件?

时间:2013-03-12 04:04:27

标签: java eclipse eclipse-plugin bpel

有没有办法在Java中以编程方式生成BPEL?

我尝试使用BPEL Eclipse Designer 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 ...

我读了Simon的this message

  

我知道在Eclipse之外使用BPEL模型可能是可取的,但我们从未想过它。因此,不支持

是否有其他API可以提供帮助?

5 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分: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生成的类有自己的接口结构和包装器的原因。

  3. 丹尼尔

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

答案 2 :(得分:2)

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

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

BPEL XML Schema列在appendig of the spec中。因此,您还可以根据需要开展工作,并在必要时与现有的BPEL应用程序集成。

答案 3 :(得分:2)

在添加必要的类来处理相关性之后,使用unify framework API解决了这个问题。 @Daniel所说的BPELUnit似乎是另一种选择。

答案 4 :(得分:0)

如果有人在eclipse环境中运行时仍希望解决上述问题。

Luca Pino here所述,可以通过添加以下内容来解决问题:

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

在资源创建行之前,即

Resource bpelResource = rSet.createResource(uri);

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