Sunteți pe pagina 1din 242

Education

Lesson 3

Model-driven integration based on executable UML

E2E Bridge
Base Version 5.1

Release 5.1.4
October 26, 2012

E2E Technologies Ltd


Lautengartenstrasse 12 CH-4052 Basel, Schweiz T +41 61 270 97 10 E info@e2ebridge.com W www.e2ebridge.com

Education Lesson 3

Table of Contents
1 2 Errata ................................................................................................................................................................................... 4 Introduction ......................................................................................................................................................................... 5 2.1 2.2 3 Documentation Map ..................................................................................................................................................................................................... 6 Goal of E2E Bridge Education .............................................................................................................................................................................. 6

Extending the Web Service ................................................................................................................................................. 8 3.1 3.2 Assignment ....................................................................................................................................................................................................................... 9 Preparation for Lesson 3 ........................................................................................................................................................................................ 10

First Iteration ..................................................................................................................................................................... 12 4.1 4.2 4.2.1 4.3 4.3.1 4.3.2 4.3.3 4.3.4 4.3.5 4.4 4.4.1 4.4.2 4.4.3 4.5 4.5.1 4.5.2 4.6 4.7 4.8 4.8.1 4.8.2 Use Case Diagram ...................................................................................................................................................................................................... 13 Class Diagram ............................................................................................................................................................................................................... 19 Defining Classes ............................................................................................................................................................................................... 21 Port Type.......................................................................................................................................................................................................................... 40 Defining the Port Type .................................................................................................................................................................................. 40 Defining the Operation .................................................................................................................................................................................. 41 Defining the Operation Parameters ..................................................................................................................................................... 43 Assigning a new Activity Diagram to the Operation ................................................................................................................... 45 Assigning Activity Diagrams to Use Cases ...................................................................................................................................... 48 Activity Diagram ........................................................................................................................................................................................................... 51 Outlining the Activity....................................................................................................................................................................................... 51 Reading the XML File .................................................................................................................................................................................... 55 Filtering the File Content ............................................................................................................................................................................ 72 Component and Deployment Diagrams ........................................................................................................................................................ 92 Reworking and Extending the Component Diagram .................................................................................................................. 93 Extending the Deployment Diagram .................................................................................................................................................. 102 Compilation .................................................................................................................................................................................................................. 107 Solving Errors ............................................................................................................................................................................................................ 108 Testing with E2E SOAP Test Tool ..................................................................................................................................................................... 110 Testing the File Reading ............................................................................................................................................................................. 110 Testing the Filtering...................................................................................................................................................................................... 112

Second Iteration .............................................................................................................................................................. 115 5.1 5.2 5.2.1 5.2.2 Class Diagram ............................................................................................................................................................................................................. 116 Activity Diagram ........................................................................................................................................................................................................ 124 Outlining the Activity.................................................................................................................................................................................... 124 The Currency Calculator ............................................................................................................................................................................ 129
2012 E2E Technologies | www.e2ebridge.com | 2

Education Lesson 3
5.2.3 5.2.4 5.2.5 5.2.6 5.3 5.3.1 5.3.2 5.4 5.5 5.6 5.6.1 6 Using the SOAP Adapter ........................................................................................................................................................................... 138 Implementing the Currency Conversion .......................................................................................................................................... 165 Implementing Additional Calculations ............................................................................................................................................. 200 Finalizing the Activity Diagram Query Products ........................................................................................................................ 207 Component and Deployment Diagrams ....................................................................................................................................................... 211 Reworking and Extending the Component Diagram ................................................................................................................ 212 Extending the Deployment Diagram .................................................................................................................................................. 218 Compilation ................................................................................................................................................................................................................. 222 Solving Errors ........................................................................................................................................................................................................... 223 Testing with E2E SOAP Test Tool ................................................................................................................................................................... 225 Requesting the Web Service with the Excel Client ................................................................................................................... 228

Testing with E2E Analyzer .............................................................................................................................................. 232 6.1 6.2 6.3 Starting the Service and the Analyzer ........................................................................................................................................................ 233 Test Case Properties ............................................................................................................................................................................................. 235 Tracing through the Service ...............................................................................................................................................................................237

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3

1 Errata
This version of Lesson 3 may contain screenshots which are not up to date, as some images are still related to MagicDraw 16.6.

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3

2 Introduction

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3
2.1 Documentation Map
The Bridge is delivered with comprehensive documentation. Apart from this self-study, the Bridge also comes with many examples you can have a look at. Each feature is subject of an example that is ready to run. This chapter provides an overview about all documentation available after installation. If you did not change the default location of the E2E documentation, you will find all documents and examples in folder C:\E2EBridgeDocumentation_5 \Documentation. Additionally, all documentation is available online at the E2E Homepage. Document E2E Bridge Education Lesson 1-3 (this document) Content Comprehensive self-learning guide, which leads you through all steps of creating a Web Service. Additionally, it provides conceptional information for each topic. Comprehensive Bridge guide containing information about architecture, concepts, modeling, E2E Action language, add-ons, and import/export mechanisms. Comprehensive guide explaining concepts and usage of E2E Console, which comprises all management tasks to run the Bridge and deployed composite services. Comprehensive guide explaining concepts and usage of E2E Builder including all tools like E2E Model Compiler, E2E Model Debugger, and E2E Importers. Description of the installation of E2E Console including a troubleshooting chapter. This guide also contains a description of the following firmware installations: E2E SQL Libraries to integrate SQL databases E2E SAP Libraries to integrate SAP systems E2E Java Libraries to use Java classes in your service E2E Bridge Builder Installation Guide Description of the installation of E2E Builder including a troubleshooting chapter. Description of the installation of E2E Analyzer.

E2E Bridge Reference Guide

E2E Bridge Server User Guide

E2E Bridge Builder User Guide

E2E Bridge Server Installation Guide

E2E Analyzer Installation Guide

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3
2.2 Goal of E2E Bridge Education
This document is one of three documents, which serves as a self learning program for developing a Web Service with E2E Bridge . The education leads you through a development process divided into three lessons, which will teach you to build Services based on the E2E Bridge platform. Welcome to lesson 3 of the E2E Education. By reading this document, you will learn in the first iteration how to draw more complex class diagrams how to reuse activity diagrams how to copy activity diagrams how to use decisions how to design a SOAP interface from scratch how to work with arrays how to use value pins how to define iterations with an expansion region how to use transformations how to use static operations within Action Script how to manage test cases in the second iteration how to read a file how to use a backend adapter how to use an alias how to map XML data to objects how to exchange messages with an external SOAP Service how to use the E2E Action Wizard The goal of this lesson is to model a Web Service that receives a search request from an Excel client. The requested items are searched in an XML data source file. For each found record a currency conversion is performed. The necessary exchange rate is received from an external SOAP Service. If the search is successful, the Web Service sends the search result back to the client.

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3

3 Extending the Web Service


In lesson 2, the example of lesson 1 was extended. In lesson 3, you will reuse and extend the example of lesson 2 and the Excel client again. The Web Service will be capable of searching products in a file. In lesson 1 and 2, the development process was discussed. Below, you find the components and steps of a logical design process:

1. 2. 3. 4. 5. 6. 7. 8. 9.

Use case (roles and their activities) Class diagram (static data structure) Port type definition for modeling a Web Service (Web Service interface, operations) Activity diagram (choreography, system behavior, backend adapters) Sequence diagram (system behavior) Component and deployment diagrams (supported by the by the E2E Components and Deployment Wizard) Compilation of UML models with the E2E Model Compiler Deployment of E2E Composite services to an E2E Server Testing of deployed Service with the E2E Model Debugger

You will also follow these design steps during lesson 3. This time, as it is an iterative process, you will go through this development process more than once.

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3
3.1 Assignment
In this lesson, you will extend the Web Service of lesson 2. It will read data from an XML file, implement a search mechanism, get some additional information from an external web service, and manipulate data before sending it to the Excel client. The development process will be iterated through two times. In the first iteration, you will use the file system adapter to read product data from the XML file, a filtering mechanism will be implemented, and you will learn how to work with arrays. In the second iteration, you will use the SOAP adapter to call a SOAP operation. The exchange rate conversion example will be reused, and you will learn how to work with further E2E Action Language operations, actions with special behavior, and iterations. The example will be ready to be compiled and deployed after each iteration of the development process. At that points, you will be able to test the Web Service with theE2E Model Debugger and see first results.

2012 E2E Technologies | www.e2ebridge.com |

Education Lesson 3
3.2 Preparation for Lesson 3
Open the E2E Builder project Education, and open the UML model file lesson2 if it has not been opened directly. Save the file as lesson3.

Select the diagram tab Product Query Overview to display the use case diagram in the diagram pane. Then, right-click the tab and select Close All Diagrams But Current. This will close all open diagrams except the use case diagram Product Query Overview.

2012 E2E Technologies | www.e2ebridge.com |

10

Education Lesson 3

An XML file was copied to the documentation folder of lesson 3 while installing the education files. Make sure, that you can find the file catalog.xml (default location C:\E2EBridgeDocumentation_5\Documentation\ pdf\E2E Education\Lesson3). Keep the file path in mind, where you actually installed the file, as you will need it in the UML model when defining the file backend in the deployment diagram.

2012 E2E Technologies | www.e2ebridge.com |

11

Education Lesson 3

4 First Iteration
In the first iteration, start with reworking the use case diagram.

2012 E2E Technologies | www.e2ebridge.com |

12

Education Lesson 3
4.1 Use Case Diagram

The use case diagram Product Query Overview is displayed.

Change the name of the second use case from Insert Product Data into List to Query Products, because now you are going to design a query of an XML file containing product records.

2012 E2E Technologies | www.e2ebridge.com |

13

Education Lesson 3
Select the use case Insert Product Data into List.

Click the name of the use case and start typing the new name Query Products. To finish, press Ctrl - Enter .

2012 E2E Technologies | www.e2ebridge.com |

14

Education Lesson 3
Create a new package Query Products Service in the package Data / Overview / Use Cases.

Create a new use case diagram in the new package.

2012 E2E Technologies | www.e2ebridge.com |

15

Education Lesson 3
Assign the name Query Products to the use case diagram.

Reuse the actor Consumer in the package Data / Overview / Use Cases and drag and drop it onto the new use case diagram Query Products.

Complete the use case diagram by selecting the appropriate icons from the middle bar. Create the main use case Query Products first and draw an association between this use case and the actor Consumer.

2012 E2E Technologies | www.e2ebridge.com |

16

Education Lesson 3
Include the other use cases in the main use case: Enter Search Keywords View Search Result

Switch to the diagram tab Product Query Overview. Expand the package Query Products and define a hyperlink on use case Query Products. Link the created use case diagram by dragging and dropping the use case diagram Query Products as shown in the picture below.

2012 E2E Technologies | www.e2ebridge.com |

17

Education Lesson 3

Now, delete the package Insert Product Data Service as it is not used anymore. Save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

18

Education Lesson 3
4.2 Class Diagram

In the following chapter, the XML data source is analyzed to infer the required data structures of the Web Service. Below, the XML File containing product data is displayed. The Web Service will read from this data source and send the filtered data to the Excel client.
<?xml version="1.0" encoding="UTF-8"?> <catalog> <product> <title>Pirates of the Caribbean - The Curse of the Black Pearl</title> <category>DVD</category> <manufacturer>Buena Vista Home Video</manufacturer> <priceUSD>17.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail//B00005JM5E/qid=1075478699//ref=pd_ka_1/104-20889715001520?v=glance&amp;s=dvd&amp;n=507846</link> </product> <product> <title>Finding Nemo</title> <category>DVD</category> <manufacturer>Walt Disney Home Video</manufacturer> <priceUSD>17.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail//B00005JM02/qid=1075478699//ref=pd_ka_2/104-20889715001520?v=glance&amp;s=dvd&amp;n=507846</link> </product> <product> <title>Once Upon a Time in Mexico (2003)</title> <category>DVD</category> <manufacturer>Columbia Tristar Hom</manufacturer> <priceUSD>20.27</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail/-/B0000WN140/qid=1076055328/sr=12/ref=sr_1_2/102-9079676-4243362?v=glance&amp;s=dvd</link> </product> <product> <title>The Lord of the Rings - The Two Towers (Platinum Series Special Extended Edition) (2002)</title> <category>DVD</category> <manufacturer>New Line Home Video</manufacturer> <priceUSD>25.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail/-/B00009TB5G/ref=pd_ts_d_8/1029079676-4243362?v=glance&amp;s=dvd&amp;n=404276</link> </product> <product> <title>Lost In Translation (Widescreen Edition) (2003)</title> <category>DVD</category> <manufacturer>Universal Studios</manufacturer> <priceUSD>18.89</priceUSD> <seller>amazon.com</seller> <type>web</type>

2012 E2E Technologies | www.e2ebridge.com |

19

Education Lesson 3
<link>http://www.amazon.com/exec/obidos/tg/detail/-/B00005JMJ4/ref=pd_ts_d_2/1029079676-4243362?v=glance&amp;s=dvd&amp;n=404276</link> </product> <product> <title>Panasonic SC-HT700 5-Disc Progressive-Scan DVD Home Theater System</title> <category>Audio &amp; Video</category> <manufacturer>Panasonic</manufacturer> <priceUSD>264.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail/-/B00008XL1I/qid=1079949505/br=11/ref=br_lf_etk_ce_av__1//104-11671981926310?v=glance&amp;s=electronics&amp;n=172593</link> </product> <product> <title>Zenith XBS344 Progressive Scan DVD-VCR Home Theater System (Silver)</title> <category>Audio &amp; Video</category> <manufacturer>Zenith</manufacturer> <priceUSD>249.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail/-/B0000A2UAT/qid=1079949505/br=113/ref=br_lf_etk_ce_av__13//104-11671981926310?v=glance&amp;s=electronics&amp;n=172593</link> </product> <product> <title>Sony DVD/VHS Home Theater System (HT-V1000DP)</title> <category>Audio &amp; Video</category> <manufacturer>Sony</manufacturer> <priceUSD>499.87</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail/-/B0000CBCO6/qid=1079950507/br=15/ref=br_lf_etk_ce_av__5//104-11671981926310?v=glance&amp;s=electronics&amp;n=172593</link> </product> </catalog>

Later, you will model a data structure that stores the data of this file.
<?xml version="1.0" encoding="UTF-8"?> <catalog> <product> <title>Pirates of the Caribbean - The Curse of the Black Pearl</title> <category>DVD</category> <manufacturer>Buena Vista Home Video</manufacturer> <priceUSD>17.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos/tg/detail//B00005JM5E/qid=1075478699//ref=pd_ka_1/104-20889715001520?v=glance&amp;s=dvd&amp;n=507846</link> </product> [...] </catalog>

The XML file is well structured. The first line of the XML file is the header, which states what XML version and what character set are used. The element catalog contains some product elements. Each product element is containing seven further elements that store product data.

2012 E2E Technologies | www.e2ebridge.com |

20

Education Lesson 3
Note: In this example, the XML structure is built up from XML elements without using attributes. It would also be possible to use attributes within the elements as shown in the example below.
<product title=Pirates of the Caribbean - The Curse of the Black Pearl category=DVD manufacturer=Buena Vista Home Video priceUSD=17.99 seller=amazon.com sellerType=web link=http://www.amazon.com/exec/obidos/tg/detail//B00005JM5E/qid=1075478699//ref=pd_ka_1/104-20889715001520?v=glance&amp;s=dvd&amp;n=507846/>

4.2.1

Defining Classes

In this chapter, you are going to model the class diagram. The class diagram contains classes that represent the input and output structure of the service.

4.2.1.1

Output

You are going to start with the output classes according to the structure of the XML file. First, create a new Service structure for the extended Web Service. Create a new package in the package Data / Services by choosing Package <<Respository>> from the context menu. Assign the name QueryProductsService.

To the newly created package QueryProductsService, the stereotype <<Repository>> has been applied automatically.

2012 E2E Technologies | www.e2ebridge.com |

21

Education Lesson 3
In package Query- ProductsService, create the new packages Classes and Ports with stereotype <<Repository>> using the same menu option.

Create a new class in the package Data / Services / QueryProductsService / Classes that, as a query result, will store a list of products.

To find an appropriate name, look at the file structure of the XML file that was introduced at the beginning of this chapter. The first element in the file after the header is called catalog. You find the opening tag of catalog at the beginning of the XML structure, and the closing tag at the end of it. Choose the same name for the class and, as class names should begin with a capital letter, type Catalog. An instance of this class will serve as output object in order to pass the query result from the Web Service to the client.

2012 E2E Technologies | www.e2ebridge.com |

22

Education Lesson 3
Next, you will create a new class diagram in the package Classes to visualize the data structures.

Assign the name Product Query Classes.

Drag and drop the class Catalog onto the class diagram in the diagram pane.

2012 E2E Technologies | www.e2ebridge.com |

23

Education Lesson 3

Now, create a class to store the data of a single product. Select a Class icon from the diagram toolbar and place it on the diagram pane. Double-click the class symbol to open the class specification dialog.
<product> <title>Pirates of the Caribbean - The Curse of the Black Pearl</title> <category>DVD</category> <manufacturer>Buena Vista Home Video</manufacturer> <priceUSD>17.99</priceUSD> <seller>amazon.com</seller> <type>web</type> <link>http://www.amazon.com/exec/obidos /tg/detail//B00005JM5E/qid=1075478699//ref=pd_ka_1/104-2088971 -5001520?v=glance&amp;s=dvd&amp; n=507846</link> </product>

To find an appropriate name, look at the file structure of the XML file again. The element in the file that represents a single product, and is repeated eight times, is called product. You find the opening tag of product at the beginning of each XML structure, and the closing tag at the end of it. Choose the same name for the class.

2012 E2E Technologies | www.e2ebridge.com |

24

Education Lesson 3

2012 E2E Technologies | www.e2ebridge.com |

25

Education Lesson 3
In order to map the XML structure to the data structure in the class diagram later on, you need to associate the class Product to the class Catalog. Note: XML data is mapped to UML classes using an E2E Action Lan- guage operation. As a rule, XML elements are mapped to association ends in a class diagram.

An association is a relationship between instances of two classes. At least one of the association ends must have a name. They play a similar role as attribute names. Actually, all associations having an association end name can be represented as an attribute as well. Click the class Catalog and select the Association icon from the smart manipulation toolbar. Draw the association from the class Catalog to the class Product.

As in the XML file there are stored several products, all Product elements have to be stored in an array. The array can be defined by configuring the association between the classes Product and Catalog. An association can be named, and the ends of an association (also called roles) can be adorned with role names, ownership indicators, multiplicity, visibility, and other properties.

2012 E2E Technologies | www.e2ebridge.com |

26

Education Lesson 3
Double-click the association to open the Association specification dialog. Enter contains as name of the association, as a Catalog contains Products. This increases readability. The small arrow floating next to the association line indicates the reading direction.

Enter the name products in the section Role of Product (which represents the association end belonging to class Catalog).

The roles (or association ends) are regarded as attributes of the corresponding class. Assigning them names, they can be accessed within E2E Action Script (as you will see later on). In the next step, you will define products as an array containing zero to infinite Products.

2012 E2E Technologies | www.e2ebridge.com |

27

Education Lesson 3
By choosing 0..* in the multiplicity field, you define that the new attribute products is an array. This array can have zero to infinite elements of type Product as a Catalog contains zero to infinite Products..

The array products must be defined as public. Public attributes can be read and modified in activities outside the class context.

2012 E2E Technologies | www.e2ebridge.com |

28

Education Lesson 3
In the section Role of Catalog (which belongs to class Product) specify multiplicity 1 as exactly one instance of Catalog can have an array containing 0..* Products.

In the association properties tree on the left, expand the node Roles and select role products.

As mentioned before, you will map the XML structure to the class structure, after reading the XML file containing the product catalog. For a better readability of the model, you named the association end products, instead of product in singular. But actually, the name of the corresponding association end has to match the XML element's name to perform the mapping. On account of this, you have to specify the external name of products. This is done by assigning the stereotype <<E2EAttribute>> to the association end products.

2012 E2E Technologies | www.e2ebridge.com |

29

Education Lesson 3
Click into the field Applied Stereotype, and then on the small edit button to open a list of suggested stereotypes.

Filter the list by entering e2e into the text field and select the stereotype <<E2EAttribute>>. Click Apply to assign the stereotype.

2012 E2E Technologies | www.e2ebridge.com |

30

Education Lesson 3
Assigning the stereotype <<E2EAttribute>> leaded to the properties list being appended by several additional properties. They are tagged values belonging to the stereotype. If necessary, scroll down to the end of the properties list to see the additional properties.

Specify the external name of products as product, the corresponding name from the XML file. Click Close .

Now, the class diagram should look as shown below. One Catalog contains zero to infinite products. The external name of products is product. Association end products constitutes an attribute of class Catalog. It is an array that contains elements of type Product.

2012 E2E Technologies | www.e2ebridge.com |

31

Education Lesson 3

Comparing the association to the XML structure, you will notice the analogy when saying that instances of class Catalog contain Products. The data of all product XML elements will be mapped to the association end products (products is an array attribute of class Catalog). Class attributes and association ends are different notations for the same issue. You could drag and drop the association end products to class catalog to change the notation. In the next steps, you will map each XML element that is included in an XML element product to new attributes of the class Product. For instance, the XML element manufacturer will be mapped to attribute manufacturer of class Product.

2012 E2E Technologies | www.e2ebridge.com |

32

Education Lesson 3
Double-click class Product to open the Specification Dialog and apply the stereotype <<XML>>.

Switch to the Attributes section and add the attributes listed in the table below using Create > Property <<XMLElement >>.

Attribute Name title category manufacturer priceUSD seller sellerType

Attribute Type String String String Float String String

Visibility public public public public public public

Stereotype <<XMLElement>> <<XMLElement>> <<XMLElement>> <<XMLElement>> <<XMLElement>> <<XMLElement>>

2012 E2E Technologies | www.e2ebridge.com |

33

Education Lesson 3
link String public <<XMLElement>>

You use stereotypes like <<XMLElement>> to control how XML data is mapped to UML classes. For instance, using this stereotype for class attribute manufacturer, the attribute does not need to be defined on an association end. You will find more detailed information about data mapping between XML documents and UML classes in chapter XML / UML Class Mapping of the E2E Bridge Reference Guide. Right-click class Product and select Symbol(s) Properties from the context menu.

2012 E2E Technologies | www.e2ebridge.com |

34

Education Lesson 3
In the search field start typing show a to filter the list. Set the parameter Show Attributes Stereotype to true. Click OK .

Now, your class diagram should look like the one below.

2012 E2E Technologies | www.e2ebridge.com |

35

Education Lesson 3

Note: In more complex examples that require to map complex XML data to UML classes and vice versa, you would import an XML schema into the model. The E2E XSD Importer creates a UML model with all classes having all required stereotypes and associations. You modeled the output data according to the structure of the XML file by creating the classes Catalog and Product. The XML elements of each product record were modeled as stereotyped attributes of class Product. Save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

36

Education Lesson 3
4.2.1.2 Input
Now, define the structure of the input data. Create a new class in the packageData / Services / QueryProductsService / Classes that will contain the title and the search keywords. Assign the name SearchParameters.

Double-click the class to open the class specification dialog and change to the tab Attributes. Now, define the attributes of the new class according to the input data that is entered in the search mask of the Excel client. Add all attributes listed in the table below.

Attribute Name title keywords

Attribute Type String String

Multiplicity

Visibility public

0..*

public

2012 E2E Technologies | www.e2ebridge.com |

37

Education Lesson 3
After all attributes have been defined, click Close.

Drag and drop the class SearchParameters onto the class diagram Product Query Classes.

2012 E2E Technologies | www.e2ebridge.com |

38

Education Lesson 3

Save

the UML model.

2012 E2E Technologies | www.e2ebridge.com |

39

Education Lesson 3
4.3 Port Type

In the next development step, you will define the SOAP interface of the Web Service.

4.3.1

Defining the Port Type

In the containment tree, collapse all open packages within the package Data / Services. Navigate to the package Data / Services / QueryProductsService / Ports, and create a new SOAP Port Type class. This can be done manually (as explained in lesson 2) or via New Element > Service > SOAP Port Type.

2012 E2E Technologies | www.e2ebridge.com |

40

Education Lesson 3
Assign the name QueryProductsPortType.

Double-click the port type and enter a description of the port type in the Documentation/Hyperlinks section: The port type provides an operation to query an XML file containing product data. The search result is displayed in the client application.

4.3.2

Defining the Operation


Create an operation for the new port type.

2012 E2E Technologies | www.e2ebridge.com |

41

Education Lesson 3
Assign the name queryProducts.

According the SOAP standard, operations of port types need to be defined as static. In the objectoriented world this means that no instance of the port type class is needed to call the operation. The operation can be called directly without instantiating the port type class. Double-click the new operation to open the operation specification dialog. Select the checkbox Is Static to set this option to true.

Change to the Documentation/Hyperlinks section and enter a description of the operation: The operation defines an interface to query an XML file containing product data. An object containing the search parameters is passed in. An object containing the search result is returned.

2012 E2E Technologies | www.e2ebridge.com |

42

Education Lesson 3
4.3.3 Defining the Operation Parameters
Select the operation queryProducts in the containment tree and create a new parameter.

Assign the name userInput.

2012 E2E Technologies | www.e2ebridge.com |

43

Education Lesson 3
Double-click the new parameter and choose the type SearchParameters. Leave the Direction as in and close the dialog.

Create a second parameter and assign the name productList. In the first iteration, the output of the operation will be just a list of products. All additional calculations will be done in the second iteration. This has the effect, that in the second iteration you will have to change the operations interface.

2012 E2E Technologies | www.e2ebridge.com |

44

Education Lesson 3
Double-click the new parameter and choose the type Catalog. Set the Direction to out and close the dialog.

4.3.4

Assigning a new Activity Diagram to the Operation

At this point, the interface of the Web Service is nearly complete. Each operation must be assigned to an activity diagram of the UML model. Operations of a port type represent the interfaces of a Web Service. Activity diagrams implement the behavior of these operations. Each port type operation has to be assigned to the implementing activity diagram. When the operation is called, the assigned activity diagram will be executed. The activity diagram has not been created yet. In the next step, you will directly assign a new activity diagram to the operation queryProducts. Select the operation queryProducts in the containment tree with the right mouse button, choose Behavior Diagram > Assign.

2012 E2E Technologies | www.e2ebridge.com |

45

Education Lesson 3
The Assign Behavior Diagram dialog displays a list of existing activity diagrams that could be assigned to the operation. As the operation gets assigned a new activity diagram click New and choose Activity Diagram from the drop down list.

The new activity diagram now is listed in the Assign Behavior Diagram dialog and is assigned to the operation queryProducts. Click Close.

2012 E2E Technologies | www.e2ebridge.com |

46

Education Lesson 3
The name of the activity respectively the activity diagram should always correspond to the name of the operation it is specifying. Rename the activity to Query Products.

Expand the activity QueryProducts. The activity diagram Query Products is part of the new activity that has been created at the same time. Note, that the necessary parameter nodes have been created automatically as well.

Note: If you double-click the operation queryProducts in the containment tree, the assigned activity diagram Query Products will always open in the diagram pane. The definition of the third SOAP interface of the Web Service is complete.

2012 E2E Technologies | www.e2ebridge.com |

47

Education Lesson 3
Save the UML model.

4.3.5

Assigning Activity Diagrams to Use Cases

For documentation purposes and to simplify navigation through the UML model, you can link use cases to activity diagrams. In MagicDraw, switch to the use case diagram tab Query Products you defined earlier.

2012 E2E Technologies | www.e2ebridge.com |

48

Education Lesson 3
Select the activity diagram Query Products in the containment tree.

Drag the activity diagram symbol on the diagram pane and drop it onto the use case Query Products.

2012 E2E Technologies | www.e2ebridge.com |

49

Education Lesson 3
The use case Query Products has been linked to the activity diagram Query Products now. In the lower left of the use case, the activity diagram icon is shown. Double-click the use case Query Products to open the linked activity diagram.

Save

the UML model.

2012 E2E Technologies | www.e2ebridge.com |

50

Education Lesson 3
4.4 Activity Diagram

The next step in the development process is to model the implementation of the operation queryProducts.

4.4.1

Outlining the Activity

The first step when modeling complex activity diagrams is to define a rough sketch of the activities. In the picture below, the completed activity diagram provides an overview of all required UML elements.

The first action calls the activity Read XML File and contains actions to read the XML file and to create the output object allProducts, which is of type Catalog. The object contains the data title, category, manufacturer, seller, sellerType, and priceUSD for each product record. To retrieve the data from the XML file you need to use the file system adapter.

2012 E2E Technologies | www.e2ebridge.com |

51

Education Lesson 3
The second action calls the activity Filter File Content, which has two input objects: the object userInput of type SearchParameters containing the array keywords, and the object allProducts, which is the output of the first action Read XML File. The output of the activity Filter File Content is a subset of records that have been read from the XML file. The filtered data is assigned to the output object filteredProducts. The object filteredProducts is of type Catalog. The third action calls the activity Calculate Total and Currencies. For each product record found in the input object filteredProducts the attribute PriceCHF and some other data, such as total and delivery charge, is calculated and written to the final object searchResult. The last step in the control flow is the action node called Set Title. It has two input objects, userInput and searchResult. The object userInput also contains the attribute title, which will be assigned to the attribute title of object searchResult. In this first iteration, you will draw the reading of the XML file and the filtering of the file content, marked in red in the figure above. As no calculations will be done yet, the output parameter will be a list of products. Now, start drawing the activity diagram. Add the input parameter userInput to the diagram frame. Place it on the left diagram frame border.

2012 E2E Technologies | www.e2ebridge.com |

52

Education Lesson 3
Add the output parameter productList to the diagram frame. Place it on the right diagram frame border.

Add an initial node and an activity final node to the activity diagram. Assign the names Start and End.

Click the initial node Start and choose the Control Flow icon from the smart manipulations bar, ...

2012 E2E Technologies | www.e2ebridge.com |

53

Education Lesson 3
... draw a new action node ...

... and assign the name Read XML File.

Finally, draw a control flow from action node Read XML File to another action node Filter File Content and from there to the activity final node End.

2012 E2E Technologies | www.e2ebridge.com |

54

Education Lesson 3
Save the UML model.

4.4.2

Reading the XML File

The first action calls the activity Read XML File and contains actions to read the XML file and to create the output object allProducts. To retrieve the data from the XML file you need to use the file system adapter. Currently, the action node Read XML File has no behavior, that is, an activity that is called at this point. You will now model the activity diagram that defines the behavior of this action node. Right-click the action node Read XML File and select the menu items New Diagram > Activity Diagram from the context menu.

2012 E2E Technologies | www.e2ebridge.com |

55

Education Lesson 3
The Create Diagram dialog window opens, showing the containment tree. In the text field Type Activity Diagram name type in Read XML File. This will be the name the activity diagram. Expand the package Data / Services / QueryProductsService and select the package QueryProductsPortType. Note: Make sure to select the package QueryProductsPortType as the destination to where the new activity diagram will be stored. Click Create Owner and select Activity from the list.

In the following activity specification dialog, assign the name Read XML File to the activity, too. Close all dialog windows.

2012 E2E Technologies | www.e2ebridge.com |

56

Education Lesson 3
The new activity diagram is opened in the diagram pane. In the containment tree, it is displayed below the activity having the same name.

Return to the activity diagram Query Products. The action node Read XML File is now linked to the activity Read XML File defining its behavior.

2012 E2E Technologies | www.e2ebridge.com |

57

Education Lesson 3
Right-click the action node Read XML File and choose Select in Containment Tree. Note that there is no input or output defined for this action yet.

Double-click the action Read XML File either in the containment tree or in the diagram pane to open the empty activity diagram again.

In the picture below, the completed activity diagram provides an overview of all activities you are going to implement in Read XML File.

2012 E2E Technologies | www.e2ebridge.com |

58

Education Lesson 3

When reading from a file (see action node Read Products XML File), the data is stored in an object data, which is of base type Blob. A blob is a binary large object that can store a large amount of binary data (e.g. pictures, web pages, and so on). To read the XML file, you can use the file system adapter that facilitates the file access. All you need to do is to define the location where the file is stored. In the activity diagram, you define the action of the file system adapter (for instance read). In the component diagram, you customize the file system interface (file name and path). Note: It is also possible to define the path and name of a file dynamically in the activity diagram. For more details refer to the E2E Bridge Reference Guide. Note: The output object of the file system adapter when reading a file must always be named data. After the XML data has been stored in a blob, the binary data is transformed and assigned to the output object allProducts. The output object is passed to the caller, which is the action Read XML File in the activity diagram Query Products.

2012 E2E Technologies | www.e2ebridge.com |

59

Education Lesson 3
Right-click directly into the empty activity diagram and choose Select in Containment Tree. The activity diagram is selected in the containment tree.

2012 E2E Technologies | www.e2ebridge.com |

60

Education Lesson 3
In the containment tree, select the activity Read XML File and create a new parameter: allProducts : Catalog (complex type) direction out Note: After creating the parameter and assigning the type, a pin was added to the caller action Read XML File in the activity diagram Read XML File automatically.

Place the parameter on the right frame border in the diagram pane.

Draw the activity diagram as shown in the picture below:

2012 E2E Technologies | www.e2ebridge.com |

61

Education Lesson 3

Initial and final nodes: Start and End Action nodes: Read Catalog XML File Map XML to Objects Draw all required control and object flows as shown in the picture. Before finishing the implementation of the two action nodes, you will return to the caller of this activity in order to complete it. Go back to the previous activity diagram Query Products by using the Previous Diagram menu icon.

2012 E2E Technologies | www.e2ebridge.com |

62

Education Lesson 3
The action node Read XML File calls the activity Read XML File, which returns the object allProducts. When creating this parameter for this activity, a pin was created for the action node in the containment tree. Currently, it is not visible in the diagram pane.

In order to make it visible, right-click the action node Read XML File and choose the menu items Related Elements > Display Pins.

2012 E2E Technologies | www.e2ebridge.com |

63

Education Lesson 3
Select the pin allProducts in the Select Pin dialog.

The pin is displayed in the diagram pane.

2012 E2E Technologies | www.e2ebridge.com |

64

Education Lesson 3
As it is an output pin, move it to the right side of the action node and draw an object flow to the action node Filter File Content.

In the next step, you will finish the implementation of the activity Read XML File. Save the UML model.

4.4.2.1

File System Adapter

The Bridge provides several backend adapters like the file system adapter, which you can use to read and write files. The output of a file system adapter when reading a file is always an object of base type Blob to support all possible data types (e.g. binary for images, text with HTML tags, XML data, etc.). Now, you are going to implement the file reading by the help of the E2E Action Wizard. Return to the activity diagram Read XML File.

2012 E2E Technologies | www.e2ebridge.com |

65

Education Lesson 3
Select the action node Read Catalog XML File and choose E2E Action Wizard from the context menu..

In the stereotype list select FileSystemAdapter.

Click Next .

2012 E2E Technologies | www.e2ebridge.com |

66

Education Lesson 3
The file system adapter can be used for different purposes, for example, to remove and write files, or to handle directories. Therefore, you need to specify the action that the file system adapter shall perform. Leave the default action read as you want to read the file. Click New to define an alias.

You will now define a pointer that links the physical definition of the backend in the component diagram to the logical definition in the activity diagram, where a file system adapter as a backend is used. In this way, an action in the activity diagram will be enabled to access a backend defined in the component diagram. Note that the backend has not been defined in the component diagram, yet. This will be done later by the help of the E2E Components Wizard. Enter the name catalog and click OK and Next.

After finishing the wizard, you can find the alias definition in the package Data / Aliases.

2012 E2E Technologies | www.e2ebridge.com |

67

Education Lesson 3
Remember that the read data is stored in an object data of base type Blob. This object now is suggested from the wizard as a parameter. You do not need any further parameters. Click Next .

The wizard presents a summary of all adjustments. Click Finish .

Often, adapters need to map their standard input or output objects to other objects having different names. Such data mappings can be easily modeled by using pins. A pin already was created by the E2E Action Wizard. Right-click the action node Read Catalog XML File and select Related Elements > Display Pins from the context menu.

2012 E2E Technologies | www.e2ebridge.com |

68

Education Lesson 3
Move the pin to its final position and draw an object flow to the next action node Map XML to Objects.

The stereotype <<FileSystemAdapter>> you have defined on the action node is displayed in blue. The tagged values action=read and alias=catalog are also displayed. The action is ready to read the XML file using the file system adapter (once the backend is defined in the component diagram). The alias is used to look up the path and name of the file in the component diagram. The content of the XML file will be stored in the object data; no action script needs to be written. When using the file system adapter, the received data must always be stored in an object named data, which needs to be of base type Blob. The default character set of a blob object is UTF-8 (see appendix in the E2E Bridge Reference Guide).

2012 E2E Technologies | www.e2ebridge.com |

69

Education Lesson 3

Save

the UML model.

2012 E2E Technologies | www.e2ebridge.com |

70

Education Lesson 3
4.4.2.2 Transforming XML Data

In the action node MAP XML to Objects, you will transform and assign the data of the blob object to the object allProducts. Use the Action Script Editor to enter the following action script statements.

create allProducts;

This statement creates the object allProducts, which is an instance of class Catalog. The operation xmlToClass converts an XML structure to a class structure. All XML elements are mapped to class associations, respectively <<XMLElement>> stereotyped attributes, automatically. The operation is called on the blob object data containing the XML data.

set allProducts = data.xmlToClass();

2012 E2E Technologies | www.e2ebridge.com |

71

Education Lesson 3

Note: To make the automatic data mapping of the xmlToClass operation work, the defined class attribute needs to have the same name as the XML element. In this case, you linked the attribute products of class Catalog to the XML Element product by specifying the external name product. For further information about E2E Bridge operations, see E2E Bridge Reference Guide. Save the UML model.

4.4.3

Filtering the File Content

Entering keywords in the search mask of the Excel client will return all matching records in the XML file. The search mask supports a maximum of five search keywords. In the model however, you will support an unlimited number of keywords.

2012 E2E Technologies | www.e2ebridge.com |

72

Education Lesson 3
4.4.3.1 Outlining the Activity

In the activity diagram Query Products, you will now create the activity diagram that defines the behavior of the second action Filter File Content. After this step, the activity diagram Query Products will look like shown in the picture below.

2012 E2E Technologies | www.e2ebridge.com |

73

Education Lesson 3
You will define the behavior of the second action using a different approach than for the first action. In the package Data / Services / QueryProductsService / Ports / QueryProductsPortType, create the new activity diagram Filter File Content. MagicDraw will suggest the name of the PortType. Just overwrite the suggested name. Note: Creating an activity diagram in the containment tree, the diagram owner (the activity) will get the same name.

Go back to the activity diagram Query Products. Define the behavior of the second action Filter File Content by right-clicking it and selecting the menu item Behavior from the context menu. Choose the new activity Filter File Content from the list.

Open the activity diagram Filter File Content, and draw all elements displayed in the picture below. The activity diagram will contain all activities to filter the content of the XML file according to the search parameters entered in the Excel client.

2012 E2E Technologies | www.e2ebridge.com |

74

Education Lesson 3

In the following, you find a list of the elements you need to create the activity diagram Filter File Content: Initial and final nodes: Start and End Input parameter: userInput : SearchParameters, Direction in allProducts : Catalog (complex type), Direction in Output parameter: filteredProducts : Catalog (complex type), Direction out Action node: Create a Pattern of Keywords Filter File Content After creating the parameters, the input and output pins of the calling action were generated automatically in the containment tree. Return to the activity diagram Query Products.

2012 E2E Technologies | www.e2ebridge.com |

75

Education Lesson 3
The object flow of the input object is already drawn. Therefore, there is no need to make the generated input pin visible. In order to make the output pin visible, rightclick the action node Filter File Content and choose the menu items Related Elements Display Pins from the context menu.

Select the pin filteredProducts from the Select Pin dialog.

To make it more obvious that the pin is an output pin, move it to the right side of the action node.

2012 E2E Technologies | www.e2ebridge.com |

76

Education Lesson 3
The value of the pin filteredProducts is used as output of the SOAP operation for the time being. Draw the required object flow from the pin to the output parameter productList. Also, draw the object flow from the input parameter userInput to the action Filter File Content.

Save

the UML model.

4.4.3.2

Creating Keyword Patterns

In the next step, you will draw the activity diagram that addresses the keywords search. On the Excel client, the user may fill in no, some, or all keywords in the search mask. Upon his input you have to decide what has to be done next. This decision will be modeled with a decision node. If no keyword has been entered, all rows will be selected. If one or more keywords have been entered, a row will be selected if at least one of the keywords matches the title. You will create an internal array object keywordsArray, which will contain all keywords the user has entered in the search mask. If the number of array elements is zero, you will create a string object called keywordsPattern that does not contain any keywords. Otherwise, you will assign a value to this string object that contains all given keywords within regular expressions. The string keywordsPattern will be used for filtering the rows later. Regular expressions are used to find search patterns in a string. You will use this technique in this example to find keywords in the field title of each product record. This will be all implemented in the activity Create a Pattern of Keywords. Create a new behavior activity diagram Create Keywords Pattern in the package QueryProductsPortType and assign it to the action node. Double-click the action node to open the empty activity diagram. First, you will outline all actions of the activity diagram. 1. 2. 3. 4. First, you filter out all empty keywords. The result is stored in an array. In the decision node, the number of keywords in the array is evaluated. If the array is empty, an empty pattern is created. No further action is executed. If the array is not empty, another pattern is defined using the keywords in the array in the following two actions.

2012 E2E Technologies | www.e2ebridge.com |

77

Education Lesson 3

Create the outline of the activity diagram as shown in the picture above. Initial and final activity node: Start and End Action nodes: Collect Non-Empty Keywords Set Keywords Pattern Finalize Keywords Pattern Create Empty Pattern Decision node: CheckEmpty (see section below on how to draw a decision node) Input parameter (stores the search parameters passed from the client): userInput : SearchParameters (complex type), direction in (copy parameter from activity Filter File Content) Output parameter: keywordsPattern : String (base type), direction out. Central buffer nodes: keywordsArray : Array (base type) (see section below on how to define an array) keywordsPattern : String (base type)

2012 E2E Technologies | www.e2ebridge.com |

78

Education Lesson 3
Draw all control and object flows as shown.

4.4.3.2.1

Decision nodes
In the decision node, you need to decide whether the keywords array from parameter userInput is empty. Select a Decision/Merge icon from the diagram toolbar and place it on the activity diagram.

Double-click it to open the Decision Node specification dialog and assign the name CheckEmpty.

2012 E2E Technologies | www.e2ebridge.com |

79

Education Lesson 3
4.4.3.2.2 Arrays
The object keywordsArray is an array, which can contain an unlimited number of String elements. If an array is drawn in the activity diagram, you always need to define the type of its array elements. Double-click the object keywordsArray to open its specification dialog. Set the Type to Array, which is a base type. Each array must be stereotyped as an array. Select the stereotype E2EArray in the Applied Stereotype field.

Setting this stereotype, the new field Array Element is displayed. Define the base type String as type of the array elements. The type of the array elements is visible now in the second line of the object node.

2012 E2E Technologies | www.e2ebridge.com |

80

Education Lesson 3
4.4.3.2.3 Collecting Non-Empty Keywords
Open the Action Script Editor for action Collect Non-Empty Keywords and define the action script to process the five keywords passed from the client.

create keywordsArray; set keywordsArray = select each from userInput.keywords where element != "";

Note: Arrays always need to be created with the create statement. Note: When typing the select keyword followed by a blank, the statement will be completed except the object and the condition in the where clause. The operation select each from processes every element of array keywords, which is an attribute of input object userInput. By defining the condition where element != "", the operation only considers keyword fields, which the user did not leave empty in the search mask (read: array element that does not equal an empty string). All keywords that are found in the array keywords and match the condition will be copied to the array keywordsArray.

2012 E2E Technologies | www.e2ebridge.com |

81

Education Lesson 3
4.4.3.2.4 Counting Elements of the Array
If no keywords are passed from the client, the flow branches from the decision node CheckEmpty to the right. As you copied all keyword fields, which have not been empty, from the input object userInput to the array object keywordsArray, you can now count all elements. If the array has no elements the flow will branch to the right. Double-click the control flow that branches to the right. Name the control flow empty and enter the following condition in the Guard field.

keywordsArray.count() < 1

The count operation counts all elements in the array object keywordsArray. The condition is true, if the array has no elements (less then 1).

As an alternative, you can edit the guard statement with the Action Script Editor which gives you more control of the syntactical correctness. Select the control flow and press Ctrl - Enter to start the Action Script Editor.

2012 E2E Technologies | www.e2ebridge.com |

82

Education Lesson 3
4.4.3.2.5 Creating an Empty Pattern
Open the Action Script Editor for action Create Empty Pattern. Add the action script that assigns a regular expression to the string object keywordsPattern. Later on, this regular expression stored in the string will be used to select all rows, because no keywords were entered. See detailed information about regular expressions in chapter Regular Expression in the E2E Bridge Reference Guide.

Operators of Regular Expressions


. *

Description Match any character. Match 0 or more times. Match as many times as possible.

set keywordsPattern = ".*";

Assigns the regular expression .* to the output string object keywordsPattern. The search pattern .* will find all characters of a string, which means that in the search every title will match (all records will be returned).

2012 E2E Technologies | www.e2ebridge.com |

83

Education Lesson 3
4.4.3.2.6 Second Branch of the Decision Node
If at least one keyword is passed from the client, the flow branches from the decision node CheckEmpty downwards. Remember, that the flow branches to the right, if the number of elements of array keywordsArray is less than 1. If this condition is not true, the flow branches downwards. Double-click the object flow, name it not empty, and enter else in the Guard field.

else

else represents all other cases that were not specified

explicitly. In the next step, you will construct a search statement with regular expressions in the action state Set Keywords Pattern. The search pattern will also be stored in the string object keywordsPattern and contains all keywords found in the array keywordsArray.

4.4.3.2.7 Setting the Keyword Pattern


Open the Action Script Editor for action Set Keywords Pattern. Add the action script below that assigns a regular expression to the string keywordsPattern. Later on, the search pattern will be used to select all matching rows according to the keywords that were passed from the client.

2012 E2E Technologies | www.e2ebridge.com |

84

Education Lesson 3

Operators of Regular Expressions


. * |

Description Match any character. Match 0 or more times. Match as many times as possible. Alternation. A|B matches either A or B.

set keywordsPattern = reduce keywordsArray using element.concat(".*|.*", nextElement) if single use element;

The statement reduce ... using concat collects all elements of an array in a simple string. When iterating over the array keywordsArray, element and nextElement are placeholders for the current and the next array element of each iteration.
element, ".*|.*", nextElement builds a list composed of a combination of keywordsArray elements and the

regular expression .*|.*. If the array contained only one element, the resulting string would only contain the value of this element (defined by if single use element). Below, you will find an example on how this regular expression works.

2012 E2E Technologies | www.e2ebridge.com |

85

Education Lesson 3
4.4.3.2.8 Finalizing the Keywords Pattern
To finish the activity diagram, complete the search statement by concatenating another regular expression at the beginning and at the end of the string object keywordsPattern. In this activity diagram, this is the last step in the action flow. Open the Action Script Editor for action Finalize Keywords Pattern and enter the statement below.

set keywordsPattern = concat(".*", keywordsPattern, ".*");

The operation concat concatenates the regular expression .*, the current value of keywordsPattern, and the search pattern .* a second time. The new value will be re-assigned to the string keywordsPattern. The following shows an example of a resulting value in the string object keywordsPattern: Three keywords are passed as input from the client (userInput.keywords): nemo lord pirates Value of string keywordsPattern, which will be used to search in each element title (compare action scripts in action node Set Keywords Pattern and Finalize Keywords Pattern):

2012 E2E Technologies | www.e2ebridge.com |

86

Education Lesson 3
.*nemo.*|.*lord.*|.*pirates.* How to read the regular expression: Match any character as many times before and behind nemo, or any character as many times before and behind lord, or any character as many times before and behind pirates. In other words: If any of the three keywords will be found anywhere in the title, then the search pattern matches, and the row has to be selected. The activity has been completed.

In order to make the model more readable and to prevent crossing object or control flows, MagicDraw offers a functionality to split flows. Follow the following steps to split the control flow from the action node Create Empty Pattern to the activity final node.

2012 E2E Technologies | www.e2ebridge.com |

87

Education Lesson 3
Right-click the control flow and select the menu item Split Control Flow from the context menu.

The control flow is now split and has two new ends. The round symbol ( ) marks the points where the control flow is bridged. Rearrange the control flow ends according to the picture on the left.

Save

the UML model.

4.4.3.3

Finalizing the Activity Diagram Filter File Content

Return to the activity diagram Filter File Content. Define the output object for action Create Keywords Pattern, whose behavior you just implemented. The output is the search term keywordsPattern that will be used to filter the data. When you defined the parameters of the activity Create Keywords Pattern, the input and output pins for the calling action were generated automatically. As the input object userInput is already drawn for the action Create Keywords Pattern, you only need to make the output pin visible. Select the action node Create Keywords Pattern and choose the menu items Related Elements > Display Pins from the context menu.

2012 E2E Technologies | www.e2ebridge.com |

88

Education Lesson 3

Only select the output pin keywordsPattern.

2012 E2E Technologies | www.e2ebridge.com |

89

Education Lesson 3
Draw an object flow from output pin keywordsPattern to action node Filter File Content, which needs this string as input.

Save

the UML model.

2012 E2E Technologies | www.e2ebridge.com |

90

Education Lesson 3
4.4.3.4 Filtering the Content

Now, you will use the search term, which you have stored in the object keywordsPattern in the previous steps. In the action node Filter File Content, the actual search will be performed. Enter the statements below to the action script of the action node Filter File Content.

create filteredProducts; set filteredProducts.products = select each from allProducts.products where element.title.toLower() like keywordsPattern.toLower();

The operation select each from processes every element of array products, which is an attribute of input object allProducts. The search terms are applied to element.title, which is explained as follows. element temporarily stores array elements of array products, which are of type Product. The class Product has a string attribute title, which is considered in this search (compare also to the data structure, which you defined in the class diagram). The search term is stored in the string keywordsPattern, which you prepared before. toLower() will set all characters of the search term and title elements to lower case as the search should not be case sensitive. Array elements that match the search pattern according the where clause (where element.Title.toLower() like keywordsPattern.toLower()) will be stored in the attribute products (base type array) of object filteredProducts ( set filteredProducts.products =). Save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

91

Education Lesson 3
4.5 Component and Deployment Diagrams

In the picture below, the component diagram, which results from the work in lesson 2, is displayed. The component diagram will be extended now by using the E2E Components Wizard. You will specify a File System Component in the Composite Service Education.

After running the E2E Components Wizard, the component diagram will look like shown in the following picture.

The deployment diagram will be extended, too, as the deployment for the file backend has to be defined. The artifact instance (the copy of the artifact FileSystemServiceArtifact) will be deployed to node instance localhost. After extending the deployment diagram with the E2E Deployment Wizard, the diagram will look like shown below.

2012 E2E Technologies | www.e2ebridge.com |

92

Education Lesson 3

4.5.1

Reworking and Extending the Component Diagram

For extending the existing configuration you created in lesson 2, you will use the Components Wizard to define a file backend. But first, you will do some renaming. Open the component diagram EducationComponents in node Component View of the containment tree. Rename the Composite service and the Service artifact EducationLesson2 and assign the new name EducationLesson3. Change the control port of the service artifact to 20013.

Rename the Service Component and the Component artifact GetProductService and assign the new names QueryProductsServiceComponent and QueryProductsServiceArtifact. Change port number of the service component artifact to10013.

Delete the port type definition GetProductPortType and the artifact GetProductPortTypeArtifact. Use Ctrl - D for the deletion, as you not only want to delete the symbol from the diagram pane, but also the port type definition from the containment tree.

2012 E2E Technologies | www.e2ebridge.com |

93

Education Lesson 3
Click the icon Edit Component Diagram from the diagram toolbar to start the Components Wizard. Do not use the icon E2E Components Wizard in the MagicDraw menu bar, as this would create a new component diagram.

The E2E Components Wizard dialog window opens. The wizard displays the Service Component EducationLesson3 and the composite artifact EducationLesson3.

Expand the tree on the left and navigate to the component QueryProductsService Component below the Customized Artifacts node of the tree. The wizard shows the new artifact QueryProductsPortTypeArtifact.

2012 E2E Technologies | www.e2ebridge.com |

94

Education Lesson 3
Select QueryProductsPortType and click > to create composite and an artifact.

Leave the name QueryProductsPortTypeArtifact and click OK .

In the customization panel on the right, you will find the new port type artifact QueryProductsPortTypeArtifact. The port type artifact QueryProductsPortTypeArtifact manifests the port type class QueryProductsPortType. In the Customized Artifacts part of the tree panel, the composite artifact is selected again, to give you the option to define further frontend services. But you now have completed the frontend of your Web Service for lesson 3. Click Skip.

2012 E2E Technologies | www.e2ebridge.com |

95

Education Lesson 3
As the Web Service will read data from an XML file, you need to define a backend. As you read a file using the file system adapter, you need to define a file system service in the component diagram in order to access the XML file. Then, you need to define a backend interface for this file system service. Finally, you determine which Composite service will be connected to which backend by the use of dependencies. You will add the alias defined in chapter File System Adapter to this dependency, in order to link the physical definition of the backend with the logical definition in the activity diagram, where the backend adapter is used. Choose the option Backend Services in the Skip dialog.

In the Customized Artifacts tree of the tree panel, the tree node Backend Services is selected. Click New to create a new backend service component.

From the list of backend service stereotypes, choose FileSystemService.

2012 E2E Technologies | www.e2ebridge.com |

96

Education Lesson 3
Create the file system service artifact and assign the name FileSystemService- Artifact, which is the default name suggested. Click OK .

The file system service artifact FileSystemService- Artifact manifests the service component FileSystemService. Click Next .

In the next step, you need to define a backend interface that knows where the XML file is located. To create a new backend interface component, click New .

2012 E2E Technologies | www.e2ebridge.com |

97

Education Lesson 3
To file system interface artifact assign the name XMLFile. When defining the interface artifact, you specify the path where the XML file is physically located on the machine where the file is deployed. Remember, that in the beginning of this lesson you were asked to keep the file path in mind (default location C:/E2EBridgeDocumentation_5/ Docu- mentation/pdf/E2E Education/Lesson3). Enter the file name catalog.xml and the path in the appropriate fields. Click OK .

The file system interface artifact XMLFile manifests the interface component XMLFile. Click Next .

2012 E2E Technologies | www.e2ebridge.com |

98

Education Lesson 3
The definition of the backend file system service is complete, but the dependency is still missing. Click Skip .

Choose the option Dependencies in the Skip dialog.

In the next step, you will specify the connection between the Composite Service and the previously defined backend interface. The connection is established by defining a dependency.

Starting point of the dependency is the service artifact EducationLesson3. Note that in the tree panel, this is the parent element of the Dependencies element. Ending point of the dependency is the backend interface artifact XMLFileArtifact. Select it from the list Point Dependency to on the left and click the button > . For each dependency, an alias needs to be defined. The alias is a pointer that links the physical definition of the backend with the logical definition in the activity diagram, where the backend file system adapter is used. By defining an alias on the

2012 E2E Technologies | www.e2ebridge.com |

99

Education Lesson 3
dependency, a file system adapter in the activity diagram, which is using the same alias, will know the name and the path of the file. You already defined the alias catalog in chapter File System Adapter. The alias catalog is already selected in the Alias field. The dependency is drawn as an arrow from the Composite Service artifact to the backend interface artifact in the component diagram. Besides the alias, further tagged values may be defined for the dependency. In this example, you do not need to enter further tagged values for the dependency. The name is optional, too. Click OK to proceed.

You defined a dependency using the alias catalog. The content of the XML file catalog can be read and processed in the activity diagram that is using the file system adapter, to which the same alias is applied. Click Next .

2012 E2E Technologies | www.e2ebridge.com |

100

Education Lesson 3
All necessary components and artifacts have been defined. Therefore, the wizard skips to the final step. You need to confirm drawing the component diagram. Click Finish .

As of changing the component diagram, some data needs to be reloaded by the Model Compiler. Click Yes to refresh the deployment data and save the UML model.

The component diagram will be re-drawn in MagicDraw. The defined components and artifacts are saved in the package Data / Component View. The generated component diagram will open and the Builder will report the error "Missing Backend Service 'FileSystemServiceArtifact' in Deployment Diagram 'EducationDeployment'..". The missing deployment backend will be created in the next chapter.

The composite service artifact EducationLesson3 has the SOAP service artifact QueryProductsServiceArtifact and its port type artifact QueryProductsPortTypeArtifact. At the backend side, the backend service artifact FileSystemServiceArtifact has been created together with its interface artifact XMLFileArtifact. The dependency from Service artifact EducationLesson3 to the file interface artifact displays the tagged value alias with the assigned value catalog. Remember that the Quick Diagram Layout helps you to route the paths in orthogonal style.

2012 E2E Technologies | www.e2ebridge.com |

101

Education Lesson 3

In the next step, you will extend the deployment diagram with the E2E Deployment Wizard.

4.5.2

Extending the Deployment Diagram

The deployment diagram changed automatically, when you renamed the Composite Service artifact. The artifact instance (a copy of the Composite Service artifact EducationLesson3) will be deployed to node instance localhost. Still, as the Service will call a backend (it will read the XML file), you need to define this backend in the deployment diagram. The XML file is located on the node instance localhost. For extending the existing deployment you created in lesson 2, you will use the Deployment Wizard. Once the deployment diagram is finished, it will look like shown in the following picture.

2012 E2E Technologies | www.e2ebridge.com |

102

Education Lesson 3

Open the deployment diagram EducationDeployment from File View EducationDeployment in the containment tree and click the icon Edit Deployment Diagram from the diagram toolbar to start the Deployment Wizard. Do not use the icon E2E Deployment Wizard in the MagicDraw menu bar, as this would create a new deployment diagram.

The E2E Deployment Wizard dialog window opens. The wizard asks to select a configuration artifact. As this is already done and the name of the deployment diagram cannot be changed, click Next.

2012 E2E Technologies | www.e2ebridge.com |

103

Education Lesson 3
In the tree panel of the wizard, the tree node localhost is displayed. If you expand this tree node, you will find the artifact instance EducationLesson3, which is deployed to node instance localhost. As you will define the backend node instance, click Next .

Select the node instance localhost and click the button > to choose it. The node instance will become a backend node instance, too.

Now, the tree node Backend Server is selected in the tree panel of the wizard. The wizard recognizes that a node instance (localhost) has already been defined. It will not only be used to host an E2E Server, but also to host a backend as well (in this case the file system). localhost is used as E2E Server node and backend node at the same time. Click Next . An instance of the file system service artifact will be deployed to node instance localhost. Select the artifact FileSystemServiceArtifact and click > in order to deploy it to localhost.

2012 E2E Technologies | www.e2ebridge.com |

104

Education Lesson 3
The artifact instance FileSystem ServiceArtifact is shown on the right side of the customization panel. Note: Artifact instances are displayed bold and underlined. If an artifact instance already exists in the UML model and has not yet been added to a backend node instance for deployment, it will also be listed on the left side of the customization panel. Click Next . This is the final step of the Deployment Wizard. You need to confirm drawing the deployment diagram. Click Finish .

As of changing the deployment diagram, some data needs to be reloaded by the Model Compiler. Click Yes to refresh the deployment data and save the UML model.

The deployment diagram will be re-drawn in MagicDraw. The defined node and artifact instances are saved in the package Data / File View. The generated deployment diagram will open.

2012 E2E Technologies | www.e2ebridge.com |

105

Education Lesson 3

Now, the Composite Service EducationLesson3 can be compiled.

2012 E2E Technologies | www.e2ebridge.com |

106

Education Lesson 3
4.6 Compilation

You can now compile and deploy the UML model and complete the first development iteration. Change to the Model Compiler window and expand the file lesson3.xml in the deployment view. Compile the Composite Service EducationDeployment.

If everything is ok, the XMI file name and the Composite Service's name will turn green. If an error occurs, the name of the Composite Service will turn red. Double-clicking the error in the E2E Messages window will highlight the package or the UML element in the containment tree of MagicDraw where the error occurred. Try to correct the error in the UML model and compile the Composite Service again.

2012 E2E Technologies | www.e2ebridge.com |

107

Education Lesson 3
4.7 Solving Errors
If no error has been reported, skip this chapter. If you cannot fix the problem, open the Builder project E2E Education (default location C:\E2EBridgeDocumentation_5\ E2EBuilderProjects). Click OK.

If you not have opened this project before, the E2E Builder File Chooser pops up. Select the file lesson3_first.xml in sub folder uml, which contains all reference models of the first iteration.

If you already studied the solution models in lesson1 or 2, the builder will automatically open the model file last used.

2012 E2E Technologies | www.e2ebridge.com |

108

Education Lesson 3
Close the open project. Switch to the File View tab of the Model Compiler and double-click the file lesson3_first.xml to open it.

You can compare the solution model with your model to find the error. Remember, that you can switch between open project files using the Opened Projects toolbar of Magic Draw. Note: By loading lesson3_first.xml from Builder Project E2E Education your own project Education is no longer the active Builder project, though your own XMI file lesson3.xml is held open within Magic Draw. Wanting to continue working with Education, you will have to reopen the project. See chapter Solving Errors in the lesson 1 or 2 document to get further information on how to change the active Builder project.. As an alternative, you can continue your studies with the solution model by importing the solution into your own Builder project. Compile the imported model and continue with lesson 3. See chapter Solving Errors in the lesson 1 or 2 document to get further information on how to import an xml document into your active Builder project.

2012 E2E Technologies | www.e2ebridge.com |

109

Education Lesson 3
4.8 Testing with E2E SOAP Test Tool

Now, you can test the Composite service with the E2E SOAP Test Tool.

4.8.1

Testing the File Reading


Start the service with Run "Education Deployment" in the Compiler window.

The log view shows the service having been deployed to the internal server of the development environment and now running in the E2E Embedded Server. Open the E2E SOAP Test Tool by clicking Open Test Case . The SOAP Test Tool window opens and shows a test case for lesson3.EducationLesson3.EducationDeployment.

2012 E2E Technologies | www.e2ebridge.com |

110

Education Lesson 3

Have a look at the default test case queryProducts. The gearwheel in gray color indicates that the test case has not yet been run. On the Request tab in the right panel, the input parameter userInput is displayed. Remember, that parameters of complex type have to be created by a create statement. Create the parameter userInput by selecting Create from the context menu.

Expanding userInput, the title field and the keywords array are displayed. Arrays are labeled with the icon be created, too. Create the keywords array.

an have to

The keywords array has been created as an array with no elements. This is indicated by the phrase String[0] in the parameter's tree node. You could append array items now, but in this first step you will not test the filtering functionality. Run the test case without entering keywords. The Analyzer switches to the Response tab and shows the result.

2012 E2E Technologies | www.e2ebridge.com |

111

Education Lesson 3

If the test case reports no error, the test case's gearwheel will turn green catalog.xml should be displayed.

and all eight products from the file

If an error occurred, the gearwheel turns red. Go on reading this page, even if no error occurred. In case of an error, open the detail node on the Response tab. Expand the first message node to read the description of the error. The message might read: Failed stating file C:/E2EBridgeDocumentation_5/Documentation/pdf/E2E Education/Lesson3/catalog.xml. This means, that the data source file catalog.xml could not be found in the location you defined in the backend interface artifact XMLFileArtifact in the component diagram. To solve the problem, copy the file catalog.xml to the location you have defined in the component diagram (default location: C:\E2EBridgeDocumentation_5\Documentation\pdf\E2E Education\Lesson3. As an alternative, you can also check the current location path of the file and adjust the path in the backend interface artifact XMLFileArtifact in the component diagram. In this case you must compile and deploy the Composite service again. This applies also, if there are typing errors in the file's path name. After your corrections, run the test case again. The attribute of the output object productList (product array, labeled with ) is displayed. The array elements, which are of type Product, contain all product records retrieved from the XML file. The name of the array product is being followed by the number of array elements (8) in square brackets: product: Product[8].

4.8.2

Testing the Filtering

Now, you will create a second test case to test the filtering functionality of your Composite service. Create a second test case.

2012 E2E Technologies | www.e2ebridge.com |

112

Education Lesson 3
Assign the name queryProductsFiltering.

Create the parameter userInput.

Note: Normally, you will create the array in the SOAP Test Tool first, which results in an empty array. As, in this case, you want to add an array element, you can directly append an element without creating the array before. The SOAP Test Tool will create the array automatically. As keywords is an array, you need append an array element for each keyword you want to enter. Click keywords with the right mouse button and select Add Item in the context menu. Append an array element for each keyword you wish to enter and type in some values.

Run the test case. On the Response tab, expand the tree. The records shown in the picture below will be selected if you used the keywords Nemo, Lord, and Pirates on the Request tab.

2012 E2E Technologies | www.e2ebridge.com |

113

Education Lesson 3

2012 E2E Technologies | www.e2ebridge.com |

114

Education Lesson 3

5 Second Iteration
Now, after the file reading and filtering is implemented, you will extend the service as to covert the price of the products to CHF. The exchange rate needed will be taken from an external web service. Furthermore, you will calculate the total price and a delivery charge, and set the title of the spreadsheet.

2012 E2E Technologies | www.e2ebridge.com |

115

Education Lesson 3
5.1 Class Diagram

You now will extend the class diagram with the necessary properties for the exchange rate conversion and the other calculations. Switch to the class diagram Product Query Classes, right-click into the diagram pane and choose Close All Diagrams But Current.

The class diagram as it is describes the structure of the XML file and provides the input parameters. It is not possible to add the additional properties directly to the class Product, because the additional properties are not part of the XML file. Therefore, you will create a new class ProductExtended that will contain all attributes of class Product and the additional attribute priceCHF as well.

2012 E2E Technologies | www.e2ebridge.com |

116

Education Lesson 3

Pick the class icon from the diagram toolbar and draw a third class ProductExtended as shown above.

2012 E2E Technologies | www.e2ebridge.com |

117

Education Lesson 3
Select ProductExtended and choose Generalization from the smart manipulation tool bar.

Draw a Generalization from ProductExtended to Product so that ProductExtended inherits all attributes of Product.

2012 E2E Technologies | www.e2ebridge.com |

118

Education Lesson 3
Double-click ProductExtended to open the Specification dialog and switch to the tab Attributes. Note the list of attributes ProductExtended inherited from Product and via Product from Catalog.

Create a new attribute priceCHF with type Float and visibility public. Click Back .

2012 E2E Technologies | www.e2ebridge.com |

119

Education Lesson 3
Note the new attribute priceCHF at the top of the list of all attributes of ProductExtended. Click Close.

Your class diagram now should look like the one below.

2012 E2E Technologies | www.e2ebridge.com |

120

Education Lesson 3
To give back some more calculated information in addition to the products, you need a fifth class. Draw another class and assign the name SearchResult.

Add the following attributes to class SearchResult: Attribute Name deliveryCharge exchangeRate keywords title Attribute Type Float Float String String Visibility public public public public

2012 E2E Technologies | www.e2ebridge.com |

121

Education Lesson 3
Attribute Name totalAmountCHF totalAmountUSD Attribute Type Float Float Visibility public public

SearchResult will be the type of the return parameter of the port type operation. That is why you will link the product information to SearchResult. Draw an association from SearchResult to ProductExtended.

Open the Specification dialog of the association. Assign the name contains as the SearchResult contains ProductExtended. To Role of ProductExtended assign the name matchingProducts, set the multiplicity to 0..* and the visibility to public. Set the multiplicity of Role of SearchResult to 1.

Now, compare the link between SearchResult and ProductsExtended with the link between Catalog and Product.

2012 E2E Technologies | www.e2ebridge.com |

122

Education Lesson 3

The SearchResult contains zero to infinite matchingProducts and some additional information. Association end matchingProducts constitutes an attribute of class SearchResult. It is an array that contains elements of type ProductExtended. Save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

123

Education Lesson 3
5.2 Activity Diagram

5.2.1

Outlining the Activity

First, you will extend the Activity diagram Query Products of the port type operation. Open the activity diagram Query Products.

After the second iteration the QueryProductsService will provide more output than just the list of products. Draw two action nodes as shown below to complete the control flow of activity diagram Query Products.

2012 E2E Technologies | www.e2ebridge.com |

124

Education Lesson 3

Remove the output parameter productList from the diagram as well as from the containment tree as it is not needed any longer. Also remove it from the port type operation queryProducts. Then, move the output pin filteredProducts as shown on the left and connect it to Calculate Total and Currencies.

2012 E2E Technologies | www.e2ebridge.com |

125

Education Lesson 3
Add a new the output parameter searchResult of type SearchResult to the port type operation queryProducts. Define it as of type SearchResult and direction out.

Note that the parameter of the related activity was created automatically. Check the direction of this automatically created parameter and set it to out if necessary.

Drag and drop the parameter searchResult on the diagram border and the activity parameter node will be created automatically, too.

2012 E2E Technologies | www.e2ebridge.com |

126

Education Lesson 3

In the last step, you will set the title to be displayed in the Excel client in the action node Get Title. It will be assigned to the corresponding attribute in the output object searchResult. You need to set the value of attribute title of object searchResult. Therefore, the object is used as input of the action node Get Title. Connect the input parameter userInput to the action node GetTitle. As you change an attribute of the object searchResult, you need to draw an object flow from the action node to the activity parameter node searchResult. The object will be passed to the caller, the port type operation queryProducts.

2012 E2E Technologies | www.e2ebridge.com |

127

Education Lesson 3

Finally, add the following action script to the action node Get Title. set searchResult.title = userInput.title;

Save

the UML model.

2012 E2E Technologies | www.e2ebridge.com |

128

Education Lesson 3
5.2.2 The Currency Calculator

Before creating new activity diagrams, you should analyze some reuse options to reduce investments in time. The class CurrencyCalculator from the lesson 2 model can also be useful in lesson 3. You are going to copy it from lesson 2 and extend it afterwards. Open the activity diagram Get Product in package Data / Services / GetProductService / Ports / GetProductPortType. In lesson 2, you created the activity diagram Get Product containing the call operation action getExchangeRate of class CurrencyCalculator. Navigate to the activity node Get Exchange Rate in the containment tree and double-click it to open the corresponding activity diagram.

2012 E2E Technologies | www.e2ebridge.com |

129

Education Lesson 3
In action node Define Exchange Rate in the activity diagram, the exchange rate is set to a fix value. You will reuse the class operation getExchangeRate as you will perform currency conversions in this lesson, too. The hard coding will be substituted by a call of an external web service.

Drag and drop the whole class CurrencyCalculator from GetProductService to QueryProductsService to the package Classes.

Close the diagram Get Exchange Rate.

2012 E2E Technologies | www.e2ebridge.com |

130

Education Lesson 3
Now, you are going to extend the class CurrencyCalculator as to calculate a new price from a given price and exchange rate. This will be implemented in a new operation calculatePrice. For such small calculations, the E2E Model Compiler offers the possibility to insert action script directly into the operation without drawing a behavior diagram. The only restriction is that one parameter of direction return must be defined. Right-click class CurrencyCalculator in the containment tree and select New Element > Operation.

2012 E2E Technologies | www.e2ebridge.com |

131

Education Lesson 3
Assign the name calculatePrice.

Define three parameters of the operation as listed below. Pay attention to defining the return parameter newPrice as of type return.

name price exchangeRate

type Float Float

direction in in

2012 E2E Technologies | www.e2ebridge.com |

132

Education Lesson 3
newPrice Float return Double-click calculatePrice to open the specification dialog.

Apply the stereotype Action Script to the operation and define the operation as to be static. Click Close.

2012 E2E Technologies | www.e2ebridge.com |

133

Education Lesson 3
Next to the operation name calculatePrice the icon is displayed to indicate the stereotype. Select E2E Action Editor from the operation's context menu to directly add the action script to the operation.

Enter the set-statement as shown on the left and click OK .

This statement is a combination of the set-statement with an if-clause. If parameter price exists and contains a valid value, the calculation price * exchangeRate is executed and the result is assigned to return parameter newPrice. In all other cases (else), newPrice is set to -1.0. The newly defined static class operation calculatePrice will be used in the calculations part Calculate Total and Currencies of your model. You are going to call this operation directly from an action script without creating an object of type CurrencyCalculator first. Therefore, you have to make it available to be used within action script. This is done via a <<use>> dependency from the port type QueryProductsPortType to the used class. First, create a new class diagram in the package Classes.

2012 E2E Technologies | www.e2ebridge.com |

134

Education Lesson 3
Select New Diagram > Class Diagram from the context menu of the package Classes. Assign the name Using Static Operations.

Drag the class CurrencyCalculator onto the diagram pane.

2012 E2E Technologies | www.e2ebridge.com |

135

Education Lesson 3
Drag the port type class QueryProductsPortType onto the diagram pane.

Select the class symbol of QueryProductsPortType and - with help of the smart manipulation toolbar - draw a <<use>> dependency to class CurrencyCalculator.

2012 E2E Technologies | www.e2ebridge.com |

136

Education Lesson 3
Open the specification dialog of the <<use>> dependency and assign the name useCurrencyCalculator. Click Close .

Via the <<use>> dependency useCurrencyCalculator all static operations of CurrencyCalculator are now available in any action scripts that are part of QueryProductsPortType.

Save

UML model.
2012 E2E Technologies | www.e2ebridge.com | 137

Education Lesson 3
5.2.3 Using the SOAP Adapter

To implement the currency calculations, you need the exchange rate from USD to CHF. As mentioned before, you now will get this exchange rate from an external web service, the E2E Education Exchange Rate Provider. Web Services are self-contained applications that can be published and invoked across the Web using XML-based protocols. The E2E Bridge has a "Simple Object Access Protocol" (SOAP) adapter ready, which enables you to use any other Web Service as backend for the Bridge. Instead of reading data from a database, the SOAP adapter sends a request to the other Web Service and gets back a SOAP response message. This message then is mapped to data items.

The steps involved in calling a Web Service through the Bridge are as follows: a client requests the Bridge Web Service the Runtime then makes a HTTP/SOAP call to the linked Web Service the result is mapped to the defined data structure the output is then sent back to the client

Each Web Service has its own distinct interface, defined by the names of the operations and their parameters. Before an external Web Service can be used, its interface definition must be imported to the UML model or from a "Web Services Description Language" (WSDL) document. This functionality is implemented in E2E Builder (also see the E2E Builder User Guide). During the importing process of the WSDL, you can decide wether to create a test model to test the external service or wether to import it into an existing UML model. The WSDL file provides all necessary information to create an UML model, so the test model contains all necessary building blocks for you to test the imported service.

5.2.3.1

Creating a Test Model for the Imported Service

You can create a test model by importing a WSDL or XML Schema file (XSD) directly from a file or via a URL. As it is more convenient, you will import the WSDL from the included file ExchangeRateProvider.wsdl.

2012 E2E Technologies | www.e2ebridge.com |

138

Education Lesson 3
Select Import > Import WSDL / XSD File from the E2E Compiler window.

Navigate to the WSDL file. It is located by default at C:\E2EBridgeDocumentation_5 \Documentation\pdf\E2E Education \Lesson3. Select it and click OK .

The Builder offers the two options to import into an existing model or create a new (e.g. test) model for the imported service WSDL. By importing into a test model, you get an overview over the operations provided by the imported service and you can test them. Select the second option Import Into a New Model and click Yes .

2012 E2E Technologies | www.e2ebridge.com |

139

Education Lesson 3
A dialog opens for you to enter the name of the test model. Change the default name to ExchangeRateProviderTest.xml and click OK.

Within Builder project Education, a new xml file ExchangeRateProviderTest.xml was created. You can switch between the test model and lesson3.xml using the Opened Projects Toolbar.

2012 E2E Technologies | www.e2ebridge.com |

140

Education Lesson 3
But the new composite service is not ready to be compiled yet, because the component and deployment diagrams are missing. During the import, the Model Compiler read all necessary components and instances from the WSDL file and created the packages Component View and Deployment View where all elements of a component and deployment diagram will be saved. As ExchangeRateProviderTest.xml has no deployment definition yet, it is only visible in the File View of the E2E Compiler window. To create the component and deployment diagrams, use the E2E Component respectively Deployment Wizard.

5.2.3.2
menu icon

Creating the Logical View with the E2E Component Wizard


E2E Component Wizard to start the wizard. Assign the name TestComponents to the component diagram and click Next.

Now, start to create the logical view of the imported Web Service with the help of the E2E Component Wizard. Select the

Click New to define the Composite component and artifact.

2012 E2E Technologies | www.e2ebridge.com |

141

Education Lesson 3
Assign the name TestArtifact to the Composite artifact. The corresponding Composite Component will be created automatically. The Control Port is used by the E2E Console to control the deployed Composite service. Leave the value 21111 and switch to the Advanced tab.

Enter the category E2E Education and click OK .

2012 E2E Technologies | www.e2ebridge.com |

142

Education Lesson 3
The TestComponent and TestArtifact are defined. Click Next to proceed.

Click New to define the frontend service of the Composite service.

As you model a web service, select E2ESOAPService from the list of stereotypes. Click OK .

2012 E2E Technologies | www.e2ebridge.com |

143

Education Lesson 3
Enter the name TestServiceArtifact and leave the default setting of the port to 11111. Click OK .

In the customization panel on the right, you will find the new service artifact TestServiceArtifact. Click Next .

2012 E2E Technologies | www.e2ebridge.com |

144

Education Lesson 3
Now, define the interface of the SOAP service. Select the predefined port type GetExchangeRatePortType and click > to create the port type artifact.

Leave the name of the port type artifact to GetExchangeRatePortTypeArtifact and click OK .

As you do not need to define further frontend services, click Skip.

2012 E2E Technologies | www.e2ebridge.com |

145

Education Lesson 3
The external SOAP Service will be accessed via a backend definition. Select Backend Services and click OK .

The Backend Service's components were created during the import process. Select the service artifact GetExchangeRate ServiceArtifact, which is marked in bold and underline. Click > to use it.

Backend definition is complete. Click Skip to proceed.

2012 E2E Technologies | www.e2ebridge.com |

146

Education Lesson 3
The SOAP dependency is still missing yet. Select Dependencies and click OK .

Select GetExchangeRatePortType as target of the dependency. Click > .

2012 E2E Technologies | www.e2ebridge.com |

147

Education Lesson 3
The Create New Dependency dialog opens. It is not necessary to assign a name to the dependency. Click OK .

The dependency starting at TestArtifact now points to the alias of the port type GetExchangeRatePortType. Click Next .

2012 E2E Technologies | www.e2ebridge.com |

148

Education Lesson 3
Confirm the drawing of the component diagram by clicking Finish .

Click Yes to refresh the deployment data and save the UML model.

The component diagram is drawn in MagicDraw and the generated diagram TestComponents will open.

2012 E2E Technologies | www.e2ebridge.com |

149

Education Lesson 3

Use Route Paths Orthogonal Style from the diagram pane menu to rearrange the paths of the diagram.

You might want to rearrange the components as shown below.

2012 E2E Technologies | www.e2ebridge.com |

150

Education Lesson 3

5.2.3.3

Creating the Physical View with the E2E Deployment Wizard

Now, create the physical view of the imported Web Service with the help of the Deployment Wizard. Select the menu icon E2E Deployment Wizard to start the wizard. Enter TestDeployment as a name for the deployment diagram. Click Next.

2012 E2E Technologies | www.e2ebridge.com |

151

Education Lesson 3
Select E2EBridgeServer and click > to create a new node instance to which the service will be deployed.

Keep localhost as name of the physical machine on which the service will be running. Click OK .

Click Next to proceed with the backend definition.

2012 E2E Technologies | www.e2ebridge.com |

152

Education Lesson 3
Select services.e2ebridge. com, the backend node that was already created automatically during the WSDL import. Click > to create a backend node instance.

Click Next to proceed.

Confirm the drawing of the deployment diagram by clicking Finish .

Click Yes to refresh the deployment data and save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

153

Education Lesson 3
In the deployment diagram, you can see the Bridge Server Instance localhost, on which the Test service will be running and the Backend Server Instance services.e2ebridge.com, on which the Exchange Rate Provider service is running.

5.2.3.4

Testing the Service

Now, the test service is ready to be compiled and run.

2012 E2E Technologies | www.e2ebridge.com |

154

Education Lesson 3
Navigate to the deployment TestDeployment of the service in the Model Compiler window and select Run "TestDeployment" from the context menu. The service will be compiled, deployed to the embedded server and started.

If no errors occur, ...

... click Open Test Case .

2012 E2E Technologies | www.e2ebridge.com |

155

Education Lesson 3

Run the test case getExchangeRate without entering any values in the Request tab.

The Response tab opens. If the test case runs without any error, the gearwheel in front of the test case turns green

Running the test case without an error means, that the service was reached, proceeded the request without errors and returned information to the client. As you did not fill in any values in the Request tab, the Exchange Rate Provider service returned the flag validRequest as false and the exchangeRate as 0.

Switch back to the Request tab, enter the values USD and CHF as shown below and run the test case again.

2012 E2E Technologies | www.e2ebridge.com |

156

Education Lesson 3

The Response tab shows the exchangeRate 1.0658 (or whatever exchange rate is actually provided) and the flag validRequest is true, as this was a valid request of the Exchange Rate Provider service.

As you now know how to handle the Exchange Rate Provider service, you can continue with lesson 3 and import the service into your lesson 3 model. Save the UML model ExchangeRateProviderTest.

5.2.3.5

Importing the WSDL into the Lesson 3 Model

Switch back to lesson3.xml and start the importer again. This time, you will import the WSDL file directly into your lesson 3 model. Select Import > Import WSDL / XSD File from the E2E Compiler window again.

2012 E2E Technologies | www.e2ebridge.com |

157

Education Lesson 3
Navigate to the location of the WSDL file and select it. Click OK .

Select the first option Import Into an Existing Model. and click OK.

2012 E2E Technologies | www.e2ebridge.com |

158

Education Lesson 3
Select the UML model of lesson 3 lesson3.xml and click OK .

In the E2E Compiler Messages window, you can see wether the import was successful or not.

After a successful import, the imported service should be part of the containment tree.

Now, the hard coding of the exchange rate in class CurrencyCalculator can be substituted by a call of the web service.

2012 E2E Technologies | www.e2ebridge.com |

159

Education Lesson 3
Open the activity diagram Get Exchange Rate of operation getExchangeRate.

Delete the activity node Define Exchange Rate. Remember to use Ctrl - D when you delete the node from the diagram pane, so that not only the graphical representation of the activity is deleted but also its definition.

2012 E2E Technologies | www.e2ebridge.com |

160

Education Lesson 3
Select the operation getExchangeRate from the imported web service definition of ExchangeRateProvider.

Drag and drop in onto the diagram pane of Get Exchange Rate. All parameters of operation getExchangeRate are shown as input respectively output pins.

2012 E2E Technologies | www.e2ebridge.com |

161

Education Lesson 3
Rearrange the input pins to the left side of call operation action, the output pins to the right side of it. Also, connect the call operation action to the control flow.

Open the specification dialog of getExchangeRate and assign the stereotype SOAPAdapter.

2012 E2E Technologies | www.e2ebridge.com |

162

Education Lesson 3
Now the compiler needs to know where to fin the SOAP operation. In field Alias, select GetExchangeRate PortType from the list.

Now, your activity diagram should look like this:

2012 E2E Technologies | www.e2ebridge.com |

163

Education Lesson 3
Three parameters are still missing yet: fromCurrency, toCurrency and the flag validRequest. name fromCurrency toCurrency validRequest type string string boolean direction in in out Create the three parameters or copy them from the SOAP operation.

Place them on the diagram border as shown on the left and connect them to their corresponding pins. Verify the direction of the automatically created parameter nodes.

The SOAP operation call is implemented. Alternatively, you could have copied the operation call out of your test model ExchangeRateProviderTest from diagram Test Services/GetExchangeRatePortType/ GetExchangeRatePortType/getExchangeRate.

2012 E2E Technologies | www.e2ebridge.com |

164

Education Lesson 3
Save the UML model.

5.2.4

Implementing the Currency Conversion

The next step is to implement the behavior of the third action Calculate Total and Currencies. You will start with the implementation of the currency conversion. In the activity diagram Query Products, you now are going to create the activity diagram that defines the behavior of the action. The new activity diagram will contain all activities to perform a currency calculation for each product record found in the filtered XML data and to calculate a total of all product prices as shown in the picture below.

2012 E2E Technologies | www.e2ebridge.com |

165

Education Lesson 3

2012 E2E Technologies | www.e2ebridge.com |

166

Education Lesson 3
Right-click the action node Calculate Total and Currencies and select New Diagram > Activity Diagram from the context menu.

2012 E2E Technologies | www.e2ebridge.com |

167

Education Lesson 3
The Create Diagram dialog window opens, showing the containment tree. Expand the package Data / Services / QueryProductsService and select the port type QueryProductsPortType. This is the destination, where the new activity diagram will be stored. In the text field Type Activity Diagram name type in Calculations. This will be the name of the activity diagram. Click Create Owner and select Activity from the list.

In the following activity specification dialog, assign the name Calculations to the activity, too. Close all dialog windows.

2012 E2E Technologies | www.e2ebridge.com |

168

Education Lesson 3
The new activity diagram is opened in the diagram pane.

Draw a initial node and assign the name Start.

Within this activity, you are going to iterate over all filteredProducts collected in the prior activities and process each product. Before implementing this, you have to check wether any matching products where found at all within the filtering activities. In the case that no product from file catalog.xml matched the entered keywords, the activity Calculations has to return an empty result and no further calculations will be done.

2012 E2E Technologies | www.e2ebridge.com |

169

Education Lesson 3
First, create an action below the activity start and assign the name Create Output.

The output created will be of type SearchResult. Draw a central buffer node next to action node Create Output. Click into the buffer node and type searchResult : SearchResult. This assigns the name searchResult and the type SearchResult to the buffer node. The searchResult will be buffered until it is complemented within this activity. Finish the definition by pressing Ctrl - Enter .

2012 E2E Technologies | www.e2ebridge.com |

170

Education Lesson 3
Select the action node Create Output again and press Ctrl - Enter to open the Action Script Editor. Create the object searchResult as shown in the screenshot on the left. Click OK or press Ctrl - Enter again to close the Action Script Editor.

Now, define the required input parameter filteredProducts. In the containment tree, copy the parameter filteredProducts from Filter File Content to the activity Calculations. In the Specification dialog of filteredProducts, set the direction of the parameter to in.

2012 E2E Technologies | www.e2ebridge.com |

171

Education Lesson 3
Click Remove Arguments as you do not want to create any additional activity parameter nodes.

Drag and drop filteredProducts on the diagram border of Calculations.

You are going to check now, wether there is any input data to process. Select the action node Create Output and choose the control flow icon smart manipulation bar. from the

Instead of left-clicking to position the action node, click the right mouse button. Select Decision/Merge from the context menu to insert a decision node.

2012 E2E Technologies | www.e2ebridge.com |

172

Education Lesson 3
Assign the name CheckEmpty and connect it to the input parameter.

If the input parameter filteredProducts does not contain valid product information, the calculations will not be proceeded, but the control flow will directly come to an end. Below the buffer node insert an activity final node and assign the name EndEmpty.

2012 E2E Technologies | www.e2ebridge.com |

173

Education Lesson 3
Double-click the control flow coming from the decision CheckEmpty and enter the name empty in the specification dialog. Insert else as a guard expression.

The effective guard expression will be added to the continuing control flow. Keep this in mind, as first you are now going to reuse the previously copied operation from class CurrencyCalculator. Drag and drop the operation getExchangeRate from class CurrencyCalculator onto the diagram pane.

This will draw the action node together with all necessary input and output pins. Rearrange the pins and draw a control flow from CheckEmpty to getExchangeRate.

2012 E2E Technologies | www.e2ebridge.com |

174

Education Lesson 3
Now remember to enter the guard expression on this control flow. Select it and start typing the name not empty. As you are going to enter a complex guard expression, press Ctrl - Enter to use the support of the Action Script Editor and enter the following expression:
filteredProducts.exists() and filteredProducts.products.count() > 0

If the parameter filtered products is existing and contains a number of products greater than 0, this path of the decision will be followed. Remember, that the else path has been defined as to end in an activity final. Your activity diagram now should look as follows.

2012 E2E Technologies | www.e2ebridge.com |

175

Education Lesson 3
All product prices are in currency USD and are to be converted into CHF. Because of that fact, the exchange rate only has to be get once and you are going to replace the input pins by value pins. A value pin is an input pin that provides a value to an action that does not come from an incoming object flow edge. Delete the input pins from the containment tree with Del or from the diagram pane with Ctr - D.

Select Value Pin from the Input Pin drop down menu in the diagram toolbar.

Drag the value pin to the operation action getExchangeRate and drop it there.

2012 E2E Technologies | www.e2ebridge.com |

176

Education Lesson 3
Select Argument as you want to connect the value pin to an operation argument. Click OK .

Select parameter fromCurrency and click OK .

2012 E2E Technologies | www.e2ebridge.com |

177

Education Lesson 3
Double-click the new value pin fromCurrency to open the specification dialog.

In the Value field enter USD and click Close .

2012 E2E Technologies | www.e2ebridge.com |

178

Education Lesson 3
The first parameter fromCurrency is replaced by a value pin.

Create a second value pin in replacement of parameter toCurrency and assign the value CHF.

2012 E2E Technologies | www.e2ebridge.com |

179

Education Lesson 3

After calling the SOAP adapter, you have to decide, whether you got a valid response from the Exchange Rate Provider.

2012 E2E Technologies | www.e2ebridge.com |

180

Education Lesson 3
Insert a Decision Node and assign the name CheckValid.

As an input, the decision node needs the flag validRequest. Draw the necessary object flow.

2012 E2E Technologies | www.e2ebridge.com |

181

Education Lesson 3
When the SOAP request was not valid, you can not continue with the calculations. Draw an Activity Final named EndNotValid and connect it to the decision node.

When the SOAP request was valid, you will transfer the exchange rate to the output parameters and continue with the calculations. Draw a control flow that ends in an action node.

2012 E2E Technologies | www.e2ebridge.com |

182

Education Lesson 3
Now, you have to define the guard expressions. Double-click the control flow that leads down to open the specification dialog. Assign the name is valid and enter the guard expression validRequest. Click Close.

Note: As it concerns a variable of type boolean, the expression validRequest is identically equal to the expression validRequest = true. Double-click the other control flow which leads to EndNotValid. Assign the name is not valid and enter the guard expression else. Click Close.

If the request of the external SOAP service was valid, the calculations are proceeded. If not, all further calculations are skipped.

2012 E2E Technologies | www.e2ebridge.com |

183

Education Lesson 3

Now, continue with the calculations. To the unnamed action node assign the name Move Exchange Rate to Output.

2012 E2E Technologies | www.e2ebridge.com |

184

Education Lesson 3
As the exchange rate will be moved to output, you need the exchange rate as an input to the action node. Draw the appropriate object flow.

The object searchResult will be used within this action node and is therefore needed as an input. To avoid crossing control and object flows which reduce comprehensibility of the diagram, you will not directly connect the buffer node searchResult created in Creating Output to the action node Move Exchange Rate to Output. You are going to draw a second buffer node searchResult near the right diagram border on the left of action node Move Exchange Rate to Output. But first, make some room in your diagram. Press F11 to switch to full screen mode.

2012 E2E Technologies | www.e2ebridge.com |

185

Education Lesson 3
The MagicDraw menu bar disappears, the containment tree and the Compiler window are toggled to auto-hide mode to the benefit of the diagram pane, which expands to the full screen. Select all diagram elements beside the parameter filteredProducts by drawing a selection area.

All selected elements are marked with black rectangles.

2012 E2E Technologies | www.e2ebridge.com |

186

Education Lesson 3
Move the selection a little to the left. If you drag the selection area over the diagram border, the diagram border will move accordingly.

Close Full Screen mode by clicking the appropriate button in the upper left corner or by pressing F11 again.

Draw a buffer node next to the action Move Exchange Rate to Output. Click into the buffer node to assign a name and start typing se. A suggestion list pops up and shows all objects that are available within the activity. Select searchResult from this list. Note: As buffer nodes are only the graphical representation of an object, it does not pose a problem to draw a buffer node twice in the same diagram. Connect the buffer node to the action node.

2012 E2E Technologies | www.e2ebridge.com |

187

Education Lesson 3
Select the action node Move Exchange Rate to Output again and press Ctrl - Enter to open the Action Script Editor. Enter the statement shown in the screenshot on the left. The value of the output parameter exchangeRate CHFUSD is copied to the attribute exchangeRate of the object searchResult. Close the dialog.

The action node is completed.

Save

the UML model.

2012 E2E Technologies | www.e2ebridge.com |

188

Education Lesson 3
In the next step, the price conversion from USD to CHF is done for each product record found in the filtered data. The filtered products are stored in object filteredProducts, which you need as an input parameter. You will define an UML iteration to iterate each product record and execute specific actions. E2E Builder provides functionality to iterate over action script, an adapter, a class operation or over a call behavior action. In this lesson, you will learn how to iterate over an action script as shown in the picture below.

Iterations are defined by the use of expansion regions with stereotype <<iterative>>. Select an Expansion Region from the diagram toolbar and place it on the diagram pane. The expansion region is drawn with an Expansion Node in the upper left corner ( ). An object flow that arrives at an expansion node contains a collection of objects or data, which are separated by the expansion node before being passed onto elements within the expansion region. An expansion region must have one or more expansion nodes receiving input and may have any number of expansion nodes as output including the case of having no output expansion node.

2012 E2E Technologies | www.e2ebridge.com |

189

Education Lesson 3
Scroll down if necessary and resize the expansion region. Toggling to Full Screen mode may be helpful as well. Connect the expansion region to the control flow.

If resizing is not possible, turn off Autosize mode in the expansion region's context menu.

2012 E2E Technologies | www.e2ebridge.com |

190

Education Lesson 3
Draw the object flow from the activity parameter node to the expansion node as shown in the picture on the left.

Open the Expansion Node's specification dialog and assign the name product and the type Product. The element product is used as a temporary iteration object. In each iteration, a product record is stored in this object. Click Close.

2012 E2E Technologies | www.e2ebridge.com |

191

Education Lesson 3
The object filteredProducts of type Catalog has an array attribute products that contains elements of type Product. In each iteration, one element of the array products will be assigned to the temporary iteration object product.

In order to pass an element of the array products of filteredProducts to the iteration object product, you can use a Transformation. Right-click the object flow connecting the activity parameter node with the expansion node and select Transformation from the context menu.

2012 E2E Technologies | www.e2ebridge.com |

192

Education Lesson 3
This stereotypes the object flow as transformation and adds the corresponding icon .

Double-click this icon to open the specification dialog of the Transformation. In the Select field, enter
filteredProducts.products and close the

dialog. To avoid typing errors, you could also use the Action Script Editor for this.

2012 E2E Technologies | www.e2ebridge.com |

193

Education Lesson 3
The transformation rule is displayed in the diagram.

Now, define the result of each iteration step. Create an Output Expansion Node by selecting the corresponding icon from the smart manipulation toolbar of the expansion region.

2012 E2E Technologies | www.e2ebridge.com |

194

Education Lesson 3
Drag the output expansion node to the bottom of the expansion region. Each expansion region may have only one input expansion node, but several output expansion nodes.

The calculated price in CHF is no attribute of class Product, as Product describes the structure of the XML file. For storing the price in CHF, you defined the class ProductExtended with all attributes of Product and the additional attribute priceCHF. This type, you are going to use for the output expansion node.

Open the specification dialog of the output expansion node. Assign the name extendedProduct and the type ProductExtended. Click Close .

2012 E2E Technologies | www.e2ebridge.com |

195

Education Lesson 3
The result of each iteration step has to be stored in an array. Draw an object flow starting at the output expansion node and ending in a central buffer node. Assign the name extendedProducts.

Open the specification dialog of extendedProducts. Apply the stereotype <<E2EArray>> and assign the type Array. The array element type is defined in field Array Element. Each array element has to be of type ProductExtended. Select the corresponding type from the list. Click Close .

Now, you have got defined the input and the output of the expansion region. The purpose of this iteration is to iterate over an action, which calculates the CHF price for each products item. To add an action node to the expansion region, select the Action icon from the diagram toolbar and place it within the expansion region. Assign the name Calculate CHF Prices.

2012 E2E Technologies | www.e2ebridge.com |

196

Education Lesson 3
The action node Calculate CHF Prices needs the exchange rate as input to do the calculation. Therefore, draw an object flow from the output pin exchangeRateCHFUSD of getExchangeRate directly to the action node Calculate CHF Prices.

Connect the input and output expansion nodes to the action node as well.

This action will contain the action script being processed for each array element of the input array. As a result of each iteration step, a new item will be appended to the output array. Within the action script, the array items have the attribute name defined in the input expansion node. The expansion node creates temporary input array items. The output objects need to be created by create statements within the action script and are appended to the related output array by the output expansion node.

2012 E2E Technologies | www.e2ebridge.com |

197

Education Lesson 3
Select Calculate CHF Prices and open the Action Script editor. First, create object extendedProduct, that you need to store the calculated data.

Move all product data from the input object product to the output object productExtended, using set statements.

set set set set set set set

extendedProduct.category = product.category; extendedProduct.link = product.link; extendedProduct.manufacturer = product.manufacturer; extendedProduct.priceUSD = product.priceUSD; extendedProduct.seller = product.seller; extendedProduct.title = product.title; extendedProduct.type = product.type;

Finally, your are going to implement the calculation of the CHF price. You will use the class operation calculatePrice you defined in class CurrencyCaluclator. Remember, that you made it available to be used within action script via a <<use>> dependency called useCurrencyCalculator.

2012 E2E Technologies | www.e2ebridge.com |

198

Education Lesson 3
Start typing the set-statement set extendedProduct.priceCHF = and press Ctrl - Space to display the suggestion list. Select the <<use>> dependency useCurrencyCalculator.

Type : and the available methods will be displayed in the suggestion list. Select calculatePrice.

Enter the two needed parameters product.priceUSD and exchangeRateCHFUSD within the brackets.

2012 E2E Technologies | www.e2ebridge.com |

199

Education Lesson 3
Finalize the statement by typing if
product.priceUSD.exists(); as the

currency calculation only should be executed if a price is assigned to the product.

The last statement in total should read:


set extendedProduct.priceCHF = useCurrencyCalculator:calculatePrice(product.priceUSD,exchangeRateCHFUSD) if product.priceUSD.exists();

Save

the UML model.

5.2.5

Implementing Additional Calculations

In the last step, you are going to summarize the prices to form a price total and calculate the delivery charge, assuming a order quantity of one. This additional information you defined to be stored in class SearchResult. Objects of class SearchResult also contain zero to infinite objects of class ProductExtended in array matchingProducts defined on the association end. As an output of the iteration you implemented in the last chapter, you got the array extendedProducts containing objects of type ProductsExtended. All filtered products with converted prices are stored in this array. Now you are going to set this array into the output object.

2012 E2E Technologies | www.e2ebridge.com |

200

Education Lesson 3
Below Calculate CHF Prices draw an action node Set Matching Products in Output and connect it to the control flow.

Before calculating the prices, you already defined a buffer node searchResult of type SearchResult and stored the exchangeRate in this object. You could connect this buffer node to Set Matching Products in Output now, but for reasons of comprehensibility, draw a third buffer node searchResult near the right diagram border. Assigning a name, type s and select searchResult from the suggestion list. Connect the objects to the action node.

Open the Action Script Editor of Set Matching Products to Output and enter the following statement:
set searchResult.matchingProducts = extendedProducts;

The array matchingProducts you defined in the class diagram on the association end belonging to class SearchResult receives the content of array extendedProducts, containing all filtered products with converted prices. Click OK .

2012 E2E Technologies | www.e2ebridge.com |

201

Education Lesson 3

Draw an action node with action flow below Set Matching Products in Output and assign the name Calculate Sums. Draw an object flow from searchResult to the newly created action node, as you need it as input.

set searchResult.totalAmountCHF = reduce searchResult.matchingProducts using element.priceCHF + nextElement.priceCHF if single use element.priceCHF; set searchResult.totalAmountUSD = reduce searchResult.matchingProducts using element.priceUSD + nextElement.priceUSD if single use element.priceUSD;

Open the Action Script editor and insert the two set statements as shown on the left.

2012 E2E Technologies | www.e2ebridge.com |

202

Education Lesson 3
In this action script, you combine a set statement with a reduce operation. The reduce operation applies to arrays and allows you to reduce the array having elements of complex types to a scalar value. Therefore, an expression is recursively applied to each array element (element) and its next element (nextElement).
set searchResult.totalAmountCHF

The total of the reduce operation is stored in searchResult. totalAmountCHF. The reduce operation is applied to the array searchResult. matchingProducts. For calculating the sum, you must use the currently evaluated array element (element) and its next neighbor (nextElement). The attribute priceCHF of element and nextElement are added up and the result is stored in searchResult. totalAmountCHF.

reduce searchResult.matchingProducts

using element.priceCHF + nextElement.priceCHF

if single use element.priceCHF;

This is a mandatory extension and allows to define the action for an array containing only one single element. If there is only one matching product, the total amount equals to the price of this product.

For more information about the reduce operation refer to the E2E Bridge Reference Guide.

Finally, you are going to calculate the delivery charge.

2012 E2E Technologies | www.e2ebridge.com |

203

Education Lesson 3
Draw an action node with action flow below Calculate Sums and assign the name Calculate Delivery Charge. Draw an object flow from searchResult to the newly created action node, as you need it as input.

local noChargeAmount = setting("No charge at amount of", 50.0); local deliveryCharge = setting("Delivery charge", 10.0); set searchResult.deliveryCharge = if searchResult.totalAmountCHF >= noChargeAmount then 0.0 else deliveryCharge;

Open the Action Script editor and insert the statements as shown on the left.

For the delivery charge calculations, you need the delivery charge amount itself (deliveryCharge), the amount starting from which the delivery is free (noChargeAmount) and the total of the order you just calculated (searchResult.totalAmountCHF).
local noChargeAmount = setting("No charge at amount of", 50.0); local deliveryCharge = setting("Delivery charge", 10.0);

noChargeAmount and deliveryCharge are defined as local variables within the action script.

Remember that in lesson 2 you already learned how to use the setting macro function. With the setting macro literals can be stored global to a Composite service. In the Bridge context, it is possible to define name / value pairs that are configurable from the E2E Embedded Runtime and the E2E Console. The setting macro function also can be combined with a local variable definition.
set searchResult.deliveryCharge =

The result of the calculation is stored in searchResult.deliveryCharge.

if searchResult.totalAmountCHF >= noChargeAmount

The set statement can be combined with a condition. If the order value exceeds the limit defined in noChargeAmount ...

then 0.0

... then no delivery charge is asked ... Remember to use the format 0.0 as searchResult.deliveryCharge is of type float.

else deliveryCharge;

... in all other cases the delivery charge defined by the setting is assigned.

2012 E2E Technologies | www.e2ebridge.com |

204

Education Lesson 3

Complete the diagram by drawing the activity final node and searchResult as output parameter. Assign the name End to the activity final node.

2012 E2E Technologies | www.e2ebridge.com |

205

Education Lesson 3
Copy the parameter searchResult from QueryProducts to Calculations.

Drag and drop the copied parameter searchResult onto the left diagram border and connect it to Calculate Delivery Charge.

Now, all calculations are implemented. Save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

206

Education Lesson 3
5.2.6 Finalizing the Activity Diagram Query Products

Switch back to activity diagram Query Products.

In the previous step you defined output parameter searchResult of activity diagram Calculations. This parameter was automatically added to the activity node as a pin.

2012 E2E Technologies | www.e2ebridge.com |

207

Education Lesson 3
Right-click Calculate Total and Currencies and select Related Elements > Display Pins.

A list of all pins pops up. Deselect the input pin filteredProducts as it is not needed here. Click OK .

2012 E2E Technologies | www.e2ebridge.com |

208

Education Lesson 3
Move the output pin searchResult to the lower right corner of the action node and draw an object flow to the action node Set Title, which needs searchResult as an input.

The package GetProductService is not needed anymore and can be deleted. Leaving the package would lead to compiler errors as you changed the interface of the CurrencyCalculator in the second iteration.

2012 E2E Technologies | www.e2ebridge.com |

209

Education Lesson 3
Save the UML model.

2012 E2E Technologies | www.e2ebridge.com |

210

Education Lesson 3
5.3 Component and Deployment Diagrams

In the picture below, the component diagram, which results from the first iteration, is displayed. You now are going to insert a SOAP Adapter to access the E2E Exchange Rate Converter.

After running the E2E Components Wizard, the component diagram will look like shown in the following picture.

2012 E2E Technologies | www.e2ebridge.com |

211

Education Lesson 3
The deployment diagram will be extended, too, as the deployment for the ExchangeRateProvider backend has to be defined. An artifact of this service is running on services.e2ebridge.com, which will be defined as an additional backend server. After extending the deployment diagram with the E2E Deployment Wizard, the diagram will look like shown below.

5.3.1

Reworking and Extending the Component Diagram

For extending the existing configuration you created in lesson 2, you will use the Components Wizard to define a file backend. But first, you will do some renaming. Open the component diagram EducationComponents. Click the icon Edit Component Diagram from the diagram toolbar to start the Components Wizard. Do not use the icon E2E Components Wizard in the MagicDraw menu bar, as this would create a new component diagram.

The E2E Components Wizard dialog window opens.

2012 E2E Technologies | www.e2ebridge.com |

212

Education Lesson 3
Select the node Backends in the tree on the left.

Select the GetExchangeRate ServiceComponentArtifact from the list of available artifacts. Click > to use it as a backend service.

FileSystemService and GetExchangeRateService are used as backend services. Click Skip as you are not going to define any further backends.

2012 E2E Technologies | www.e2ebridge.com |

213

Education Lesson 3
Click OK to go on with creating the dependency between the Composite service and the newly defined backend.

Ending point of the dependency is the backend interface artifact GetExchangeRatePort TypArtifact. Select it from the list Point Dependency to on the left and click the button > .

2012 E2E Technologies | www.e2ebridge.com |

214

Education Lesson 3
The alias GetExchangeRatePort Typ was provided by the imported service ExchangeRateProvider. Click OK .

Now, two backend dependencies are defined: one to use the file system backend and one to use the SOAP backend. Click Next .

2012 E2E Technologies | www.e2ebridge.com |

215

Education Lesson 3
Confirm drawing the component diagram by clicking Finish .

Click Yes to refresh the deployment data and save the UML model.

The generated component diagram will open. At the backend side, the backend service artifact GetExchangeRateServiceComponentArtifact has been created together with its interface artifact. The dependency from Service artifact EducationLesson3 to the file interface artifact displays the tagged value alias with the assigned value GetExchangeRatePortType. Remember that you can re-arrange the paths by clicking Route Paths Orthogonal Style from the Quick Diagram Layout function.

2012 E2E Technologies | www.e2ebridge.com |

216

Education Lesson 3

The compiler complains about a missing backend service in the deployment diagram. This is correct. You are going to extend the deployment diagram with the deployment wizard in the next step.

2012 E2E Technologies | www.e2ebridge.com |

217

Education Lesson 3
5.3.2 Extending the Deployment Diagram

The deployment diagram contains a Bridge Server and a File System artifact, both on localhost. The E2E Exchange Rate Provider service is located on services.e2ebridge.com. This is why you need to define another node instance. For extending the existing deployment, you will use the Deployment Wizard.

Open the deployment diagram EducationDeployment and click the icon Edit Deployment Diagram from the diagram toolbar to start the Deployment Wizard. Do not use the icon E2E Deployment Wizard in the MagicDraw menu bar, as this would create a new deployment diagram.

The E2E Deployment Wizard dialog window opens.

2012 E2E Technologies | www.e2ebridge.com |

218

Education Lesson 3
The wizards asks to select a configuration artifact. As this is already done and the name of the deployment diagram cannot be changed, click Next.

In the tree panel of the wizard, the tree node Backend Server is displayed. If you expand this tree node, you will find the backend node instance FileSystemServiceArtifact, which is located on backend server instance localhost. The imported service ExchangeRateProvider provided you with a backend definition. Select services.e2ebridge.com and click > .

All backend servers are displayed on the right side of the customization panel.

Select the backend node services.e2ebridge.com in the tree on the left. Note the artifact instance of GetExchangeRateServiceComponent, which was provided by the exchange rate provider service. Click Next .

2012 E2E Technologies | www.e2ebridge.com |

219

Education Lesson 3
This is the final step of the Deployment Wizard. You need to confirm drawing the deployment diagram. Click Finish .

As of changing the deployment diagram, some data needs to be reloaded by the Model Compiler. Click Yes to refresh the deployment data and save the UML model.

The deployment diagram will be re-drawn in MagicDraw. The defined node and artifact instances are saved in the package Data / File View. The generated deployment diagram will open.

2012 E2E Technologies | www.e2ebridge.com |

220

Education Lesson 3

Now, the Composite Service EducationLesson3 can be compiled.

2012 E2E Technologies | www.e2ebridge.com |

221

Education Lesson 3
5.4 Compilation

The UML model has been completed now. You do not have to do further changes in the deployment diagram or on the port type definitions because you have finished that part already in the first iteration. You are ready to compile and to deploy the UML model, to test it with the Model Debugger, and to use the Web Service with the Excel client. Compile the Composite Service's deployment EducationDeployment. No errors or warnings should be reported anymore.

2012 E2E Technologies | www.e2ebridge.com |

222

Education Lesson 3
5.5 Solving Errors
If no error has been reported, skip this chapter. If you cannot fix the problem, open the Builder project E2E Education (default location C:\E2EBridgeDocumentation_5\ pdf\E2EBuilderProjects). Click OK.

If you not have opened this project before, the E2E Builder File Chooser pops up. Select the file lesson3.xml in sub folder uml, which contains all reference models of the first iteration.

If you already studied the solution models in lesson1 or 2, the builder will automatically open the model file last used.

2012 E2E Technologies | www.e2ebridge.com |

223

Education Lesson 3
Close the open project. Switch to the File View tab of the Model Compiler and double-click the file lesson3.xml to open it.

You can compare the solution model with your model to find the error. Remember, that you can switch between open project files using the Opened Projects toolbar of Magic Draw. Note: By loading lesson3.xml from Builder Project E2E Education your own project Education is no longer the active Builder project, though your own XMI file lesson3.xml is held open within Magic Draw. Wanting to continue working with Education, you will have to reopen the project. See chapter Solving Errors in the lesson 1 or 2 document to get further information on how to change the active Builder project.. As an alternative, you can continue your studies with the solution model by importing the solution into your own Builder project. Compile the imported model and continue with lesson 3. See chapter Solving Errors in the lesson 1 or 2 document to get further information on how to import an xml document into your active Builder project.

2012 E2E Technologies | www.e2ebridge.com |

224

Education Lesson 3
5.6 Testing with E2E SOAP Test Tool

Now, you can test the completed service with the E2E SOAP Test Tool. Start the service with Run "Education Deployment" in the Compiler window.

The service starts up.

Open the E2E SOAP Test Tool by clicking Open Test Case . The SOAP Test Tool window opens and shows a test case for lesson3.EducationLesson3.EducationDeployment.

2012 E2E Technologies | www.e2ebridge.com |

225

Education Lesson 3

Create the input parameter userInput.

Enter a title into the parameter title and add an item to the keyword array.

Append an array element for each keyword you wish to enter and type in some values.

2012 E2E Technologies | www.e2ebridge.com |

226

Education Lesson 3

Run the test case.

On the Response tab, expand the tree. The rows shown in the picture below will be selected if you used the keywords Pirates and Nemo on the Request tab.

The SOAP request of the external web service ExchangeRateProvider returned an exchange rate of 1.0658. On each product record the price in CHF was calculated according to this exchange rate. Assuming an order quantity of 1, the total amounts in USD and CHF were calculated. As the total amount in CHF totalamoutCHF is 38.34 CHF and therefore less than 50 CHF, a delivery charge of 10 CHF was determined.

2012 E2E Technologies | www.e2ebridge.com |

227

Education Lesson 3
5.6.1 Requesting the Web Service with the Excel Client

Open the Excel spreadsheet Client-lesson3.xls, which is provided with the E2E Bridge software. You will find the Excel spreadsheet in the documentation location (default location: C:\E2EBridgeDocumentation_5\Documentation\pdf\E2E Education\Lesson3). Double-click the file to start the Excel application. Be sure to enable the macro content of this spreadsheet. In the picture below, you find the Excel spreadsheet that is used to display the search results returned by the Web Service.

5.6.1.1

Output
Title Category Manufacturer Price USD Price CHF Seller

The following fields are needed to display the output data in the Excel spreadsheet:

2012 E2E Technologies | www.e2ebridge.com |

228

Education Lesson 3
Seller type Link Exchange (the same exchange rate is used for all data rows) In addition, the following output data is displayed above the data table: Title Total amount CHF Total amount USD Delivery charge

5.6.1.2

Input

The following input data is sent to the Web Service. Tab Preferences: Title Note that the E2E Composite Service URL must be correct as otherwise the service can not be accessed. If you used other service names or a different port number, you have to change it here. If your are not sure about the correct service path, you can compare respectively copy it from the test case properties.

Tab Search Parameters: Keywords

2012 E2E Technologies | www.e2ebridge.com |

229

Education Lesson 3

5.6.1.3

Requesting the Web Service


Enter a title and switch to tab Search Parameters.

Enter some search keywords and click >> Search << .

The excel spreadsheet is displayed with the retrieved product information.

2012 E2E Technologies | www.e2ebridge.com |

230

Education Lesson 3

2012 E2E Technologies | www.e2ebridge.com |

231

Education Lesson 3

6 Testing with E2E Analyzer


Remember that E2E Analyzer is the interface to the trace feature, with whom you can test all operations on the fly. It traces the execution path of a service that is run through the test. You may view this path graphically, e.g. in order to debug web services or verify their correct functioning. Each operation defined on a port type can be tested with this tool. It makes no difference wether the service is running in the E2E Embedded Runtime or has been deployed to a server. For detailed information see the E2E Builder User Guide.

2012 E2E Technologies | www.e2ebridge.com |

232

Education Lesson 3
6.1 Starting the Service and the Analyzer
Start the education service of lesson 3 in the Embedded Runtime and start the E2E Analyzer.

As you have used the Analyzer before with lesson2, E2E Builder Project Education reopens automatically.

Expand the tree of the lesson3 deployment lesson3.EducationLesson3.EducationDepoyment.

2012 E2E Technologies | www.e2ebridge.com |

233

Education Lesson 3
You can see the request and response log from the earlier running of the test case with the E2E SOAP Test Tool.

2012 E2E Technologies | www.e2ebridge.com |

234

Education Lesson 3
6.2 Test Case Properties
Click the test case queryProducts.

In the left panel of the Analyzer window an additional tab UML appears, saying "The trace is disabled for this test case.". This is correct as this test case has been created with the E2E SOAP Test Tool which does not support tracing. Select Properties from the test case's context menu.

2012 E2E Technologies | www.e2ebridge.com |

235

Education Lesson 3
Switch to the Trace tab, enable trace and check the option Full Trace. Click OK .

Run the test case again to collect the trace information.

2012 E2E Technologies | www.e2ebridge.com |

236

Education Lesson 3
6.3 Tracing through the Service
Switch to the UML tab.

You can see the Query Products service reading the XML file and calling the external web service on services.e2ebridge.com. Trace through the UML model. If the output object contains an array, the list of array elements can be visualized in the Watches panel by right-clicking the messages.

2012 E2E Technologies | www.e2ebridge.com |

237

Education Lesson 3

Clickingk the operation name queryProducts in the main diagram (tab Main), the new tab queryProducts will be displayed (see bottom of the window). It shows the activity diagram Query Products, which is assigned to the selected operation. Click action node Read XML File.

2012 E2E Technologies | www.e2ebridge.com |

238

Education Lesson 3
The behavior of this action, the activity diagram Read XML File, is displayed. Click the object data. The object will be added to the Watches list.

Double-clicking the object data in the watches panel or selecting Show Value from the context menu will open the E2E Blob Viewer showing the complete content of the blob.

The Blob Viewer shows the blob in hexadecimal encoding. Click .

2012 E2E Technologies | www.e2ebridge.com |

239

Education Lesson 3
The Blob Viewer shows the decoded blob so that the content of the XML file is viewable in plain text.

Switch back to the tab queryProducts and navigate through Filter File Content to Create Keywords Pattern.

Note the branch, which was followed according the evaluated expression in the decision node.

2012 E2E Technologies | www.e2ebridge.com |

240

Education Lesson 3
Clicking on the term branching expression displays the branching expression.

On the right side of the decision, you can see 1 unfollowed branch. Clicking it and the branching expression is displayed.

If there is more than one unfollowed branch (which is possible as well), a box with a list of all not followed branches is displayed. By clicking e.g. expression1 the not matching expression is displayed.

You can run a second test case with other parameters.

2012 E2E Technologies | www.e2ebridge.com |

241

Education Lesson 3
Select queryProducts from the left tree and create a second test case.

Create userInput.

Enter a title and no keywords and run the test case.

Switch to the UML tab and navigate to Create Keywords Pattern. Note, that now the branching expression and the control flow differs from the previous test case.

2012 E2E Technologies | www.e2ebridge.com |

242

S-ar putea să vă placă și