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.
'+
- ''+
- ''+
- ''+
- '';
-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.
'+
+ ''+
+ ''+
+ ''+
+ '';
+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