Создание файлов BPEL программно?

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

Я попытался использовать API-интерфейс BPEL Eclipse Designer, чтобы написать этот код:

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

Я прочитал это сообщение Саймона:

Я понимаю, что использование модели BPEL за пределами eclipse может быть желательным, но мы никогда этого не планировали. Таким образом, это не поддерживается

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


person faridasabry    schedule 12.03.2013    source источник
comment
eclipse.org/forums/index.php/m/1015906 примерно та же ошибка, которую вы видите. Вы уже сталкивались с этим? Возможно, вам следует придерживаться форумов eclipse для таких проблем, как ваша. Вероятность того, что кто-то другой сможет вам помочь, выше, чем здесь, в stackoverflow.   -  person SpaceTrucker    schedule 13.03.2013


Ответы (5)


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

person Sebi    schedule 13.03.2013

У меня была точно такая же проблема с 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

person Daniel Luebke    schedule 05.04.2013

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

person faridasabry    schedule 15.09.2013
comment
Не могли бы вы предоставить пошаговую инструкцию, как вы решили проблему? - person Ahmed Akhtar; 07.06.2016
comment
Насколько я помню, шаги зависят от процесса, который вы хотите сгенерировать, загрузить API, и вам нужно использовать объект BpelProcess и добавить к нему желаемые действия (получить, назначить, ответить ....), а затем использовать BpelSerializer чтобы сериализовать процесс и создать файл .bpel, надеюсь, это поможет. - person faridasabry; 08.06.2016
comment
Большое спасибо за ответ. Было бы здорово, если бы вы могли опубликовать пример кода? - person Ahmed Akhtar; 16.06.2016

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

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

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

person SpaceTrucker    schedule 12.03.2013
comment
Я спрашивал о динамическом создании файлов .bpel в коде Java, мне не нужно создавать графическую модель ... просто динамический рабочий процесс на основе входных данных - person faridasabry; 13.03.2013
comment
@user1925930 user1925930 Думаю, я об этом и говорил. Вы можете сохранять модели EMF в формате xml с расширением файла, определяемым пользователем, через API ресурсов EMF. - person SpaceTrucker; 13.03.2013
comment
Я отредактировал свой вопрос, включив в него код, который пытался использовать с org.eclipse.bpel.model и org.eclipse.emf.ecore.resource, но получил указанную выше ошибку. У вас есть идеи, как ее решить? - person faridasabry; 13.03.2013

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

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

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

перед строкой создания ресурса, т.е.

Resource bpelResource = rSet.createResource(uri);

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

person Ahmed Akhtar    schedule 21.06.2016