2013-03-12 2 views
7

Есть ли способ генерировать BPEL программно в Java?Создание программ BPEL программно?

Я попытался с помощью конструктора API BPEL Eclipse, чтобы написать этот код:

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 ...

Я прочитал this message Саймон:

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

Есть ли другой API, который может помочь?

+0

http://www.eclipse.org/forums/index.php/m/1015906/ примерно такая же ошибка вы видите. Вы уже сталкивались с этим? Возможно, вы должны придерживаться форумов eclipse для таких проблем, как ваша. Вероятность того, что кто-то другой сможет вам помочь, выше, чем здесь, в stackoverflow. – SpaceTrucker

ответ

2

Это была решена с помощью unify framework API после добавления необходимых классов для обработки корреляции. BPELUnit, заявленный @Daniel, кажется, является другой альтернативой.

+0

Не могли бы вы предоставить пошаговое руководство о том, как вы решили проблему? –

+0

Насколько я помню, эта процедура зависит от процесса, который вы хотели бы генерировать, загрузки API и вам нужно использовать объект BpelProcess и добавить к нему нужные действия (Receive, Assign, Reply ....), а затем использовать BpelSerializer для сериализации процесса и создания файла .bpel, надеюсь, что это поможет. – faridasabry

+0

Большое вам спасибо за ответ. Было бы здорово, если бы вы могли отправить какой-нибудь образец кода? –

2

API Eclipse BPEL основан на модели EMF. Таким образом, вы можете создавать свои собственные артефакты, используя JET или Xpand на основе этого. Таким образом, нет необходимости запускать внутри Eclipse.

Возможно, вы не можете использовать BPEL вне Eclipse, считаете ли вы, что в нем находятся движущиеся части вашего приложения?

XML-схемы BPEL перечислены в appendig of the spec. Таким образом, вы можете также основывать свою работу на этом и интегрировать с существующими приложениями BPEL, где это необходимо.

+0

Я просил динамически создавать файлы .bpel в Java-коде, мне не нужно создавать графическую модель. Просто динамический рабочий процесс, основанный на вводе – faridasabry

+1

@ user1925930 Я думаю, это то, о чем я говорил. Вы можете сохранить модели EMF в виде xml с пользовательским расширением файла через API ресурсов EMF. – SpaceTrucker

+0

Я отредактировал мой вопрос, чтобы включить код, который я пытался с org.eclipse.bpel.model и org.eclipse.emf.ecore.resource, но я получил ошибку, упомянутую выше .. у вас есть идея, как ее решить? – faridasabry

3

Возможно, вы дадите JAXB. Это помогает преобразовать официальный BPEL XSD в классы Java. Вы используете эти классы для создания своего документа BPEL и вывода его.

3

У меня была такая же проблема с BPELUnit [1], поэтому я запустил модуль в BPELUnit, который имеет первые вещи, необходимые для генерации и чтения BPEL-моделей [2], хотя он далек от завершения. Поддерживается только BPEL 2.0 (1.1 будет следовать позже), а обработчики также в настоящее время не поддерживаются (но будут добавлены). Он находится в активном развитии, потому что компонент покрытия кода BPELUnit будет основан на нем, поэтому он получит полную функциональность BPEL с течением времени. Вы счастливо приглашаетесь внести свой вклад, если вам нужно закрыть промежутки раньше.

Вы можете проверить это из GitHub или захватить артефакт Maven.

На данный момент нет документации, но вы можете посмотреть тесты JUnit, которые обрабатывают процессы чтения и записи.

Если это не подходит для, я хотел бы поделиться опытом с вами:

  1. Не использовать JAXB: Вам нужно будет читать и писать пространства имен XML, которые не сохранились с JAXB. Вот почему я выбрал XMLBeans. DOM была бы другой альтернативой, о которой я могу думать.

  2. Наследование в XML-схеме не является идеальным для разработчиков. Вот почему есть собственные структуры интерфейса и обертки вокруг генерируемых классов XMLBeans.

Дэниел

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

0

В случае, если кто-либо хочет решить вышеуказанную проблему, продолжая работать в среде затмения.

Проблема может быть решена, как заявил Лука Пиноhere, добавив:

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

до линии создания ресурса т.е.

Resource bpelResource = rSet.createResource(uri); 

Примечание: Еще одно решение, к тому же проблема, также указывающая, как разрешить зависимости, чтобы заставить этот код работать, можно найти в моем другом ответе here.

Смежные вопросы