ICT Siste gruppetime INF mai 2006
ICT Transformasjoner En transformasjon krever to metamodeller en kilde-modell (source) en mål-modell (target) Det finnes mange teknologier for å realisere Web Services, WSDL er en av disse I en transformasjonsprosess vil reglene i for eksempel ATL mappe fra instanser av en UML metamodell til instanser av en WSDL metamodell
ICT WSDL WSDL er i hovedsak satt sammen av Types – abstrakte datatyper Message – meldingsstruktur PortType – grensesnittet til tjenesten Binding – hvordan tjenesten kan aksesseres Service – hvem som tilbyr en gitt tjeneste
ICT
UML Package til WSDL Definition Opprette en instans av WSDL!Definition med de samme egenskaper som UML!Package name blir en konkatenering av ’Service_’ og pack.name targetNamespace blir en konkatenering av ’urn://’, pack.name og ’.wsdl’ rule P2D{ from pack : UML!Package to def : WSDL!Definition( name <- ’Service_’ + pack.name, targetNameSpace <- ’urn://’ + pack.name + ’.wsdl’ ) }
ICT
UML DataType til WSDL Types Oppretter en instans av WSDL!Types fra UML!DataTypes type hentes fra dt.type rule Dt2T{ from dt : UML!DataType to t : WSDL!Types( type <- dt.name ) }
ICT
UML Class til WSDL Types Oppretter en instans av WSDL!Types fra UML!Class name hentes fra c.name rule C2T{ from c : UML!Class to t : WSDL!Types( name <- c.name ) }
ICT
UML Interface til WSDL PortType Oppretter en instans av WSDL!PortType name hentes fra verdien til itf.name operations fastsettes gjennom WSDL!PortTypeOperation (rule O2O) Oppretter en instans av WSDL!Binding rule I2Pt{ from itf : UML!Interface to pt : WSDL!PortType( name <- itf.name, operations <- [O2O.wsdlob] itf.feature -> select(e | e.oclIsKindOf( UML!Operation)) ),
ICT forts. UML Interface til WSDL PortType bd : WSDL!Binding( name <- itf.name + 'Binding', type <- pt, operations <- [O2O.wsdlob] itf.feature -> select(e | e.oclIsKindOf( UML!Operation)) ), sv : WSDL!Service( name <- 'Service' + itf.name, port <- pport ), pport : WSDL!Port( name <- itf.name+'Port', binding <- bd, soap <- ssoap ), ssoap : WSDL!SOAP( location <- ' + context-path/url-pattern ) }
ICT
UML Operation til WSDL Operation Oppretter instanser av WSDL PortTypeOperation, WSDL BindingOperation og WSDL Message rule O2O{ from op : UML!Operation to wsdlop : WSDL!PortTypeOperation( name <- op.name, parameterOrder <-op.getOrder(), input <- inp, output <- out ), inp : WSDL!Input ( message <- inp_m ), out : WSDL!Output ( message <- outp_m ),
ICT forts. UML Operation til WSDL Operation inp_m : WSDL!Message( name <- op.owner.name + '_' + op.name ), outp_m : WSDL!Message( name <- op.owner.name + '_'+ op.name + 'Response’ ), wsdlob: WSDL!BindingOperation( name <- op.name, input <- inputb, output <- outputb ), inputb : WSDL!Input( encodingStyle <- ' + 'schemas.xmlsoap.org/soap/encoding/', use <- 'encoded', namespace <- 'urn://'+ op.feature.owner.name + '.wsdl' ), outputb : WSDL!Output( encodingStyle <- ' + 'schemas.xmlsoap.org/soap/encoding/’, use <- 'encoded', namespace <- 'urn://'+ op.feature.owner.name + '.wsdl' ) }
ICT forts. UML Operation til WSDL Operation helper context UML!Operation def: getOrder() : String = (self.parameter -> iterate(par ; order : String = ’ ’ | order + par.name + ' ' )
ICT
Fra UML Parameter til WSDL Part rule P2Pin{ from par : UML!Parameter (par.kind = #pdk_in or par.kind = #pdk_inout) to prt : WSDL!Part( name <- par.name, type <- par.type, owner <- [O2O.inp_m] par.owner ) } rule P2Pout{ from par : UML!Parameter (par.kind = #pdk_return) to prt : WSDL!Part( name <- par.name, type <- par.type, owner <-[O2O.outp_m] par.owner ) }