№10. Java преобразования

Тема: Преобразование сообщений при помощи Java

Время на выполнение: 60 минут

 Задание

Выполнить задание описанное в Лабораторной работе №9.

Подключить внешнюю библиотеку apache для генерирования случайных строк текста. заменить имя и фамилию клиента на случайный набор символов

Выполнение

Создайте 2 очереди:

  • 10.IN
  • 10.OUT

image003

Скопируйте схему MiniApp.xsd из проекта LAB.9
image004

Вставьте скопированную схему в библиотеку LAB.7.LIB
image005

Убедитесь, что схема скопировалась
image006

Удалите схему из проекта LAB.9, чтобы избежать конфликтов:
image007

Создайте новый проект:

  • 10

image008

Добавьте библиотеку со схемами:
image009

Нажмите Finish

Созданное приложение:
image010

Создайте новый поток с именем JavaTransform:
image011

image012

image013

Перетащите в рабочую область следующие ноды:
image014

Переименуйте и соедините ноды как показано на следующем рисунке:
image015

Сохраните поток.

Укажите следующие свойства для узлов:

LAB.10.IN
image016

image017

LAB.10.OUT
image018

По двойному клику по ноде Transform создайте java класс JavaTransform:
image019

Нажмите Next

Выберите Creating message class и нажмите Next
image020

Далее:
image021

Далее укажите имя java проекта:
image022

Нажмите Finish.

Сохраните все файлы в приложении:
image023
Окно java редактора
image024

Вместо сгенерированного кода вставьте ниже следующий код:

package com.sharavara;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import com.ibm.broker.javacompute.MbJavaComputeNode;
import com.ibm.broker.plugin.MbDate;
import com.ibm.broker.plugin.MbElement;
import com.ibm.broker.plugin.MbException;
import com.ibm.broker.plugin.MbMessage;
import com.ibm.broker.plugin.MbMessageAssembly;
import com.ibm.broker.plugin.MbOutputTerminal;
import com.ibm.broker.plugin.MbUserException;
import com.ibm.broker.plugin.MbXMLNSC;

public class JavaTransform extends MbJavaComputeNode {
           public void evaluate(MbMessageAssembly inAssembly) throws MbException {
                       MbOutputTerminal out = getOutputTerminal("out");
                       MbOutputTerminal alt = getOutputTerminal("alternate");
                       MbMessage inMessage = inAssembly.getMessage();
                       // create new empty message
                       MbMessage outMessage = new MbMessage();
                       MbMessageAssembly outAssembly = new MbMessageAssembly(inAssembly, outMessage);
                               try {
                                      // optionally copy message headers
                                      copyMessageHeaders(inMessage, outMessage);
                                      // ----------------------------------------------------------
                                      // Add user code below
                                      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");

                                      MbElement app = inMessage.getRootElement().getLastChild().getFirstElementByPath("ClientApp");
                                          
                                      MbElement messageRoot = outMessage.getRootElement();
                                      MbElement outRoot = messageRoot.createElementAsLastChild("XMLNSC");
                                      String ns = "http://sharavara.com";
                                      MbElement client = outRoot.createElementAsLastChild(MbXMLNSC.FOLDER, "Client", null);
                                      client.setNamespace(ns);
                                      client.createElementAsFirstChild(MbXMLNSC.ATTRIBUTE, "id",
 app.getFirstElementByPath("UNID").getValueAsString());

                                      MbElement cl = app.getFirstElementByPath("Name");
                                      String ln = cl.getValueAsString().substring(0, cl.getValueAsString().indexOf(" "));
                                      String fn = cl.getValueAsString().substring(cl.getValueAsString().indexOf(" ")+1);
                                      client.createElementAsLastChild(MbXMLNSC.FIELD, "LastName", ln);
                                      client.createElementAsLastChild(MbXMLNSC.FIELD, "FirstName", fn);

                                      client.createElementAsLastChild(MbXMLNSC.FIELD, "DOB",
 app.getFirstElementByPath("DOB").getValueAsString());

                                      MbElement passport = client.createElementAsLastChild(MbXMLNSC.FOLDER, "Passport", null);
                                      passport.createElementAsLastChild(MbXMLNSC.FIELD, "Number",
 app.getFirstElementByPath("Passport").getValueAsString());
                                      passport.createElementAsLastChild(MbXMLNSC.FIELD, "Date", dateFormat.format(new Date()));
                                      
                                     // End of user code
                                     // ----------------------------------------------------------
                               } catch (MbException e) {
                                    // Re-throw to allow Broker handling of MbException
                                    throw e;
                               } catch (RuntimeException e) {
                                    // Re-throw to allow Broker handling of RuntimeException
                                    throw e;
                               } catch (Exception e) {
                                    // Consider replacing Exception with type(s) thrown by user code
                                    // Example handling ensures all exceptions are re-thrown to be
                                   // handled in the flow
                                   throw new MbUserException(this, "evaluate()", "", "", e.toString(), null);
                               }
                               // The following should only be changed
                               // if not propagating message to the 'out' terminal
                               out.propagate(outAssembly);
                }

                public void copyMessageHeaders(MbMessage inMessage, MbMessage outMessage) throws MbException {
                               MbElement outRoot = outMessage.getRootElement();

                               // iterate though the headers starting with the first child of the root
                               // element
                               MbElement header = inMessage.getRootElement().getFirstChild();     
                               while (header != null && header.getNextSibling() != null) // stop before 
                                   // the last

                                   // child

                                   // (body)
                         {
                              // copy the header and add it to the out message
                              outRoot.addAsLastChild(header.copy());
                             // move along to next header
                             header = header.getNextSibling();
                         }
                }
}

 

}
image025

Запустите тест потока:
image026

Входящее сообщение:

<?xml version="1.0" encoding="UTF-8"?>
<Q1:ClientApp xmlns:Q1="http://sharavara.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://sharavara.com MinApp.xsd ">
<UNID>123</UNID>
<Name>Иванов Иван</Name>
<DOB>1981-11-13</DOB>
<Passport>АА737895</Passport>
</Q1:ClientApp>

После преобразования:
image027

<?xml version="1.0" encoding="UTF-8"?>
<NS1:Client xmlns:NS1="http://sharavara.com" id="123">
         <LastName>Иванов</LastName>
         <FirstName>Иван</FirstName>  
         <DOB>1981-11-13</DOB>
         <Passport>
                  <Number>АА737895</Number>
                  <Date>2014-04-02</Date>
         </Passport>
</NS1:Client>

Добавим к проекту библиотеку Apache Commons

Импортируйте библиотеку в приложение:
image028

image029

Выберите файл commons-lang3-3.3.1.jar в каталоге /home/vs/Desktop/install :
image030

Откройте свойства проекта LAB.10.java
image031
image032

Выберите библиотеку:
image033

image034

Откройте класс JavaTransform.java
image035

Замените следующие на:
image036

 

String ln = RandomStringUtils.randomAlphabetic(15);
String fn = RandomStringUtils.randomAlphabetic(15);

Запустите снова тест. Результат работы:
image037