A.2 Definitions of Shop Service
A.2.2 XSD definitions of Shop Service
This XSD defines types used in the Shop Service. This is where the information-flow control meta-data resides. Elements that correspond to methods calls con-tain a begin label of a method and response element concon-tains an end label of a method.
A.2 Definitions of Shop Service 65
Please note that the end label and the label of a returned element are not the same. The orderProductResponse element contains the end label, and order-ProductResponse type refers to a return element that contains the label of a returned object.
1 <?xml version=” 1 . 0 ” e n c o d i n g=”UTF−8” ?>
2 <x s : s c h e m a
3 x m l n s : t n s=” h t t p : // s h o p s e r v i c e . shop . s 0 9 4 7 5 8 . dtu . dk / ” 4 x m l n s : x s=” h t t p : //www. w3 . o r g /2001/XMLSchema ”
5 version=” 1 . 0 ”
6 ta r g e tN a m e s p a c e=” h t t p : // s h o p s e r v i c e . shop . s 0 9 4 7 5 8 . dtu . dk/ ”>
7
8 <x s : e l e m e n t name=” o r d e r P r o d u c t ” ty p e=” t n s : o r d e r P r o d u c t ”>
9 <x s : a n n o t a t i o n>
10 <x s : a p p i n f o>
11 <l a b e l>Company w r i t e r top meet Post w r i t e r top</ l a b e l>
12 <a u t h o r i t y>Company , Post</ a u t h o r i t y>
13 </ x s : a p p i n f o>
14 </ x s : a n n o t a t i o n>
15 </ x s : e l e m e n t>
16
17 <x s : e l e m e n t name=” o r d e r P r o d u c tR e s p o n s e ” ty p e=”
t n s : o r d e r P r o d u c t R e s p o n s e ”>
18 <x s : a n n o t a t i o n>
19 <x s : a p p i n f o>
20 <l a b e l>Company w r i t e r top meet Post w r i t e r top</ l a b e l>
21 </ x s : a p p i n f o>
22 </ x s : a n n o t a t i o n>
23 </ x s : e l e m e n t>
24
25 <xs:complexTyp e name=” o r d e r P r o d u c t ”>
26 <x s : s e q u e n c e>
27 <x s : e l e m e n t name=” c l i e n t ” ty p e=” t n s : c l i e n t ” minOccurs=”
0 ”>
28 <x s : a n n o t a t i o n>
29 <x s : a p p i n f o>
30 <l a b e l>Company w r i t e r top meet Post w r i t e r
top</ l a b e l>
31 </ x s : a p p i n f o>
32 </ x s : a n n o t a t i o n>
33 </ x s : e l e m e n t>
34 <x s : e l e m e n t name=” o r d e r ” ty p e=” t n s : o r d e r ” minOccurs=” 0 ”
>
35 <x s : a n n o t a t i o n>
36 <x s : a p p i n f o>
37 <l a b e l>Company w r i t e r top meet Post w r i t e r
top</ l a b e l>
38 </ x s : a p p i n f o>
39 </ x s : a n n o t a t i o n>
40 </ x s : e l e m e n t>
41 </ x s : s e q u e n c e>
42 </ xs:complexType>
43
44 <xs:complexType name=” c l i e n t ”>
45 <x s : s e q u e n c e>
46 <x s : e l e m e n t name=” c i t y ” ty p e=” x s : s t r i n g ” minOccurs=” 0 ”>
47 <x s : a n n o t a t i o n>
48 <x s : a p p i n f o>
49 <l a b e l>Post w r i t e r top</ l a b e l>
50 </ x s : a p p i n f o>
51 </ x s : a n n o t a t i o n>
52 </ x s : e l e m e n t>
53 <x s : e l e m e n t name=” f i r s t N a m e ” ty p e=” x s : s t r i n g ” minOccurs
=” 0 ”>
54 <x s : a n n o t a t i o n>
55 <x s : a p p i n f o>
56 <l a b e l>Company w r i t e r top meet Post w r i t e r
top</ l a b e l>
57 </ x s : a p p i n f o>
58 </ x s : a n n o t a t i o n>
59 </ x s : e l e m e n t>
60 <x s : e l e m e n t name=” lastName ” ty p e=” x s : s t r i n g ” minOccurs=
” 0 ”>
61 <x s : a n n o t a t i o n>
62 <x s : a p p i n f o>
63 <l a b e l>Company w r i t e r top meet Post w r i t e r
top</ l a b e l>
64 </ x s : a p p i n f o>
65 </ x s : a n n o t a t i o n>
66 </ x s : e l e m e n t>
67 <x s : e l e m e n t name=” p e r s o n a l I d ” ty p e=” x s : s t r i n g ” minOccurs=” 0 ”>
68 <x s : a n n o t a t i o n>
69 <x s : a p p i n f o>
70 <l a b e l>Company w r i t e r top meet Post w r i t e r
top</ l a b e l>
71 </ x s : a p p i n f o>
72 </ x s : a n n o t a t i o n>
73 </ x s : e l e m e n t>
74 <x s : e l e m e n t name=” s t r e e t ” ty p e=” x s : s t r i n g ” minOccurs=” 0
”>
75 <x s : a n n o t a t i o n>
76 <x s : a p p i n f o>
77 <l a b e l>Post w r i t e r top</ l a b e l>
78 </ x s : a p p i n f o>
79 </ x s : a n n o t a t i o n>
80 </ x s : e l e m e n t>
81 <x s : e l e m e n t name=” s tr e e tN u m b e r ” ty p e=” x s : i n t ”>
82 <x s : a n n o t a t i o n>
83 <x s : a p p i n f o>
84 <l a b e l>Post w r i t e r top</ l a b e l>
85 </ x s : a p p i n f o>
86 </ x s : a n n o t a t i o n>
87 </ x s : e l e m e n t>
88 </ x s : s e q u e n c e>
89 </ xs:complexType>
90
91 <xs:complexType name=” o r d e r ”>
A.2 Definitions of Shop Service 67
92 <x s : s e q u e n c e>
93 <x s : e l e m e n t name=” p r i c e ” ty p e=” x s : i n t ”>
94 <x s : a n n o t a t i o n>
95 <x s : a p p i n f o>
96 <l a b e l>Company w r i t e r top</ l a b e l>
97 </ x s : a p p i n f o>
98 </ x s : a n n o t a t i o n>
99 </ x s : e l e m e n t>
100 <x s : e l e m e n t name=” p r o d u c t ” ty p e=” x s : s t r i n g ” minOccurs=”
0 ”>
101 <x s : a n n o t a t i o n>
102 <x s : a p p i n f o>
103 <l a b e l>Company w r i t e r top</ l a b e l>
104 </ x s : a p p i n f o>
105 </ x s : a n n o t a t i o n>
106 </ x s : e l e m e n t>
107 </ x s : s e q u e n c e>
108 </ xs:complexType>
109
110 <xs:complexTyp e name=” o r d e r P r o d u c tR e s p o n s e ”>
111 <x s : s e q u e n c e>
112 <x s : e l e m e n t name=” r e t u r n ” ty p e=” t n s : r e c e i p t ” minOccurs=
” 0 ”>
113 <x s : a n n o t a t i o n>
114 <x s : a p p i n f o>
115 <l a b e l>Company w r i t e r top</ l a b e l>
116 </ x s : a p p i n f o>
117 </ x s : a n n o t a t i o n>
118 </ x s : e l e m e n t>
119 </ x s : s e q u e n c e>
120 </ xs:complexType>
121
122 <xs:complexTyp e name=” r e c e i p t ”>
123 <x s : s e q u e n c e>
124 <x s : e l e m e n t name=” c i t y ” ty p e=” x s : s t r i n g ” minOccurs=” 0 ”>
125 <x s : a n n o t a t i o n>
126 <x s : a p p i n f o>
127 <l a b e l>Post w r i t e r top</ l a b e l>
128 </ x s : a p p i n f o>
129 </ x s : a n n o t a t i o n>
130 </ x s : e l e m e n t>
131 <x s : e l e m e n t name=” f i r s t N a m e ” ty p e=” x s : s t r i n g ” minOccurs
=” 0 ”>
132 <x s : a n n o t a t i o n>
133 <x s : a p p i n f o>
134 <l a b e l>Company w r i t e r top</ l a b e l>
135 </ x s : a p p i n f o>
136 </ x s : a n n o t a t i o n>
137 </ x s : e l e m e n t>
138 <x s : e l e m e n t name=” lastName ” ty p e=” x s : s t r i n g ” minOccurs=
” 0 ”>
139 <x s : a n n o t a t i o n>
140 <x s : a p p i n f o>
141 <l a b e l>Company w r i t e r top</ l a b e l>
142 </ x s : a p p i n f o>
143 </ x s : a n n o t a t i o n>
144 </ x s : e l e m e n t>
145 <x s : e l e m e n t name=” p e r s o n a l I d ” ty p e=” x s : s t r i n g ” minOccurs=” 0 ”>
146 <x s : a n n o t a t i o n>
147 <x s : a p p i n f o>
148 <l a b e l>Company w r i t e r top</ l a b e l>
149 </ x s : a p p i n f o>
150 </ x s : a n n o t a t i o n>
151 </ x s : e l e m e n t>
152 <x s : e l e m e n t name=” p r i c e ” ty p e=” x s : i n t ”>
153 <x s : a n n o t a t i o n>
154 <x s : a p p i n f o>
155 <l a b e l>Company w r i t e r top</ l a b e l>
156 </ x s : a p p i n f o>
157 </ x s : a n n o t a t i o n>
158 </ x s : e l e m e n t>
159 <x s : e l e m e n t name=” p r o d u c t ” ty p e=” x s : s t r i n g ” minOccurs=”
0 ”>
160 <x s : a n n o t a t i o n>
161 <x s : a p p i n f o>
162 <l a b e l>Company w r i t e r top</ l a b e l>
163 </ x s : a p p i n f o>
164 </ x s : a n n o t a t i o n>
165 </ x s : e l e m e n t>
166 <x s : e l e m e n t name=” s t r e e t ” ty p e=” x s : s t r i n g ” minOccurs=” 0
”>
167 <x s : a n n o t a t i o n>
168 <x s : a p p i n f o>
169 <l a b e l>Post w r i t e r top</ l a b e l>
170 </ x s : a p p i n f o>
171 </ x s : a n n o t a t i o n>
172 </ x s : e l e m e n t>
173 <x s : e l e m e n t name=” s tr e e tN u m b e r ” ty p e=” x s : i n t ”>
174 <x s : a n n o t a t i o n>
175 <x s : a p p i n f o>
176 <l a b e l>Post w r i t e r top</ l a b e l>
177 </ x s : a p p i n f o>
178 </ x s : a n n o t a t i o n>
179 </ x s : e l e m e n t>
180 </ x s : s e q u e n c e>
181 </ xs:complexType>
182 </ x s : s c h e m a>
Listing A.4: XSD type definitions of the Shop Service with labels
Appendix B
Jif code
This appendix contains Jif code of the example system. This implementation is used as a reference. Please note that stripping any information-flow control-related information from Jif code produces valid Java code.
B.1 Business process
This is a reference implementation of the business process written in Jif.
1 package dk . dtu . s 0 9 4 7 5 8 . shop ; 2
3 import dk . dtu . s 0 9 4 7 5 8 . company . CompanyService ; 4 import dk . dtu . s 0 9 4 7 5 8 . company . Customer ; 5 import dk . dtu . s 0 9 4 7 5 8 . company . Product ; 6 import dk . dtu . s 0 9 4 7 5 8 . p o s t a l . P o s t a l S e r v i c e ; 7 import dk . dtu . s 0 9 4 7 5 8 . p o s t a l . Address ; 8 import dk . dtu . s 0 9 4 7 5 8 . p o s t a l . Person ; 9
10 public c l a s s S h o p S e r v i c e a u t h o r i t y ( Company , Post ) { 11
12 public R e c e i p t{Company<−∗ meet Post<−∗} o r d e r P r o d u c t{Company<−∗
meet Post<−∗}( C l i e n t{Company<−∗ meet Post<−∗} c l i e n t , Order{Company<−∗ meet Post<−∗} o r d e r ) where a u t h o r i t y ( Company , Post ) {
13
14 CompanyService c o m p a n y S e r v i c e = new CompanyService ( ) ; 15
16 Customer c u s to m e r = new Customer ( ) ;
17
18 S t r i n g c u s t o m e r P e r s o n a l I d = n u l l;
19 S t r i n g customerFirstName = n u l l;
20 S t r i n g customerLastName = n u l l;
21
22 try {
23 c u s t o m e r P e r s o n a l I d = c l i e n t . g e t P e r s o n a l I d ( ) ; 24 customerFirstName = c l i e n t . g e tF i r s tN a m e ( ) ;
25 customerLastName = c l i e n t . getLastName ( ) ;
26 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
27 }
28
29 try {
30 c u s to m e r . s e t P e r s o n a l I d ( c u s t o m e r P e r s o n a l I d ) ; 31 c u s to m e r . s e tF i r s tN a m e ( customerFirstName ) ;
32 c u s to m e r . setLastName ( customerLastName ) ;
33 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
34 }
35
36 boolean i s V a l i d C u s t o m e r = c o m p a n y S e r v i c e . v a l i d a t e C u s t o m e r ( c u s to m e r ) ;
37
38 P o s t a l S e r v i c e p o s t a l S e r v i c e = new P o s t a l S e r v i c e ( ) ; 39
40 Address a d d r e s s = new Address ( ) ;
41
42 S t r i n g a d d r e s s C i t y = n u l l; 43 S t r i n g a d d r e s s S t r e e t = n u l l; 44 i n t a d d r e s s S tr e e tN u m b e r = −1;
45
46 try {
47 a d d r e s s C i t y = c l i e n t . g e t C i t y ( ) ; 48 a d d r e s s S t r e e t = c l i e n t . g e t S t r e e t ( ) ;
49 a d d r e s s S tr e e tN u m b e r = c l i e n t . g e tS tr e e tN u m b e r ( ) ; 50 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
51 }
52
53 try {
54 a d d r e s s . s e t C i t y ( a d d r e s s C i t y ) ; 55 a d d r e s s . s e t S t r e e t ( a d d r e s s S t r e e t ) ;
56 a d d r e s s . s e tS tr e e tN u m b e r ( a d d r e s s S tr e e tN u m b e r ) ; 57 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
58 }
59
60 Person p e r s o n = new Person ( ) ;
61
62 S t r i n g p e r s o n F i r s tN a m e = n u l l;
63 S t r i n g personLastName = n u l l;
64 S t r i n g p e r s o n P e r s o n a l I d = n u l l; 65
66 try {
B.1 Business process 71
67 p e r s o n F i r s tN a m e = c l i e n t . g e tF i r s tN a m e ( ) ;
68 personLastName = c l i e n t . getLastName ( ) ;
69 p e r s o n P e r s o n a l I d = c l i e n t . g e t P e r s o n a l I d ( ) ; 70 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
71 }
72
73 try {
74 p e r s o n . s e tF i r s tN a m e ( p e r s o n F i r s tN a m e ) ;
75 p e r s o n . setLastName ( personLastName ) ;
76 p e r s o n . s e t P e r s o n a l I d ( p e r s o n P e r s o n a l I d ) ; 77 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
78 }
79
80 boolean i s V a l i d A d d r e s s = p o s t a l S e r v i c e . v a l i d a t e A d d r e s s ( a d d r e s s , p e r s o n ) ;
81
82 Product p r o d u c t = new Product ( ) ;
83
84 S t r i n g productName = n u l l;
85 i n t p r i c e = −1;
86
87 try {
88 productName = o r d e r . g e tP r o d u c t ( ) ; 89 p r i c e = o r d e r . g e t P r i c e ( ) ;
90 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
91 }
92
93 try {
94 p r o d u c t . setName ( productName ) ;
95 p r o d u c t . s e t P r i c e ( p r i c e ) ;
96 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
97 }
98
99 boolean boughtProduct = f a l s e; 100
101 boolean i s V a l i d A d d r e s s 2 = e n d o r s e ( i s V a l i d A d d r e s s , {Company
<−∗ meet Post<−∗}) ;
102 boolean i s V a l i d C u s t o m e r 2 = e n d o r s e ( i s V a l i d C u s to m e r , { Company<−∗ meet Post<−∗}) ;
103
104 i f ( i s V a l i d A d d r e s s 2 && i s V a l i d C u s t o m e r 2 ) {
105 boughtProduct = c o m p a n y S e r v i c e . buyProduct ( p r o d u c t ) ;
106 }
107
108 R e c e i p t r e c e i p t = new R e c e i p t ( ) ; 109
110 S t r i n g r e c e i p t P e r s o n a l I d = n u l l; 111 S t r i n g r e c e i p t F i r s t N a m e = n u l l; 112 S t r i n g r e c e i p tL a s tN a m e = n u l l; 113
114 S t r i n g r e c e i p t C i t y = n u l l; 115 S t r i n g r e c e i p t S t r e e t = n u l l; 116 i n t r e c e i p t S t r e e t N u m b e r = −1;
117
118 S t r i n g r e c e i p t P r o d u c t = n u l l;
119 i n t r e c e i p t P r i c e = −1;
120
121 try {
122 r e c e i p t P e r s o n a l I d = c u s to m e r . g e t P e r s o n a l I d ( ) ; 123 r e c e i p t F i r s t N a m e = c u s to m e r . g e tF i r s tN a m e ( ) ; 124 r e c e i p tL a s tN a m e = c u s to m e r . getLastName ( ) ; 125
126 r e c e i p t C i t y = a d d r e s s . g e t C i t y ( ) ; 127 r e c e i p t S t r e e t = a d d r e s s . g e t S t r e e t ( ) ;
128 r e c e i p t S t r e e t N u m b e r = a d d r e s s . g e tS tr e e tN u m b e r ( ) ; 129
130 r e c e i p t P r o d u c t = p r o d u c t . getName ( ) ; 131 r e c e i p t P r i c e = p r o d u c t . g e t P r i c e ( ) ; 132 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
133 }
134
135 try {
136 r e c e i p t . s e t P e r s o n a l I d ( r e c e i p t P e r s o n a l I d ) ; 137 r e c e i p t . s e tF i r s tN a m e ( r e c e i p t F i r s t N a m e ) ; 138 r e c e i p t . setLastName ( r e c e i p tL a s tN a m e ) ; 139
140 r e c e i p t . s e t C i t y ( r e c e i p t C i t y ) ; 141 r e c e i p t . s e t S t r e e t ( r e c e i p t S t r e e t ) ;
142 r e c e i p t . s e tS tr e e tN u m b e r ( r e c e i p t S t r e e t N u m b e r ) ; 143
144 r e c e i p t . s e t P r o d u c t ( r e c e i p t P r o d u c t ) ; 145 r e c e i p t . s e t P r i c e ( r e c e i p t P r i c e ) ; 146 } catch ( N u l l P o i n t e r E x c e p t i o n ex ) {
147 }
148
149 return r e c e i p t ;
150 }
151 }
Listing B.1: Business process as implemented in Jif