Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/351.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 以编程方式生成BPEL文件?_Java_Eclipse_Eclipse Plugin_Bpel - Fatal编程技术网

Java 以编程方式生成BPEL文件?

Java 以编程方式生成BPEL文件?,java,eclipse,eclipse-plugin,bpel,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();

有没有一种在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();

    }


}
Process进程=null;
试一试{
Resource.Factory.Registry reg=Resource.Factory.Registry.INSTANCE;
Map m=reg.getExtensionFactoryMap();
m、 put(“bpel”,新的BPELResourceFactoryImpl());//它与XMLResourceFactoryImpl()一起工作
//创建资源
URI=URI.createFileURI(“myBPEL2.bpel”);
ResourceSet rSet=new ResourceSetImpl();
资源bpelResource=rSet.createResource(uri);
//创建/填充流程
process=BPELFactory.eINSTANCE.createProcess();
process.setName(“myBPEL”);
Sequence mySeq=BPELFactory.eINSTANCE.createSequence();
mySeq.setName(“主序列”);
process.setActivity(mySeq);
//节约资源
bpelResource.getContents().add(流程);
Map Map=newhashmap();
put(“bpel”http://docs.oasis-open.org/wsbpel/2.0/process/executable");
地图放置(“tns”http://matrix.bpelprocess");
map.put(“xsd”http://www.w3.org/2001/XMLSchema");
bpelResource.save(映射);
}
捕获(例外e){
e、 printStackTrace();
}
}
但我收到了一个错误:

INamespaceMap无法附加到eObject

我读了西蒙的作品:

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


有没有其他API可以提供帮助?

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

尽管您可能无法在Eclipse之外使用BPEL,但您是否考虑过将应用程序的各个部分移动到它里面


中列出了BPEL XML模式。因此,您还可以在此基础上进行工作,并在必要时与现有的BPEL应用程序集成。

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

我与BPELUnit[1]有完全相同的问题,因此我在BPELUnit中启动了一个模块,该模块具有生成和读取BPEL模型[2]所需的第一件事,尽管它还远未完成。支持的只有BPEL 2.0(后面将是1.1),当前也不支持处理程序(但将添加)。它正在积极开发中,因为BPELUnit的代码覆盖率组件将基于它,所以它将随着时间的推移完成BPEL功能。如果您需要提前弥补差距,我们很高兴邀请您做出贡献

您可以从GitHub或grap中查看Maven工件

到目前为止,还没有文档,但是您可以看看读取和写入进程的JUnit测试

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

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

  • XML模式中的继承并不真正对开发人员友好。这就是为什么在XMLBeans生成的类周围有自己的接口结构和包装器

  • 丹尼尔

    [1]

    [2]

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

    以防任何人在仍然运行在eclipse环境中的情况下希望解决上述问题

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

    AdapterRegistry.INSTANCE.registerAdapterFactory( BPELPackage.eINSTANCE, BasicBPELAdapterFactory.INSTANCE );
    
    在资源创建行之前,即

    Resource bpelResource = rSet.createResource(uri);
    

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

    我问的是如何在Java代码中动态创建.bpel文件,我不需要创建图形模型。。只是一个基于inputs@user1925930我想这就是我说的。您可以通过EMF资源API将EMF模型保存为带有用户定义文件扩展名的xml。我编辑了我的问题,以包含我尝试使用org.eclipse.bpel.model和org.eclipse.EMF.ecore.resource的代码,但我收到了上面提到的错误。您知道如何解决吗?与您看到的错误大致相同。你已经遇到了吗?也许你应该坚持使用eclipse论坛来解决像你这样的问题。在stackoverflow上,其他人能够帮助您的概率比这里要高。您能提供一个关于如何解决问题的分步指南吗?据我所知,这些步骤取决于您想要生成的流程,下载API,并且您必须使用BpelProcess对象并将您想要的活动添加到其中(接收、分配、回复…)然后使用BpelSerializer序列化流程并生成.bpel文件,希望这对您有所帮助。非常感谢您的回复。如果您能发布一些示例代码,那就太好了?