понедельник, 20 октября 2014 г.

WSO2 ESB Class Mediator

Создал виртуальную машину Ubuntu 14.04 x64

Прописал настройки прокси для apt-get

Установил Java 7 от Oracle

Установил Maven

Определил переменные среды http_proxy, https_proxy, ftp_proxy, socks_proxy, JAVA_HOME, M2_HOME, MAVEN_OPTS, M2, PATH

Скачал Eclipse Luna для Java-разработчиков x64 под Линукс

Настроил прокси в Eclipse
Window->Preferences->General->Network Connections

Настроил Maven в Еclipse
Window->Preferences->Maven->Installations
Window->Preferences->Maven->User Settings

Создал проект Maven
- поставил галку на Create Simple Project
- в поле GroupId написал ru.tplatforms от названия организации (дефисы запрещены)
- в поле ArtifactId написал выдуманное мной имя пакета wso2.esb.mediator

Внёс изменения в pom-файл в корне проекта.

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>ru.tplatforms</groupId>
  <artifactId>wso2.esb.mediator</artifactId>
  <version>0.0.1-SNAPSHOT</version>
 
    <repositories>
       <repository>
           <id>wso2-maven2-repository</id>
           <url>http://dist.wso2.org/maven2</url>
       </repository>
       <repository>
           <id>apache-Incubating-repo</id>
           <name>Maven Incubating Repository</name>
           <url>http://people.apache.org/repo/m2-incubating-repository</url>
       </repository>
       <repository>
           <id>apache-maven2-repo</id>
           <name>Apache Maven2 Repository</name>
           <url>http://repo1.maven.org/maven2/</url>
       </repository>
   </repositories>


    <dependencies>
        <dependency>
            <groupId>org.apache.synapse</groupId>
            <artifactId>synapse-core</artifactId>
            <version>2.1.1-wso2v7</version>
        </dependency>
    </dependencies>


</project>


Добавлены адреса репозиториев, из которых Maven подгрузит недостающий код. Определена зависимость от пакета org.apache.synapse. Он лежит в основе сервисной шины WSO2. Зависимость добавлял через вкладку Dependencies.

Создал пустой Java-класс EncodingMediator, выбрав соответствующую опцию в контекстном меню проекта

package wso2.esb.mediator;

import org.apache.synapse.MessageContext;
import org.apache.synapse.Mediator;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.soap.SOAPFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.xml.namespace.QName;

public class EncodingMediator implements Mediator {

    private static final Log log = LogFactory.getLog(EncodingMediator.class);
   
    private String incomingEncoding;
    private String outgoingEncoding;

    public EncodingMediator(){}

    public boolean mediate(MessageContext mc) {
       
        System.out.println("Encoding Mediator -------------------------------------------------------------------------------------.");
       
       
        return true;
    }

    public String getType() {
        return null;
    }
    public void setTraceState(int traceState) {
        traceState = 0;
    }
    public int getTraceState() {
        return 0;
    }
    public void setIncomingEncoding(String newIncomingEncoding) {
        incomingEncoding = newIncomingEncoding;
    }
    public String getIncomingEncoding() {
        return incomingEncoding;
    }
    public void setOutgoingEncoding(String newOutgoingEncoding){
        outgoingEncoding = newOutgoingEncoding;
    }
    public String getOutgoingEncoding(){
        return outgoingEncoding;
    }
    public String getDescription() {
        // TODO Auto-generated method stub
        return null;
    }
    public void setDescription(String arg0) {
        // TODO Auto-generated method stub
       
    }
    public boolean isContentAware() {
        // TODO Auto-generated method stub
        return false;
    }
}


В этом классе определены два нужных мне свойства incomingEncoding и outgoingEncoding, а также геттеры и сеттеры для них setIncomingEncoding, getIncomingEncoding, setOutgoingEncoding, getOutgoingEncoding. В классе присутствует пустой пока конструктор. Самое интересное будет происходить в методе mediate. Пока что в нём лишь вывод на экран некоторой заметной издали строки, которая нужна для проверки работоспособности медиатора.

Закрыл проект без удаления файлов

Запустил в папке проект mvn eclipse:eclipse

Импортировал проект обратно в Eclipse

Выполнил в папке проекта mvn install

Перенёс созданный файл из подпапки проекта target в WSO2 ESB /repository/components/lib

Удалил ненужное расширение zip в конце файла

Перезапустил сервисную шину

Добавил медиатор Class в одну из имеющихся последовательностей


Увидел в консоли, что медиатор работает



Ссылки:
https://docs.wso2.com/display/ESB481/Class+Mediator
https://docs.wso2.com/display/ESB481/Sample+380%3A+Writing+your+own+Custom+Mediation+in+Java
http://mohamednabeel.blogspot.ru/2014/06/writing-simple-class-mediator-and.html
https://docs.wso2.com/display/ESB481/Writing+Custom+Mediator+Implementations
http://synapse.apache.org/apidocs/org/apache/synapse/MessageContext.html


Комментариев нет:

Отправить комментарий