2013-03-12 11 views
7

Gibt es eine Möglichkeit, BPEL programmgesteuert in Java zu generieren?BPEL-Dateien programmgesteuert generieren?

Ich versuchte, die BPEL Eclipse-Designer API mit diesem Code schreiben:

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(); 

    } 


} 

aber ich erhielt einen Fehler:

INamespaceMap cannot be attached to an eObject ...

Ich las this message von Simon:

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

Gibt es eine andere API, die helfen kann?

+0

http://www.eclipse.org/forums/index.php/m/1015906/ ist ungefähr der gleiche Fehler, den Sie sehen. Ist Ihnen das schon begegnet? Vielleicht solltest du bei Problemen wie deiner bei Eclipse-Foren bleiben. Die Wahrscheinlichkeit, dass jemand anders Ihnen helfen kann, ist höher als bei Stackoverflow. – SpaceTrucker

Antwort

2

Diese gelöst wurde, um die unify framework API Verwendung nach den erforderlichen Klassen Hinzufügen Korrelation zu handhaben. BPELUnit von @Daniel scheint eine andere Alternative zu sein.

+0

Könnten Sie bitte eine Schritt für Schritt Anleitung geben, wie Sie das Problem gelöst haben? –

+0

Soweit ich mich erinnere, hängen die Schritte von dem Prozess ab, den Sie generieren möchten, laden Sie die API herunter und Sie müssen das BpelProcess-Objekt verwenden und Ihre gewünschten Aktivitäten (Empfangen, Zuweisen, Antworten ....) hinzufügen und dann verwenden BpelSerializer, um den Prozess zu serialisieren und die .bpel-Datei zu generieren, hoffe, dass dies hilft. – faridasabry

+0

Vielen Dank für die Antwort. Es wäre großartig, wenn Sie bitte einen Beispielcode posten könnten? –

2

Die Eclipse BPEL API basiert auf einem EMF-Modell. So könnten Sie anhand von JET oder Xpand eigene Artefakte generieren. Auf diese Weise müssen Sie nicht in Eclipse ausgeführt werden.

Obwohl Sie BPEL möglicherweise nicht außerhalb von Eclipse verwenden können, haben Sie in Erwägung gezogen, bewegliche Teile Ihrer Anwendung darin zu verschieben?

Die BPEL-XML-Schemas sind in der appendig of the spec aufgeführt. Sie können also Ihre Arbeit darauf aufbauen und bei Bedarf in bestehende BPEL-Anwendungen integrieren.

+0

Ich habe gefragt, ob ich .bpel-Dateien dynamisch in Java-Code erstellen soll, ich muss kein grafisches Modell erstellen ... nur ein dynamischer Workflow basierend auf den Eingaben – faridasabry

+1

@ user1925930 Ich denke, darüber habe ich gesprochen. Sie können EMF-Modelle als XML mit einer benutzerdefinierten Dateierweiterung über die EMF-Ressourcen-API speichern. – SpaceTrucker

+0

Ich habe meine Frage so bearbeitet, dass sie den Code enthält, den ich mit org.eclipse.bpel.model und org.eclipse.emf.ecore.resource versucht habe, aber ich habe den oben genannten Fehler erhalten. Haben Sie eine Idee, wie Sie das Problem lösen können? – faridasabry

3

Sie möchten vielleicht JAXB einen Versuch geben. Es hilft Ihnen, den offiziellen BPEL XSD in Java-Klassen umzuwandeln. Sie verwenden diese Klassen, um Ihr BPEL-Dokument zu erstellen und auszugeben.

3

Ich hatte genau das gleiche Problem mit der BPELUnit [1], also habe ich ein Modul in BPELUnit gestartet, das die ersten Dinge zum Generieren und Lesen von BPEL-Modellen [2] benötigt, obwohl es noch lange nicht abgeschlossen ist. Unterstützt wird nur BPEL 2.0 (1.1 folgt später) und Handler werden derzeit ebenfalls nicht unterstützt (werden aber hinzugefügt). Es befindet sich in aktiver Entwicklung, da die Code Coverage-Komponente von BPELUnit darauf basiert, sodass die BPEL-Funktion im Laufe der Zeit vollständig wird. Sie sind herzlich eingeladen, etwas beizutragen, wenn Sie Lücken früher schließen müssen.

Sie können es von GitHub oder Grap das Maven-Artefakt zu überprüfen.

Ab sofort gibt es keine Dokumentation, aber Sie können sich die JUnit-Tests anschauen, die Prozesse lesen und schreiben.

Wenn dies nicht geeignet ist, ich möchte mit Ihnen einige Erfahrungen teilen:

  1. nicht JAXB verwenden: Sie müssen lesen und schreiben, die XML-Namespaces mit JAXB nicht erhalten bleiben. Deshalb habe ich XMLBeans gewählt. DOM wäre die andere Alternative, die ich mir vorstellen kann.

  2. Die Vererbung im XML-Schema ist nicht wirklich entwicklerfreundlich. Aus diesem Grund gibt es eigene Oberflächenstrukturen und Wrapper um die von XMLBeans erzeugten Klassen.

Daniel

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

0

Falls jemand versucht, das oben genannte Problem zu lösen, während er noch in der Eclipse-Umgebung läuft.

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

vor der Ressourcenerstellung Linie dh

Resource bpelResource = rSet.createResource(uri); 

Hinweis:here durch Zugabe

Das Problem von Luca Pino wie angegeben gelöst werden kann Eine andere Lösung, auf die gleiche Problem, das auch angibt, wie die Abhängigkeiten aufgelöst werden, damit dieser Code funktioniert, finden Sie in meiner anderen Antwort here.

Verwandte Themen