有没有办法在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可以提供帮助?
答案 0 :(得分:3)
您可能想尝试JAXB。它可以帮助您将官方BPEL XSD转换为Java类。您可以使用这些类来构建BPEL文档并将其输出。
答案 1 :(得分:3)
我对BPELUnit [1]有完全相同的问题,所以我在BPELUnit中启动了一个模块,它具有生成和读取BPEL模型所需的第一个东西[2],尽管它还远未完成。支持的只是BPEL 2.0(后面会有1.1),目前还不支持处理程序(但会添加)。它正在积极开发中,因为BPELUnit的代码覆盖组件将基于它,因此它将随着时间推移完成BPEL功能。如果您需要提前缩小差距,我们很乐意邀请您做出贡献。
您可以从GitHub查看或抓取Maven工件。
截至目前,没有文档,但您可以查看读取和写入进程的JUnit测试。
如果这不合适,我想与您分享一些经验:
不要使用JAXB:您需要读取和写入未使用JAXB保留的XML命名空间。这就是我选择XMLBeans的原因。 DOM将是我能想到的另一种选择。
XML Schema中的继承并不是开发人员友好的。这就是围绕XMLBeans生成的类有自己的接口结构和包装器的原因。
丹尼尔
[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)