7

有没有办法在 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...

我读了西蒙的这条消息

我知道在 Eclipse 之外使用 BPEL 模型可能是可取的,但我们从来没有打算这样做。因此,这不受支持

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

4

5 回答 5

3

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

于 2013-03-13T09:56:05.350 回答
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

于 2013-04-05T09:59:42.177 回答
2

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

于 2013-09-15T07:47:30.190 回答
1

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

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

BPEL XML 模式列在规范的附录中。因此,您还可以在此基础上开展工作,并在必要时与现有的 BPEL 应用程序集成。

于 2013-03-12T07:43:49.197 回答
0

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

如Luca Pino 所说,可以通过添加以下内容来解决该问题

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

在资源创建行之前,即

Resource bpelResource = rSet.createResource(uri);

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

于 2016-06-21T21:22:13.380 回答