diff --git a/wst/trunk/base_service_intf.pas b/wst/trunk/base_service_intf.pas index 856025247..96987e733 100644 --- a/wst/trunk/base_service_intf.pas +++ b/wst/trunk/base_service_intf.pas @@ -91,7 +91,7 @@ type IItemFactoryEx = interface(IItemFactory) ['{66B77926-7E45-4780-8FFB-FB78625EDC1D}'] - procedure ReleaseInstance(var AInstance); + procedure ReleaseInstance(const AInstance : IInterface); function GetPropertyManager( const APropertyGroup : string; const ACreateIfNotExists : Boolean @@ -1051,7 +1051,7 @@ type ); destructor Destroy();override; function Get(const ATimeOut : Cardinal) : IInterface; - procedure Release(var AItem : IInterface); + procedure Release(const AItem : IInterface); property Min : PtrInt read FMin; property Max : PtrInt read FMax; end; @@ -1074,7 +1074,7 @@ type procedure SetPoolMin(const AValue: PtrInt); protected function CreateInstance():IInterface;override; - procedure ReleaseInstance(var AInstance);virtual; + procedure ReleaseInstance(const AInstance : IInterface);virtual; function GetPropertyManager( const APropertyGroup : string; const ACreateIfNotExists : Boolean @@ -1768,8 +1768,8 @@ begin if ( pt^.Kind = tkEnumeration ) and ( GetTypeData(pt)^.BaseType^ = TypeInfo(Boolean) ) then begin - boolData := Boolean(GetOrdProp(AObject,p^.Name)); - AStore.Put(propName,pt,boolData); + AStore.Get(pt,propName,boolData); + SetPropValue(AObject,p^.Name,boolData); end else begin {$ENDIF} FillChar(enumData,SizeOf(enumData),#0); @@ -1805,10 +1805,10 @@ begin int64Data := enumData.ULongIntData; End; End; + SetOrdProp(AObject,p^.Name,int64Data); {$IFNDEF FPC} end; {$ENDIF} - SetOrdProp(AObject,p^.Name,int64Data); End; tkFloat : Begin @@ -2146,16 +2146,10 @@ begin end; end; -procedure TSimpleItemFactoryEx.ReleaseInstance(var AInstance); -var - tmpIntf : IInterface; +procedure TSimpleItemFactoryEx.ReleaseInstance(const AInstance : IInterface); begin - tmpIntf := IInterface(AInstance); - Pointer(AInstance) := nil; if Pooled then begin - FPool.Release(tmpIntf); - end else begin - tmpIntf := nil; + FPool.Release(AInstance); end; end; @@ -4396,14 +4390,14 @@ begin end; end; -procedure TIntfPool.Release(var AItem: IInterface); +procedure TIntfPool.Release(const AItem: IInterface); var i : PtrInt; begin for i := 0 to Pred(FList.Count) do begin if ( TIntfPoolItem(FList[i]).Intf = AItem ) then begin TIntfPoolItem(FList[i]).Used := False; - AItem := nil; + FLock.Release(); Break; end; end; @@ -4440,7 +4434,6 @@ begin buffer := AStore.ReadBuffer(AName); if ( AObject = nil ) then AObject := Create(); - writeLn;writeLn(AObject.ClassName); locObj := AObject as TStringBufferRemotable;; locObj.Data := buffer; end; diff --git a/wst/trunk/base_soap_formatter.pas b/wst/trunk/base_soap_formatter.pas index 953f35217..467146bf4 100644 --- a/wst/trunk/base_soap_formatter.pas +++ b/wst/trunk/base_soap_formatter.pas @@ -158,13 +158,11 @@ type Const ATypeInfo : PTypeInfo; Const AData : TEnumIntType ):TDOMNode; - {$IFDEF FPC} function PutBool( Const AName : String; Const ATypeInfo : PTypeInfo; Const AData : Boolean ):TDOMNode; - {$ENDIF} function PutInt64( Const AName : String; Const ATypeInfo : PTypeInfo; @@ -192,12 +190,12 @@ type Var AName : String; Var AData : TEnumIntType ); - {$IFDEF FPC} procedure GetBool( Const ATypeInfo : PTypeInfo; Var AName : String; Var AData : Boolean ); + {$IFDEF FPC} procedure GetInt( Const ATypeInfo : PTypeInfo; Var AName : String; @@ -700,7 +698,6 @@ begin ); end; -{$IFDEF FPC} function TSOAPBaseFormatter.PutBool( const AName : String; const ATypeInfo : PTypeInfo; @@ -709,7 +706,6 @@ function TSOAPBaseFormatter.PutBool( begin Result := InternalPutData(AName,ATypeInfo,LowerCase(BoolToStr(AData))); end; -{$ENDIF} function TSOAPBaseFormatter.PutInt64( const AName : String; @@ -808,7 +804,6 @@ begin AData := GetEnumValue(ATypeInfo,locBuffer) End; -{$IFDEF FPC} procedure TSOAPBaseFormatter.GetBool( const ATypeInfo : PTypeInfo; var AName : String; @@ -824,6 +819,7 @@ begin AData := StrToBool(locBuffer); end; +{$IFDEF FPC} procedure TSOAPBaseFormatter.GetInt( const ATypeInfo: PTypeInfo; var AName: String; @@ -1337,7 +1333,7 @@ Var int64Data : Int64; strData : string; objData : TObject; - {$IFDEF FPC}boolData : Boolean;{$ENDIF} + boolData : Boolean; enumData : TEnumIntType; floatDt : Extended; begin @@ -1365,21 +1361,32 @@ begin End; {$ENDIF} tkInteger, tkEnumeration : - Begin - enumData := 0; - Case GetTypeData(ATypeInfo)^.OrdType Of - otSByte : enumData := ShortInt(AData); - otUByte : enumData := Byte(AData); - otSWord : enumData := SmallInt(AData); - otUWord : enumData := Word(AData); - otSLong, - otULong : enumData := LongInt(AData); - End; - If ( ATypeInfo^.Kind = tkInteger ) Then - PutInt64(AName,ATypeInfo,enumData) - Else - PutEnum(AName,ATypeInfo,enumData); - End; + begin + {$IFNDEF FPC} + if ( ATypeInfo^.Kind = tkEnumeration ) and + ( GetTypeData(ATypeInfo)^.BaseType^ = TypeInfo(Boolean) ) + then begin + boolData := Boolean(AData); + PutBool(AName,ATypeInfo,boolData); + end else begin + {$ENDIF} + enumData := 0; + Case GetTypeData(ATypeInfo)^.OrdType Of + otSByte : enumData := ShortInt(AData); + otUByte : enumData := Byte(AData); + otSWord : enumData := SmallInt(AData); + otUWord : enumData := Word(AData); + otSLong, + otULong : enumData := LongInt(AData); + End; + If ( ATypeInfo^.Kind = tkInteger ) Then + PutInt64(AName,ATypeInfo,enumData) + Else + PutEnum(AName,ATypeInfo,enumData); + {$IFNDEF FPC} + end; + {$ENDIF} + end; tkFloat : Begin floatDt := 0; @@ -1516,7 +1523,7 @@ Var int64Data : Int64; strData : string; objData : TObject; - {$IFDEF FPC}boolData : Boolean;{$ENDIF} + boolData : Boolean; enumData : TEnumIntType; floatDt : Extended; begin @@ -1548,21 +1555,33 @@ begin End; {$ENDIF} tkInteger, tkEnumeration : - Begin - enumData := 0; - If ( ATypeInfo^.Kind = tkInteger ) Then - GetInt64(ATypeInfo,AName,enumData) - Else - GetEnum(ATypeInfo,AName,enumData); - Case GetTypeData(ATypeInfo)^.OrdType Of - otSByte : ShortInt(AData) := enumData; - otUByte : Byte(AData) := enumData; - otSWord : SmallInt(AData) := enumData; - otUWord : Word(AData) := enumData; - otSLong, - otULong : LongInt(AData) := enumData; - End; - End; + begin + {$IFNDEF FPC} + if ( ATypeInfo^.Kind = tkEnumeration ) and + ( GetTypeData(ATypeInfo)^.BaseType^ = TypeInfo(Boolean) ) + then begin + boolData := False; + GetBool(ATypeInfo,AName,boolData); + Boolean(AData) := boolData; + end else begin + {$ENDIF} + enumData := 0; + If ( ATypeInfo^.Kind = tkInteger ) Then + GetInt64(ATypeInfo,AName,enumData) + Else + GetEnum(ATypeInfo,AName,enumData); + Case GetTypeData(ATypeInfo)^.OrdType Of + otSByte : ShortInt(AData) := enumData; + otUByte : Byte(AData) := enumData; + otSWord : SmallInt(AData) := enumData; + otUWord : Word(AData) := enumData; + otSLong, + otULong : LongInt(AData) := enumData; + End; + {$IFNDEF FPC} + end; + {$ENDIF} + end; tkFloat : Begin floatDt := 0; diff --git a/wst/trunk/config_objects.pas b/wst/trunk/config_objects.pas new file mode 100644 index 000000000..4f5bcdede --- /dev/null +++ b/wst/trunk/config_objects.pas @@ -0,0 +1,272 @@ +{ + This file is part of the Web Service Toolkit + Copyright (c) 2006 by Inoussa OUEDRAOGO + + This file is provide under modified LGPL licence + ( the files COPYING.modifiedLGPL and COPYING.LGPL). + + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +} + +{$INCLUDE wst_global.inc} +unit config_objects; + +interface +uses SysUtils, Classes, base_service_intf; + +{$INCLUDE wst.inc} +{$INCLUDE wst_delphi.inc} + +type + + TwstConfigItem = class(TBaseComplexRemotable); + + TwstConfigService = class(TwstConfigItem) + private + FPooled: Boolean; + FPoolMax: PtrInt; + FPoolMin: PtrInt; + FTimeOut: PtrUInt; + FName: string; + public + function GetConfigText() : string; + published + property Name : string read FName write FName; + property PoolMax : PtrInt read FPoolMax write FPoolMax; + property PoolMin : PtrInt read FPoolMin write FPoolMin; + property Pooled : Boolean read FPooled write FPooled; + property TimeOut : PtrUInt read FTimeOut write FTimeOut; + end; + + TwstConfigServiceArray = class(TBaseObjectArrayRemotable) + private + function GetItem(AIndex: Integer): TwstConfigService; + public + class function GetItemClass():TBaseRemotableClass;override; + property Item[AIndex:Integer] : TwstConfigService Read GetItem;Default; + end; + + TWstConfigurationObject = class(TBaseComplexRemotable) + private + FServices: TwstConfigServiceArray; + public + constructor Create();override; + destructor Destroy();override; + published + property Services : TwstConfigServiceArray read FServices write FServices; + end; + + + {$IFNDEF FPC} + function GetAppConfigDir(const AGlobal : Boolean) : string; + {$ENDIF} + + function wst_GetConfigFileName():string; + function wst_GetConfigObject() : TWstConfigurationObject; + function wst_GetServiceConfig(const AName : string) : TwstConfigService ; + function wst_GetServiceConfigText(const AName : string) : string ; + procedure wst_CreateDefaultFile(ADest : TStream; AConfigObj : TWstConfigurationObject);overload; + procedure wst_CreateDefaultFile(const AFileName : string; AConfigObj : TWstConfigurationObject);overload; + +implementation +uses + base_soap_formatter, server_service_intf, +{$IFNDEF FPC} + xmldom, wst_delphi_xml +{$ELSE} + DOM, XmlRead, XmlWrite +{$ENDIF}; + +const + sCONFIG_FILE_NAME = 'wst_config.xml'; + sAPPLICATION = 'Application'; + sWST_CONFIG_PATH = 'WST_Configuration'; +var + ConfigurationObjectInstance : TWstConfigurationObject = nil; + +{$IFNDEF FPC} +function GetAppConfigDir(const AGlobal : Boolean) : string; +begin + Result := ExtractFilePath(ParamStr(0)); +end; +{$ENDIF} + +function wst_GetConfigFileName():string; +begin + Result := IncludeTrailingPathDelimiter(GetAppConfigDir(True)) + sCONFIG_FILE_NAME; +end; + +procedure wst_LoadConfigObject(AConfig: TWstConfigurationObject; AStream : TStream);overload; +var + frmt : IFormatterBase; + locPrmName : string; +begin + frmt := TSOAPBaseFormatter.Create(); + frmt.LoadFromStream(AStream); + frmt.SetSerializationStyle(ssNodeSerialization); + locPrmName := sWST_CONFIG_PATH; + frmt.Get(TypeInfo(TWstConfigurationObject),locPrmName,AConfig); +end; + +procedure wst_LoadConfigObject(AConfig : TWstConfigurationObject; const AFileName : string);overload; +var + locStream : TMemoryStream; +begin + if not FileExists(AFileName) then + raise Exception.CreateFmt('File not found : "%s".',[AFileName]); + locStream := TMemoryStream.Create(); + try + locStream.LoadFromFile(AFileName); + locStream.Position := 0; + wst_LoadConfigObject(AConfig,locStream); + finally + FreeAndNil(locStream); + end; +end; + +procedure wst_CreateDefaultFile(ADest : TStream; AConfigObj : TWstConfigurationObject);overload; +var + locObj : TWstConfigurationObject; + c, i : Integer; + servReg : IServerServiceRegistry; + frmt : IFormatterBase; + createdHere : Boolean; +begin + if ( AConfigObj <> nil ) then + locObj := AConfigObj + else + locObj := TWstConfigurationObject.Create(); + try + createdHere := ( AConfigObj = nil ); + servReg := GetServerServiceRegistry(); + c := servReg.GetCount(); + locObj.Services.SetLength(0); + if ( c > 0 ) then begin + locObj.Services.SetLength(c); + for i := 0 to Pred(c) do begin + locObj.Services[i].Name := servReg.GetName(i); + end; + end; + frmt := TSOAPBaseFormatter.Create(); + frmt.SetSerializationStyle(ssNodeSerialization); + frmt.BeginObject(sAPPLICATION,TypeInfo(TWstConfigurationObject)); + frmt.Put(sWST_CONFIG_PATH,TypeInfo(TWstConfigurationObject),locObj); + frmt.EndScope(); + frmt.SaveToStream(ADest); + finally + if createdHere then + FreeAndNil(locObj); + end; +end; + +procedure wst_CreateDefaultFile(const AFileName : string; AConfigObj : TWstConfigurationObject);overload; +var + locStream : TMemoryStream; +begin + locStream := TMemoryStream.Create(); + try + wst_CreateDefaultFile(locStream,AConfigObj); + locStream.SaveToFile(AFileName); + finally + FreeAndNil(locStream); + end; +end; + +function wst_GetConfigObject() : TWstConfigurationObject; +var + locFileName : string; +begin + if ( ConfigurationObjectInstance = nil ) then begin + ConfigurationObjectInstance := TWstConfigurationObject.Create(); + locFileName := wst_GetConfigFileName(); + if FileExists(locFileName) then + wst_LoadConfigObject(ConfigurationObjectInstance,locFileName) + else + wst_CreateDefaultFile(locFileName,ConfigurationObjectInstance); + end; + Result := ConfigurationObjectInstance; +end; + +function wst_GetServiceConfig(const AName : string) : TwstConfigService ; +var + i, c : Integer; + servs : TwstConfigServiceArray; +begin + Result := nil; + servs := wst_GetConfigObject().Services; + c := servs.Length; + for i := 0 to Pred(c) do begin + if AnsiSameText(AName,servs[i].Name) then begin + Result := servs[i]; + Break; + end; + end; +end; + +function wst_GetServiceConfigText(const AName : string) : string ; +var + s : TwstConfigService; +begin + s := wst_GetServiceConfig(AName); + if ( s <> nil ) then + Result := s.GetConfigText() + else + Result := ''; +end; + +{ TwstConfigServiceArray } + +function TwstConfigServiceArray.GetItem(AIndex: Integer): TwstConfigService; +begin + Result := Inherited GetItem(AIndex) As TwstConfigService; +end; + +class function TwstConfigServiceArray.GetItemClass() : TBaseRemotableClass; +begin + Result := TwstConfigService; +end; + +{ TWstConfigurationObject } + +constructor TWstConfigurationObject.Create; +begin + inherited; + FServices := TwstConfigServiceArray.Create(); +end; + +destructor TWstConfigurationObject.Destroy; +begin + FreeAndNil(FServices); + inherited; +end; + +{ TwstConfigService } + +function TwstConfigService.GetConfigText() : string; +begin + Result := Format('PoolMin=%d;PoolMax=%d;Pooled=',[PoolMin,PoolMax]); + if Pooled then + Result := Result + 'True' + else + Result := Result + 'False'; +end; + +initialization + GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TwstConfigService),'Service'); + GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TwstConfigServiceArray),'Services'); + GetTypeRegistry().Register(sWST_BASE_NS,TypeInfo(TWstConfigurationObject),'WST_Configuration'); + TwstConfigService.RegisterAttributeProperty('Name'); + GetTypeRegistry().ItemByTypeInfo[TypeInfo(TwstConfigServiceArray)].RegisterExternalPropertyName('Item','service'); + +finalization + if ( ConfigurationObjectInstance <> nil ) and + ( GetServerServiceRegistry.GetCount() <> ConfigurationObjectInstance.Services.Length ) + then begin + wst_CreateDefaultFile(wst_GetConfigFileName(),nil); + end; + FreeAndNil(ConfigurationObjectInstance); + +end. diff --git a/wst/trunk/delphi_init_com.pas b/wst/trunk/delphi_init_com.pas new file mode 100644 index 000000000..ba5373525 --- /dev/null +++ b/wst/trunk/delphi_init_com.pas @@ -0,0 +1,13 @@ +unit delphi_init_com; + +interface +uses ActiveX; + +implementation + +initialization + CoInitialize(nil); + +finalization + CoUninitialize(); +end. diff --git a/wst/trunk/indy_http_server.pas b/wst/trunk/indy_http_server.pas index 7faa7420f..0c2aa2583 100644 --- a/wst/trunk/indy_http_server.pas +++ b/wst/trunk/indy_http_server.pas @@ -49,8 +49,6 @@ type FHTTPServerObject: TIdHTTPServer; FRootAddress : string; private - function GenerateWSDLTable():string; - procedure ProcessWSDLRequest( {$IFDEF INDY_10} AContext : TIdContext; @@ -93,18 +91,14 @@ type implementation -uses base_service_intf, - server_service_intf, server_service_imputils, - server_service_soap, server_binary_formatter, server_service_xmlrpc, - metadata_repository, metadata_wsdl, +uses {$IFNDEF FPC} - ActiveX, XMLDoc,XMLIntf,xmldom, wst_delphi_xml, -{$ELSE} - DOM, XMLWrite, wst_fpc_xml, + ActiveX, {$ENDIF} - metadata_service, metadata_service_binder, metadata_service_imp, + base_service_intf, + server_service_intf, server_service_imputils, + metadata_wsdl; - user_service_intf, user_service_intf_binder, user_service_intf_imp; {$IFNDEF FPC} type @@ -129,11 +123,6 @@ begin end; {$ENDIF} -const - sSEPARATOR = '/'; - sSERVICES_PREFIXE = 'services'; - sWSDL = 'WSDL'; - function ExtractNextPathElement(var AFullPath : string):string; var i : SizeInt; @@ -154,78 +143,8 @@ begin end; end; -function GetWSDL(const ARepName, ARootAddress: shortstring):string; -var - strm : TMemoryStream; - rep : PServiceRepository; - doc :TXMLDocument; - i : SizeInt; - s : string; -begin - Result := ''; - rep := nil; - doc := Nil; - i := GetModuleMetadataMngr().IndexOfName(ARepName); - if ( i < 0 ) then - Exit; - strm := TMemoryStream.Create(); - try - s := GetModuleMetadataMngr().GetRepositoryName(i); - GetModuleMetadataMngr().LoadRepositoryName(s,ARootAddress,rep); - //if ( GetModuleMetadataMngr().LoadRepositoryName(s,rep) > 0 ) then - //rep^.namespace := 'urn:wst'; - strm.Clear(); - doc := CreateDoc(); - GenerateWSDL(rep,doc); - WriteXMLFile(doc,strm); - i := strm.Size; - if ( i > 0 ) then begin - SetLength(Result,i); - Move(strm.memory^,Result[1],i); - end; - finally - ReleaseDomNode(doc); - strm.Free(); - GetModuleMetadataMngr().ClearRepository(rep); - end; -end; - - { TwstIndyHttpListener } -function TwstIndyHttpListener.GenerateWSDLTable(): string; -var - r : IModuleMetadataMngr; - i : Integer; -begin - r := GetModuleMetadataMngr(); - Result := '' + - ''+ - ''+ - 'The Web Services Toolkit generated Metadata table'+ - ''+ - '' + - '

The following repositories has available. Click on the link to view the corresponding WSDL.

'+ - ''; - - for i := 0 to Pred(r.GetCount()) do begin - Result := Result + - '' + - '' + - ''; - end; - Result := Result + - - '
' + - Format('',[sSEPARATOR+sSERVICES_PREFIXE+sSEPARATOR+sWSDL+sSEPARATOR+r.GetRepositoryName(i)])+ - r.GetRepositoryName(i) + - ''+ - '
'+ - ''+ - ''+ - ''; -end; - procedure TwstIndyHttpListener.ProcessWSDLRequest( {$IFDEF INDY_10} AContext : TIdContext; @@ -241,7 +160,7 @@ begin locRepName := ExtractNextPathElement(APath); if AnsiSameText(sWSDL,locRepName) then locRepName := ExtractNextPathElement(APath); - strBuff := GetWSDL(locRepName,FRootAddress); + strBuff := GenerateWSDL(locRepName,FRootAddress); i := Length(strBuff); if ( i > 0 ) then begin AResponseInfo.ContentType := 'text/xml'; @@ -250,7 +169,7 @@ begin AResponseInfo.ContentStream.Write(strBuff[1],i); Exit; end; - AResponseInfo.ContentText := GenerateWSDLTable(); + AResponseInfo.ContentText := GenerateWSDLHtmlTable(); AResponseInfo.ContentType := 'text/html'; end; @@ -395,17 +314,6 @@ begin end; initialization - RegisterStdTypes(); - Server_service_RegisterBinaryFormat(); - Server_service_RegisterSoapFormat(); - Server_service_RegisterXmlRpcFormat(); - RegisterUserServiceImplementationFactory(); - Server_service_RegisterUserServiceService(); - - Register_user_service_intf_ServiceMetadata(); - - RegisterWSTMetadataServiceImplementationFactory(); - Server_service_RegisterWSTMetadataServiceService(); end. diff --git a/wst/trunk/metadata_wsdl.pas b/wst/trunk/metadata_wsdl.pas index 47342b995..c95b17542 100644 --- a/wst/trunk/metadata_wsdl.pas +++ b/wst/trunk/metadata_wsdl.pas @@ -76,12 +76,18 @@ type ); end; - procedure GenerateWSDL(AMdtdRep : PServiceRepository; ADoc : TXMLDocument); + procedure GenerateWSDL(AMdtdRep : PServiceRepository; ADoc : TXMLDocument);overload; + function GenerateWSDL(const ARepName, ARootAddress : string):string;overload; function GetWsdlTypeHandlerRegistry():IWsdlTypeHandlerRegistry; implementation -uses {$IFNDEF FPC}wst_delphi_rtti_utils{$ELSE}wst_fpc_xml{$ENDIF}; +uses +{$IFNDEF FPC} + wst_delphi_rtti_utils +{$ELSE} + wst_fpc_xml, XmlWrite +{$ENDIF}; const sWSDL_NS = 'http://schemas.xmlsoap.org/wsdl/'; @@ -569,6 +575,40 @@ begin end; +function GenerateWSDL(const ARepName, ARootAddress : string):string;overload; +var + strm : TMemoryStream; + rep : PServiceRepository; + doc :TXMLDocument; + i : SizeInt; + s : string; +begin + Result := ''; + rep := nil; + doc := Nil; + i := GetModuleMetadataMngr().IndexOfName(ARepName); + if ( i < 0 ) then + Exit; + strm := TMemoryStream.Create(); + try + s := GetModuleMetadataMngr().GetRepositoryName(i); + GetModuleMetadataMngr().LoadRepositoryName(s,ARootAddress,rep); + strm.Clear(); + doc := CreateDoc(); + GenerateWSDL(rep,doc); + WriteXMLFile(doc,strm); + i := strm.Size; + if ( i > 0 ) then begin + SetLength(Result,i); + Move(strm.memory^,Result[1],i); + end; + finally + ReleaseDomNode(doc); + strm.Free(); + GetModuleMetadataMngr().ClearRepository(rep); + end; +end; + function GetWsdlTypeHandlerRegistry():IWsdlTypeHandlerRegistry; begin Result := WsdlTypeHandlerRegistryInst; diff --git a/wst/trunk/samples/delphi/http_server/http_server.dpr b/wst/trunk/samples/delphi/http_server/http_server.dpr index cb3e4fd1d..fdcf04ffc 100644 --- a/wst/trunk/samples/delphi/http_server/http_server.dpr +++ b/wst/trunk/samples/delphi/http_server/http_server.dpr @@ -6,35 +6,44 @@ uses SysUtils, Classes, ActiveX, + delphi_init_com in '..\..\..\delphi_init_com.pas', + server_service_soap, + server_binary_formatter, + server_service_xmlrpc, indy_http_server, metadata_service, logger_extension, wst_delphi_rtti_utils in '..\..\..\wst_delphi_rtti_utils.pas', - server_listener in '..\..\..\server_listener.pas'; + server_listener in '..\..\..\server_listener.pas', + config_objects in '..\..\..\config_objects.pas', + user_service_intf in '..\..\user_service_intf.pas', + user_service_intf_binder in '..\..\user_service_intf_binder.pas', + user_service_intf_imp in '..\..\user_service_intf_imp.pas', + server_service_intf in '..\..\..\server_service_intf.pas'; var AppObject : TwstIndyHttpListener; begin -{$IFNDEF FPC} - CoInitialize(nil); + Server_service_RegisterBinaryFormat(); + Server_service_RegisterSoapFormat(); + Server_service_RegisterXmlRpcFormat(); + + RegisterUserServiceImplementationFactory(); + Server_service_RegisterUserServiceService(); + + //wst_CreateDefaultFile(wst_GetConfigFileName(),nil); + + AppObject := TwstIndyHttpListener.Create(); try -{$ENDIF} - AppObject := TwstIndyHttpListener.Create(); - try - WriteLn('"Web Service Toolkit" HTTP Server sample listening at:'); - WriteLn(''); - WriteLn('http://127.0.0.1:8000/'); - WriteLn(''); - WriteLn('Press enter to quit.'); - AppObject.Start(); - ReadLn; - finally - FreeAndNil(AppObject); - end; -{$IFNDEF FPC} + WriteLn('"Web Service Toolkit" HTTP Server sample listening at:'); + WriteLn(''); + WriteLn('http://127.0.0.1:8000/'); + WriteLn(''); + WriteLn('Press enter to quit.'); + AppObject.Start(); + ReadLn; finally - CoUninitialize(); + FreeAndNil(AppObject); end; -{$ENDIF} end. diff --git a/wst/trunk/samples/delphi/library_server/lib_server.cfg b/wst/trunk/samples/delphi/library_server/lib_server.cfg new file mode 100644 index 000000000..6a45963b9 --- /dev/null +++ b/wst/trunk/samples/delphi/library_server/lib_server.cfg @@ -0,0 +1,43 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-N"obj" +-LE"c:\program files\borland\delphi7\Projects\Bpl" +-LN"c:\program files\borland\delphi7\Projects\Bpl" +-U"..\..\;..\..\..\;..\..\..\wst_rtti_filter" +-O"..\..\;..\..\..\;..\..\..\wst_rtti_filter" +-I"..\..\;..\..\..\;..\..\..\wst_rtti_filter" +-R"..\..\;..\..\..\;..\..\..\wst_rtti_filter" +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/wst/trunk/samples/delphi/library_server/lib_server.dof b/wst/trunk/samples/delphi/library_server/lib_server.dof new file mode 100644 index 000000000..36530f0a9 --- /dev/null +++ b/wst/trunk/samples/delphi/library_server/lib_server.dof @@ -0,0 +1,161 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir=obj +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\;..\..\..\;..\..\..\wst_rtti_filter +Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;FIBDBMidas7;Jcl;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvDBD7R;JvDlgsD7R;JvBDED7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvTimeFrameworkD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;dxForumLibD7;cxLibraryVCLD7;cxPageControlVCLD7;dxBarD7;dxComnD7;dxBarDBNavD7;dxBarExtItemsD7;dxBarExtDBItemsD7;dxsbD7;dxmdsD7;dxdbtrD7;dxtrmdD7;dxorgcD7;dxdborD7;dxEdtrD7;EQTLD7;ECQDBCD7;EQDBTLD7;EQGridD7;dxGrEdD7;dxExELD7;dxELibD7;cxEditorsVCLD7;cxGridVCLD7;dxThemeD7;cxDataD7;cxGridUtilsVCLD7;dxPSCoreD7;dxPsPrVwAdvD7;dxPSLnksD7;dxPSTeeChartD7;dxPSDBTeeChartD7;dxPSdxDBTVLnkD7;dxPSdxOCLnkD7;dxPSdxDBOCLnkD7;dxPScxGridLnkD7;dxPSTLLnkD7;qrpt +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=C:\Program Files\Borland\Delphi7\Bin\ +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1036 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[Excluded Packages] +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBTLLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumDBTreeList by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBGrLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumGrid by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxInsLnkD7.bpl=ExpressPrinting System ReportLink for ExpressInspector by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxOILnkD7.bpl=ExpressPrinting System ReportLink for ExpressRTTIInspector by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxMVLnkD7.bpl=ExpressPrinting System ReportLink for ExpressMasterView by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxFCLnkD7.bpl=ExpressPrinting System ReportLinks for ExpressFlowChart by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPScxSSLnkD7.bpl=ExpressPrinting System ReportLink for ExpressSpreadSheet by Developer Express Inc. +[HistoryLists\hlConditionals] +Count=1 +Item0=INDY_9 +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=6 +Item0=..\..\;..\..\..\;..\..\..\wst_rtti_filter +Item1=..\..\;..\..\..\ +Item2=..\..\..\;..\..\;..\..\..\wst_rtti_filter +Item3=..\..\..\;..\..\ +Item4=..\..\..\ +Item5=..\ +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=obj diff --git a/wst/trunk/samples/delphi/library_server/lib_server.dpr b/wst/trunk/samples/delphi/library_server/lib_server.dpr new file mode 100644 index 000000000..27461e850 --- /dev/null +++ b/wst/trunk/samples/delphi/library_server/lib_server.dpr @@ -0,0 +1,36 @@ +library lib_server; + +uses + SysUtils, Classes, + base_service_intf, + server_service_intf, + server_service_soap, + server_binary_formatter, + server_service_xmlrpc, + metadata_repository, + metadata_wsdl, + metadata_service, + metadata_service_binder, + metadata_service_imp, + library_base_intf, + library_server_intf, + user_service_intf_binder, + user_service_intf_imp; + +{$R *.res} + +exports + wstHandleRequest name WST_LIB_HANDLER; + +begin + RegisterStdTypes(); + Server_service_RegisterBinaryFormat(); + Server_service_RegisterSoapFormat(); + Server_service_RegisterXmlRpcFormat(); + + RegisterUserServiceImplementationFactory(); + Server_service_RegisterUserServiceService(); + + RegisterWSTMetadataServiceImplementationFactory(); + Server_service_RegisterWSTMetadataServiceService(); +end. diff --git a/wst/trunk/samples/delphi/tcp_server/tcp_server.cfg b/wst/trunk/samples/delphi/tcp_server/tcp_server.cfg new file mode 100644 index 000000000..4335ccf1c --- /dev/null +++ b/wst/trunk/samples/delphi/tcp_server/tcp_server.cfg @@ -0,0 +1,43 @@ +-$A8 +-$B- +-$C+ +-$D+ +-$E- +-$F- +-$G+ +-$H+ +-$I+ +-$J- +-$K- +-$L+ +-$M- +-$N+ +-$O+ +-$P+ +-$Q- +-$R- +-$S- +-$T- +-$U- +-$V+ +-$W- +-$X+ +-$YD +-$Z1 +-cg +-AWinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +-H+ +-W+ +-M +-$M16384,1048576 +-K$00400000 +-N"obj" +-LE"c:\program files\borland\delphi7\Projects\Bpl" +-LN"c:\program files\borland\delphi7\Projects\Bpl" +-U"..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\wst_rtti_filter" +-O"..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\wst_rtti_filter" +-I"..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\wst_rtti_filter" +-R"..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\wst_rtti_filter" +-w-UNSAFE_TYPE +-w-UNSAFE_CODE +-w-UNSAFE_CAST diff --git a/wst/trunk/samples/delphi/tcp_server/tcp_server.dof b/wst/trunk/samples/delphi/tcp_server/tcp_server.dof new file mode 100644 index 000000000..0a8fa6d73 --- /dev/null +++ b/wst/trunk/samples/delphi/tcp_server/tcp_server.dof @@ -0,0 +1,160 @@ +[FileVersion] +Version=7.0 +[Compiler] +A=8 +B=0 +C=1 +D=1 +E=0 +F=0 +G=1 +H=1 +I=1 +J=0 +K=0 +L=1 +M=0 +N=1 +O=1 +P=1 +Q=0 +R=0 +S=0 +T=0 +U=0 +V=1 +W=0 +X=1 +Y=1 +Z=1 +ShowHints=1 +ShowWarnings=1 +UnitAliases=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +NamespacePrefix= +SymbolDeprecated=1 +SymbolLibrary=1 +SymbolPlatform=1 +UnitLibrary=1 +UnitPlatform=1 +UnitDeprecated=1 +HResultCompat=1 +HidingMember=1 +HiddenVirtual=1 +Garbage=1 +BoundsError=1 +ZeroNilCompat=1 +StringConstTruncated=1 +ForLoopVarVarPar=1 +TypedConstVarPar=1 +AsgToTypedConst=1 +CaseLabelRange=1 +ForVariable=1 +ConstructingAbstract=1 +ComparisonFalse=1 +ComparisonTrue=1 +ComparingSignedUnsigned=1 +CombiningSignedUnsigned=1 +UnsupportedConstruct=1 +FileOpen=1 +FileOpenUnitSrc=1 +BadGlobalSymbol=1 +DuplicateConstructorDestructor=1 +InvalidDirective=1 +PackageNoLink=1 +PackageThreadVar=1 +ImplicitImport=1 +HPPEMITIgnored=1 +NoRetVal=1 +UseBeforeDef=1 +ForLoopVarUndef=1 +UnitNameMismatch=1 +NoCFGFileFound=1 +MessageDirective=1 +ImplicitVariants=1 +UnicodeToLocale=1 +LocaleToUnicode=1 +ImagebaseMultiple=1 +SuspiciousTypecast=1 +PrivatePropAccessor=1 +UnsafeType=0 +UnsafeCode=0 +UnsafeCast=0 +[Linker] +MapFile=0 +OutputObjs=0 +ConsoleApp=1 +DebugInfo=0 +RemoteSymbols=0 +MinStackSize=16384 +MaxStackSize=1048576 +ImageBase=4194304 +ExeDescription= +[Directories] +OutputDir= +UnitOutputDir=obj +PackageDLLOutputDir= +PackageDCPOutputDir= +SearchPath=..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\wst_rtti_filter +Packages=vcl;rtl;vclx;indy;inet;xmlrtl;vclie;inetdbbde;inetdbxpress;dbrtl;dsnap;dsnapcon;vcldb;soaprtl;VclSmp;dbexpress;dbxcds;inetdb;bdertl;vcldbx;webdsnap;websnap;adortl;ibxpress;teeui;teedb;tee;dss;visualclx;visualdbclx;vclactnband;vclshlctrls;IntrawebDB_50_70;Intraweb_50_70;Rave50CLX;Rave50VCL;dclOfficeXP;FIBDBMidas7;Jcl;JclVcl;JvCoreD7R;JvSystemD7R;JvStdCtrlsD7R;JvAppFrmD7R;JvBandsD7R;JvDBD7R;JvDlgsD7R;JvBDED7R;JvCmpD7R;JvCryptD7R;JvCtrlsD7R;JvCustomD7R;JvDockingD7R;JvDotNetCtrlsD7R;JvEDID7R;JvGlobusD7R;JvHMID7R;JvInterpreterD7R;JvJansD7R;JvManagedThreadsD7R;JvMMD7R;JvNetD7R;JvPageCompsD7R;JvPluginD7R;JvPrintPreviewD7R;JvRuntimeDesignD7R;JvTimeFrameworkD7R;JvUIBD7R;JvValidatorsD7R;JvWizardD7R;JvXPCtrlsD7R;dxForumLibD7;cxLibraryVCLD7;cxPageControlVCLD7;dxBarD7;dxComnD7;dxBarDBNavD7;dxBarExtItemsD7;dxBarExtDBItemsD7;dxsbD7;dxmdsD7;dxdbtrD7;dxtrmdD7;dxorgcD7;dxdborD7;dxEdtrD7;EQTLD7;ECQDBCD7;EQDBTLD7;EQGridD7;dxGrEdD7;dxExELD7;dxELibD7;cxEditorsVCLD7;cxGridVCLD7;dxThemeD7;cxDataD7;cxGridUtilsVCLD7;dxPSCoreD7;dxPsPrVwAdvD7;dxPSLnksD7;dxPSTeeChartD7;dxPSDBTeeChartD7;dxPSdxDBTVLnkD7;dxPSdxOCLnkD7;dxPSdxDBOCLnkD7;dxPScxGridLnkD7;dxPSTLLnkD7;qrpt +Conditionals= +DebugSourceDirs= +UsePackages=0 +[Parameters] +RunParams= +HostApplication= +Launcher= +UseLauncher=0 +DebugCWD= +[Language] +ActiveLang= +ProjectLang= +RootDir=C:\Program Files\Borland\Delphi7\Bin\ +[Version Info] +IncludeVerInfo=0 +AutoIncBuild=0 +MajorVer=1 +MinorVer=0 +Release=0 +Build=0 +Debug=0 +PreRelease=0 +Special=0 +Private=0 +DLL=0 +Locale=1036 +CodePage=1252 +[Version Info Keys] +CompanyName= +FileDescription= +FileVersion=1.0.0.0 +InternalName= +LegalCopyright= +LegalTrademarks= +OriginalFilename= +ProductName= +ProductVersion=1.0.0.0 +Comments= +[Excluded Packages] +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBTLLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumDBTreeList by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxDBGrLnkD7.bpl=ExpressPrinting System ReportLink for ExpressQuantumGrid by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxInsLnkD7.bpl=ExpressPrinting System ReportLink for ExpressInspector by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxOILnkD7.bpl=ExpressPrinting System ReportLink for ExpressRTTIInspector by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxMVLnkD7.bpl=ExpressPrinting System ReportLink for ExpressMasterView by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPSdxFCLnkD7.bpl=ExpressPrinting System ReportLinks for ExpressFlowChart by Developer Express Inc. +C:\Program Files\Developer Express Inc\ExpressPrinting System\Delphi 7\Lib\dxPScxSSLnkD7.bpl=ExpressPrinting System ReportLink for ExpressSpreadSheet by Developer Express Inc. +[HistoryLists\hlUnitAliases] +Count=1 +Item0=WinTypes=Windows;WinProcs=Windows;DbiTypes=BDE;DbiProcs=BDE;DbiErrs=BDE; +[HistoryLists\hlSearchPath] +Count=8 +Item0=..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\wst_rtti_filter +Item1=..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\wst_rtti_filter +Item2=..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse +Item3=..\..\;..\..\..\ +Item4=$(DELPHI)\Lib\Debug;C:\PROGRA~1\Borland\Delphi7\MyTools\JVCL\3.20\jcl\lib\d7\debug;..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\..\ +Item5=..\..\;..\..\..\;C:\Program Files\Borland\Delphi7\plate_forme\synapse;..\..\..\..\ +Item6=..\..\ +Item7=..\ +[HistoryLists\hlUnitOutputDirectory] +Count=1 +Item0=obj diff --git a/wst/trunk/samples/delphi/tcp_server/tcp_server.dpr b/wst/trunk/samples/delphi/tcp_server/tcp_server.dpr new file mode 100644 index 000000000..052daadeb --- /dev/null +++ b/wst/trunk/samples/delphi/tcp_server/tcp_server.dpr @@ -0,0 +1,50 @@ +program tcp_server; + +{$APPTYPE CONSOLE} + +uses + Classes, + SysUtils, ActiveX, + base_service_intf, + server_service_soap, + base_binary_formatter, + server_binary_formatter, + metadata_service, + metadata_service_imp, + metadata_service_binder, + synapse_tcp_server, + user_service_intf, + user_service_intf_binder, + user_service_intf_imp, + imp_helper, + server_service_xmlrpc; + +{$INCLUDE wst.inc} + +var + listnerThread : TServerListnerThread; +begin + CoInitialize(nil); + try + SetLogger(TConsoleLogger.Create()); + + Server_service_RegisterBinaryFormat(); + Server_service_RegisterSoapFormat(); + Server_service_RegisterXmlRpcFormat(); + + RegisterWSTMetadataServiceImplementationFactory(); + //Server_service_RegisterWSTMetadataServiceService(); + RegisterWSTMetadataServiceImplementationFactory(); + + RegisterUserServiceImplementationFactory(); + Server_service_RegisterUserServiceService(); + + Logger().Log('WST sample TCP Server listning on "%s"',[sSERVER_PORT]); + Logger().Log('Hit to stop.'); + listnerThread := TServerListnerThread.Create(); + ReadLn; + finally + CoUninitialize(); + end; +end. + diff --git a/wst/trunk/samples/http_server/http_server.lpi b/wst/trunk/samples/http_server/http_server.lpi index 7f276693f..dd6e93ab1 100644 --- a/wst/trunk/samples/http_server/http_server.lpi +++ b/wst/trunk/samples/http_server/http_server.lpi @@ -12,7 +12,7 @@ - + @@ -34,15 +34,15 @@ - + - - + + - + @@ -50,24 +50,24 @@ - + - - - - + + + + - - - - + + + + @@ -75,44 +75,43 @@ - - - + - - - - + + + + - - - - + + + + + - + - - + + - - - + + + @@ -120,207 +119,187 @@ - - - + - - - - + + + + - + - - - + - - - - - + + + - - - + - + - + - + - + - - - - - + + + - - - + - - - - - + + + - + - + - + - - + + - + - + - - - + - + - + - - - + - - - + - + - + - - - + + + - + - - - - + + + + @@ -328,24 +307,20 @@ - - - + - - - + - + @@ -353,15 +328,15 @@ - + - - - - + + + + @@ -369,16 +344,14 @@ - - - + - + @@ -388,7 +361,7 @@ - + @@ -397,7 +370,7 @@ - + @@ -407,77 +380,60 @@ - + - - - - + + + + - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + @@ -489,7 +445,7 @@ - + diff --git a/wst/trunk/samples/http_server/http_server.pas b/wst/trunk/samples/http_server/http_server.pas index f7ce9ccbb..c62a44dcd 100644 --- a/wst/trunk/samples/http_server/http_server.pas +++ b/wst/trunk/samples/http_server/http_server.pas @@ -7,12 +7,23 @@ uses cthreads, {$ENDIF}{$ENDIF} Classes, SysUtils, - indy_http_server, metadata_service, logger_extension, server_listener; + indy_http_server, metadata_service, logger_extension, server_listener, + server_service_soap, server_binary_formatter, server_service_xmlrpc, config_objects, + user_service_intf, user_service_intf_binder, user_service_intf_imp; var AppObject : TwstListener; begin + Server_service_RegisterBinaryFormat(); + Server_service_RegisterSoapFormat(); + Server_service_RegisterXmlRpcFormat(); + + RegisterUserServiceImplementationFactory(); + Server_service_RegisterUserServiceService(); + + //wst_CreateDefaultFile(wst_GetConfigFileName(),nil); + AppObject := TwstIndyHttpListener.Create(); try WriteLn('"Web Service Toolkit" HTTP Server sample listening at:'); diff --git a/wst/trunk/samples/tcp_server/tcp_server.lpi b/wst/trunk/samples/tcp_server/tcp_server.lpi index db2700907..cfe3d227a 100644 --- a/wst/trunk/samples/tcp_server/tcp_server.lpi +++ b/wst/trunk/samples/tcp_server/tcp_server.lpi @@ -12,7 +12,7 @@ - + @@ -30,15 +30,15 @@ - + - + - + @@ -77,8 +77,8 @@ - - + + @@ -117,8 +117,8 @@ - - + + @@ -126,7 +126,7 @@ - + @@ -138,9 +138,7 @@ - - @@ -154,7 +152,7 @@ - + @@ -220,7 +218,7 @@ - + @@ -235,7 +233,7 @@ - + @@ -249,9 +247,11 @@ - - - + + + + + @@ -273,7 +273,7 @@ - + @@ -297,9 +297,9 @@ - - - + + + @@ -335,9 +335,7 @@ - - @@ -345,8 +343,8 @@ - - + + @@ -354,7 +352,7 @@ - + @@ -381,8 +379,8 @@ - - + + @@ -397,132 +395,29 @@ - - + + + + + + + - + - + - - + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/wst/trunk/samples/user_service_intf_binder.pas b/wst/trunk/samples/user_service_intf_binder.pas index 16bce93da..a8da14d43 100644 --- a/wst/trunk/samples/user_service_intf_binder.pas +++ b/wst/trunk/samples/user_service_intf_binder.pas @@ -2,7 +2,7 @@ This unit has been produced by ws_helper. Input unit name : "user_service_intf". This unit name : "user_service_intf_binder". - Date : "13/07/2007 21:34:10". + Date : "16/07/2007 19:01:46". } unit user_service_intf_binder; {$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} @@ -284,10 +284,10 @@ End; initialization - {$IF DECLARED(Register_user_service_intf_NameSpace)} - Register_user_service_intf_NameSpace(); - {$IFEND} - {$i user_service_intf.wst} + {$IF DECLARED(Register_user_service_intf_ServiceMetadata)} + Register_user_service_intf_ServiceMetadata(); + {$IFEND} + End. diff --git a/wst/trunk/samples/user_service_intf_imp.pas b/wst/trunk/samples/user_service_intf_imp.pas index 86e84dcca..0449f5629 100644 --- a/wst/trunk/samples/user_service_intf_imp.pas +++ b/wst/trunk/samples/user_service_intf_imp.pas @@ -15,10 +15,14 @@ Uses SysUtils, Classes, Type TUser = TUser_Type; - + { TUserService_ServiceImp } - TUserService_ServiceImp=class(TBaseServiceImplementation,UserService) + TUserService_ServiceImp=class(TActivableServiceImplementation,UserService) + protected + procedure Activate();override; + procedure Deactivate();override; + function CanBePooled() : Boolean;override; Protected function GetList():TUserArray; procedure Add( @@ -33,6 +37,9 @@ Type function Delete( Const AName : string ):boolean; + public + constructor Create();override; + destructor Destroy();override; End; const sDATA_FILE_NAME = 'sample.data'; @@ -41,7 +48,7 @@ Type procedure SaveDataToFile(const AFileName : string); Implementation -uses Contnrs, std_cursors, rtti_filters, imp_helper; +uses Contnrs, std_cursors, rtti_filters, imp_helper, config_objects; var FUserList : TObjectList = nil; @@ -67,9 +74,6 @@ end; { TUserService_ServiceImp implementation } function TUserService_ServiceImp.GetList():TUserArray; -var - locCrs : IObjectCursor; - srcUsr, locUsr : TUser; Begin Result := TUserArray.Create(); try @@ -135,7 +139,7 @@ End; procedure RegisterUserServiceImplementationFactory(); Begin - GetServiceImplementationRegistry().Register('UserService',TImplementationFactory.Create(TUserService_ServiceImp) as IServiceImplementationFactory); + GetServiceImplementationRegistry().Register('UserService',TImplementationFactory.Create(TUserService_ServiceImp,wst_GetServiceConfigText('UserService')) as IServiceImplementationFactory); End; procedure FillSampleData(); @@ -186,6 +190,35 @@ begin end; end; +constructor TUserService_ServiceImp.Create; +begin + inherited; + WriteLn('TUserService_ServiceImp.Create();'); +end; + +procedure TUserService_ServiceImp.Activate; +begin + inherited; + WriteLn(Format('TUserService_ServiceImp.Activate(), Self = %p',[Pointer(Self)])); +end; + +function TUserService_ServiceImp.CanBePooled: Boolean; +begin + Result := True; +end; + +procedure TUserService_ServiceImp.Deactivate; +begin + WriteLn(Format('TUserService_ServiceImp.Deactivate(), Self = %p',[Pointer(Self)])); + inherited; +end; + +destructor TUserService_ServiceImp.Destroy; +begin + WriteLn('TUserService_ServiceImp.Destroy();'); + inherited; +end; + initialization FUserList := TObjectList.Create(True); FUserCursor := TObjectListCursor.Create(FUserList); diff --git a/wst/trunk/server_listener.pas b/wst/trunk/server_listener.pas index 100b364ab..4c35de59b 100644 --- a/wst/trunk/server_listener.pas +++ b/wst/trunk/server_listener.pas @@ -21,6 +21,11 @@ uses {$INCLUDE wst.inc} {$INCLUDE wst_delphi.inc} +const + sSEPARATOR = '/'; + sSERVICES_PREFIXE = 'services'; + sWSDL = 'WSDL'; + type TListnerNotifyMessage = procedure(Sender : TObject; const AMsg : string) of object; @@ -36,8 +41,45 @@ type property OnNotifyMessage : TListnerNotifyMessage read FOnNotifyMessage write FOnNotifyMessage; end; - + function GenerateWSDLHtmlTable(): string; + implementation +uses base_service_intf, metadata_repository, + metadata_service, metadata_service_binder, metadata_service_imp ; + + +function GenerateWSDLHtmlTable(): string; +var + r : IModuleMetadataMngr; + i : Integer; +begin + r := GetModuleMetadataMngr(); + Result := '' + + ''+ + ''+ + 'The Web Services Toolkit generated Metadata table'+ + ''+ + '' + + '

The following repositories has available. Click on the link to view the corresponding WSDL.

'+ + ''; + + for i := 0 to Pred(r.GetCount()) do begin + Result := Result + + '' + + '' + + ''; + end; + Result := Result + + + '
' + + Format('',[sSEPARATOR+sSERVICES_PREFIXE+sSEPARATOR+sWSDL+sSEPARATOR+r.GetRepositoryName(i)])+ + r.GetRepositoryName(i) + + ''+ + '
'+ + ''+ + ''+ + ''; +end; { TwstListener } @@ -52,4 +94,9 @@ begin FOnNotifyMessage(Self,AMsg); end; +initialization + RegisterStdTypes(); + RegisterWSTMetadataServiceImplementationFactory(); + Server_service_RegisterWSTMetadataServiceService(); + end. diff --git a/wst/trunk/server_service_intf.pas b/wst/trunk/server_service_intf.pas index a561ee767..079c95dd3 100644 --- a/wst/trunk/server_service_intf.pas +++ b/wst/trunk/server_service_intf.pas @@ -82,14 +82,16 @@ Type ); end; - IServerServiceRegistry = Interface + IServerServiceRegistry = interface ['{83E7BBEB-A33D-4A3E-896D-D351C2819009}'] function Find(const AServiceName : string):IServerService; procedure Register( const AServiceName : string; AFactory : IItemFactory ); - End; + function GetCount() : Integer; + function GetName(const AIndex : Integer) : string; + end; IServiceImplementationFactory = interface(IItemFactoryEx) ['{23A745BC-5F63-404D-BF53-55A6E64DE5BE}'] @@ -277,7 +279,9 @@ type TServerServiceRegistry = class(TBaseFactoryRegistry,IServerServiceRegistry) protected function Find(const AServiceName : string):IServerService; - End; + function GetCount() : Integer; + function GetName(const AIndex : Integer) : string; + end; { TBaseFormatterRegistryItem } @@ -390,6 +394,16 @@ Type property VerbHandler : TServiceVerbMethod Read FVerbHandler; End; +function TServerServiceRegistry.GetCount: Integer; +begin + Result := Count; +end; + +function TServerServiceRegistry.GetName(const AIndex: Integer): string; +begin + Result := Item[AIndex].Name; +end; + { TServiceVerbItem } constructor TServiceVerbItem.Create( diff --git a/wst/trunk/tests/test_suite/testmetadata_unit.pas b/wst/trunk/tests/test_suite/testmetadata_unit.pas index 73cce75b2..4b4a5241b 100644 --- a/wst/trunk/tests/test_suite/testmetadata_unit.pas +++ b/wst/trunk/tests/test_suite/testmetadata_unit.pas @@ -177,7 +177,7 @@ begin AssertNotNull('params pointer',po^.Params); pop := po^.Params; AssertEquals('param name','result',pop^.Name); - AssertEquals('param type name','int',pop^.TypeName); + AssertEquals('param type name','integer',pop^.TypeName); AssertEquals('param modifier',ord(argOut),ord(pop^.Modifier)); rp^.NameSpace := 'http://test_name_space/'; diff --git a/wst/trunk/tests/test_suite/wst_test_suite.lpi b/wst/trunk/tests/test_suite/wst_test_suite.lpi index 0acc9f9da..2f40d1349 100644 --- a/wst/trunk/tests/test_suite/wst_test_suite.lpi +++ b/wst/trunk/tests/test_suite/wst_test_suite.lpi @@ -7,7 +7,7 @@ - + @@ -141,16 +141,18 @@ - - + + + + - + @@ -285,7 +287,7 @@ - + @@ -328,7 +330,7 @@ - + @@ -454,7 +456,7 @@ - + diff --git a/wst/trunk/type_lib_edtr/typ_lib_edtr.lpi b/wst/trunk/type_lib_edtr/typ_lib_edtr.lpi index cf9d07f7a..4a9e6aec9 100644 --- a/wst/trunk/type_lib_edtr/typ_lib_edtr.lpi +++ b/wst/trunk/type_lib_edtr/typ_lib_edtr.lpi @@ -7,7 +7,7 @@ - + @@ -36,10 +36,10 @@ - + - + @@ -49,10 +49,10 @@ - + - + @@ -60,7 +60,7 @@ - + @@ -68,7 +68,7 @@ - + @@ -81,7 +81,7 @@ - + @@ -96,7 +96,7 @@ - + @@ -108,7 +108,7 @@ - + @@ -118,7 +118,7 @@ - + @@ -127,7 +127,7 @@ - + @@ -136,7 +136,7 @@ - + @@ -149,7 +149,7 @@ - + @@ -161,7 +161,7 @@ - + @@ -169,7 +169,7 @@ - + @@ -177,83 +177,83 @@ - + - + - + - + - + - + - + - + - + - + - + - + - + @@ -263,13 +263,13 @@ - + - + @@ -280,13 +280,13 @@ - + - + @@ -295,7 +295,7 @@ - + @@ -304,14 +304,14 @@ - + - + @@ -319,40 +319,41 @@ - + - + - + - + - + + - - + + - + @@ -360,49 +361,49 @@ - + - + - + - + - + - + - + @@ -411,28 +412,28 @@ - + - + - + - + @@ -442,14 +443,14 @@ - + - + @@ -457,14 +458,14 @@ - + - + @@ -474,20 +475,20 @@ - + - + - + @@ -498,14 +499,14 @@ - + - + @@ -515,38 +516,38 @@ - + - + - + - + - + - + @@ -556,21 +557,21 @@ - + - + - + @@ -578,20 +579,20 @@ - + - + - + @@ -602,15 +603,43 @@ - +
- + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/wst/trunk/type_lib_edtr/typ_lib_edtr.lpr b/wst/trunk/type_lib_edtr/typ_lib_edtr.lpr index 17045b4d0..1feb1d971 100644 --- a/wst/trunk/type_lib_edtr/typ_lib_edtr.lpr +++ b/wst/trunk/type_lib_edtr/typ_lib_edtr.lpr @@ -11,7 +11,7 @@ uses , uwsttypelibraryedit, view_helper, source_utils, uabout, ufEnumedit, edit_helper, ufclassedit, wsdl_generator, ufpropedit, uinterfaceedit, udm, pascal_parser_intf, PasTree, PParser, uprocedit, common_gui_utils, uargedit, - umoduleedit, ubindingedit, ufrmsaveoption, ufarrayedit; + umoduleedit, ubindingedit, ufrmsaveoption, ufarrayedit, generator; begin Application.Initialize; diff --git a/wst/trunk/ws_helper/generator.pas b/wst/trunk/ws_helper/generator.pas index 506b67a4d..924ac8bf4 100644 --- a/wst/trunk/ws_helper/generator.pas +++ b/wst/trunk/ws_helper/generator.pas @@ -688,13 +688,13 @@ begin NewLine(); WriteLn('initialization'); NewLine(); - s := Format('Register_%s_NameSpace',[SymbolTable.CurrentModule.Name]); + WriteLn(' {$i %s.%s}',[SymbolTable.CurrentModule.Name,sWST_EXTENSION]); + NewLine(); + s := Format('Register_%s_ServiceMetadata',[SymbolTable.CurrentModule.Name]); WriteLn(' {$IF DECLARED(%s)}',[s]); WriteLn(' %s();',[s]); WriteLn(' {$IFEND}'); NewLine(); - WriteLn(' {$i %s.%s}',[SymbolTable.CurrentModule.Name,sWST_EXTENSION]); - NewLine(); WriteLn('End.'); end; @@ -1142,6 +1142,7 @@ begin SetCurrentStream(FImpStream); WriteLn(''); WriteLn('Implementation'); + WriteLn('uses config_objects;'); end; procedure TImplementationGenerator.GenerateUnitImplementationFooter(); @@ -1323,7 +1324,7 @@ var WriteLn('procedure Register%sImplementationFactory();',[strBuff]); WriteLn('Begin'); IncIndent(); - WriteLn('GetServiceImplementationRegistry().Register(%s,TImplementationFactory.Create(%s) as IServiceImplementationFactory);',[QuotedStr(AIntf.Name),strClassName]); + WriteLn('GetServiceImplementationRegistry().Register(%s,TImplementationFactory.Create(%s,wst_GetServiceConfigText(%s)) as IServiceImplementationFactory);',[QuotedStr(AIntf.Name),strClassName,QuotedStr(AIntf.Name)]); DecIndent(); WriteLn('End;'); EndAutoIndent(); diff --git a/wst/trunk/wst_delphi.inc b/wst/trunk/wst_delphi.inc index 8707b315d..bcded8209 100644 --- a/wst/trunk/wst_delphi.inc +++ b/wst/trunk/wst_delphi.inc @@ -2,7 +2,7 @@ type QWord = type Int64; DWORD = LongWord; - PtrInt = Cardinal; + PtrInt = Integer; PByteArray = ^ByteArray; ByteArray = array[0..$effffff] of Byte; PtrUInt = Cardinal; diff --git a/wst/trunk/wst_delphi_xml.pas b/wst/trunk/wst_delphi_xml.pas index e41b84da0..ba79bd523 100644 --- a/wst/trunk/wst_delphi_xml.pas +++ b/wst/trunk/wst_delphi_xml.pas @@ -97,7 +97,6 @@ end; function NodeToBuffer(ANode : TDOMNode):string ; var - locStream : TStringStream; locNodeEx : IDOMNodeEx; begin if Supports(ANode,IDOMNodeEx,locNodeEx) then begin