• Ingen resultater fundet

XSD definitions of Shop Service

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