soapAction parsing for operation, soap:address ( location ) parsing

TServiceOperation now has Properties ( see IModuleMetadataMngr.SetServiceCustomData ),
Code has been refactored to use ParseFilter() instead using TRttiFilterCreator

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@136 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2007-03-25 23:47:16 +00:00
parent 0071bd8371
commit 49b0c3d159
13 changed files with 961 additions and 721 deletions

View File

@ -267,6 +267,7 @@ type
);
procedure BeginArray(
Const AName : string;
Const ATypeInfo : PTypeInfo;
Const AItemTypeInfo : PTypeInfo;
Const ABounds : Array Of Integer
);
@ -999,7 +1000,12 @@ begin
PushStack(FRootData,stObject);
end;
procedure TBaseBinaryFormatter.BeginArray(const AName: string;const AItemTypeInfo: PTypeInfo; const ABounds: array of Integer);
procedure TBaseBinaryFormatter.BeginArray(
Const AName : string;
Const ATypeInfo : PTypeInfo;
Const AItemTypeInfo : PTypeInfo;
Const ABounds : Array Of Integer
);
Var
i, j, k : Integer;
begin

View File

@ -24,8 +24,11 @@ const
stObject = stBase + 1;
stArray = stBase + 2;
Type
type
{ standart data types defines }
anyURI = type string;
token = type string;
float = Single;
TScopeType = Integer;
THeaderDirection = ( hdOut, hdIn );
@ -118,6 +121,7 @@ type
);
procedure BeginArray(
Const AName : string;
Const ATypeInfo : PTypeInfo;
Const AItemTypeInfo : PTypeInfo;
Const ABounds : Array Of Integer
);
@ -265,6 +269,12 @@ type
//class function FormatDate(const ADate : TDateTime):string;override;
//class function ParseDate(const ABuffer : string):TDateTime;override;
end;
TTimeRemotable = class(TBaseDateRemotable)
protected
//class function FormatDate(const ADate : TDateTime):string;override;
//class function ParseDate(const ABuffer : string):TDateTime;override;
end;
TAbstractComplexRemotableClass = class of TAbstractComplexRemotable;
@ -498,6 +508,7 @@ type
TBaseArrayRemotable = class(TAbstractComplexRemotable)
protected
class function GetItemName():string;virtual;
procedure CheckIndex(const AIndex : Integer);
function GetLength():Integer;virtual;abstract;
public
@ -1118,6 +1129,7 @@ begin
r.Register(sXSD_NS,TypeInfo(TDateRemotable),'dateTime').AddPascalSynonym('TDateRemotable');
r.Register(sXSD_NS,TypeInfo(TDurationRemotable),'duration').AddPascalSynonym('TDurationRemotable');
r.Register(sXSD_NS,TypeInfo(TTimeRemotable),'time').AddPascalSynonym('TTimeRemotable');
ri := r.Register(sWST_BASE_NS,TypeInfo(TBaseArrayRemotable),'TBaseArrayRemotable');
ri.Options := ri.Options + [trioNonVisibleToMetadataService];
@ -1706,6 +1718,7 @@ Var
i,j : Integer;
nativObj : TBaseObjectArrayRemotable;
itm : TObject;
itmName : string;
begin
If Assigned(AObject) Then Begin
Assert(AObject.InheritsFrom(TBaseObjectArrayRemotable));
@ -1714,11 +1727,12 @@ begin
End Else
j := 0;
itmTypInfo := PTypeInfo(GetItemClass().ClassInfo);
AStore.BeginArray(AName,itmTypInfo,[0,Pred(j)]);
AStore.BeginArray(AName,PTypeInfo(Self.ClassInfo),itmTypInfo,[0,Pred(j)]);
Try
itmName := GetItemName();
For i := 0 To Pred(j) Do Begin
itm := nativObj.Item[i];
AStore.Put(sARRAY_ITEM,itmTypInfo,itm);
AStore.Put(itmName,itmTypInfo,itm);
End;
Finally
AStore.EndScope();
@ -2218,6 +2232,7 @@ class procedure TBaseSimpleTypeArrayRemotable.Save(
var
i,j : Integer;
nativObj : TBaseSimpleTypeArrayRemotable;
itmName : string;
begin
if Assigned(AObject) then begin
Assert(AObject.InheritsFrom(TBaseSimpleTypeArrayRemotable));
@ -2226,10 +2241,11 @@ begin
end else begin
j := 0;
end;
AStore.BeginArray(AName,GetItemTypeInfo(),[0,Pred(j)]);
AStore.BeginArray(AName,PTypeInfo(Self.ClassInfo),GetItemTypeInfo(),[0,Pred(j)]);
try
itmName := GetItemName();
for i := 0 to Pred(j) do begin
nativObj.SaveItem(AStore,sARRAY_ITEM,i);
nativObj.SaveItem(AStore,itmName,i);
end;
finally
AStore.EndScope();
@ -2288,7 +2304,7 @@ procedure TArrayOfStringRemotable.SaveItem(
const AIndex : Integer
);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(ansistring),FData[AIndex]);
AStore.Put(AName,TypeInfo(ansistring),FData[AIndex]);
end;
procedure TArrayOfStringRemotable.LoadItem(
@ -2298,7 +2314,7 @@ procedure TArrayOfStringRemotable.LoadItem(
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(ansistring),sName,FData[AIndex]);
end;
@ -2320,6 +2336,17 @@ end;
{ TBaseArrayRemotable }
class function TBaseArrayRemotable.GetItemName(): string;
var
tri : TTypeRegistryItem;
begin
tri := GetTypeRegistry().Find(PTypeInfo(Self.ClassInfo),False);
if Assigned(tri) then
Result := Trim(tri.GetExternalPropertyName(sARRAY_ITEM));
if ( System.Length(Result) = 0 ) then
Result := sARRAY_ITEM;
end;
procedure TBaseArrayRemotable.CheckIndex(const AIndex : Integer);
begin
if ( AIndex < 0 ) or ( AIndex >= Length ) then
@ -2354,14 +2381,14 @@ end;
procedure TArrayOfBooleanRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Boolean),FData[AIndex]);
AStore.Put(AName,TypeInfo(Boolean),FData[AIndex]);
end;
procedure TArrayOfBooleanRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Boolean),sName,FData[AIndex]);
end;
@ -2403,14 +2430,14 @@ end;
procedure TArrayOfInt8URemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Byte),FData[AIndex]);
AStore.Put(AName,TypeInfo(Byte),FData[AIndex]);
end;
procedure TArrayOfInt8URemotable.LoadItem(AStore: IFormatterBase; const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Byte),sName,FData[AIndex]);
end;
@ -2452,14 +2479,14 @@ end;
procedure TArrayOfInt8SRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(ShortInt),FData[AIndex]);
AStore.Put(AName,TypeInfo(ShortInt),FData[AIndex]);
end;
procedure TArrayOfInt8SRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(ShortInt),sName,FData[AIndex]);
end;
@ -2501,14 +2528,14 @@ end;
procedure TArrayOfInt16SRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(SmallInt),FData[AIndex]);
AStore.Put(AName,TypeInfo(SmallInt),FData[AIndex]);
end;
procedure TArrayOfInt16SRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(SmallInt),sName,FData[AIndex]);
end;
@ -2550,14 +2577,14 @@ end;
procedure TArrayOfInt16URemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Word),FData[AIndex]);
AStore.Put(AName,TypeInfo(Word),FData[AIndex]);
end;
procedure TArrayOfInt16URemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Word),sName,FData[AIndex]);
end;
@ -2599,14 +2626,14 @@ end;
procedure TArrayOfInt32URemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(LongWord),FData[AIndex]);
AStore.Put(AName,TypeInfo(LongWord),FData[AIndex]);
end;
procedure TArrayOfInt32URemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(LongWord),sName,FData[AIndex]);
end;
@ -2648,14 +2675,14 @@ end;
procedure TArrayOfInt32SRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(LongInt),FData[AIndex]);
AStore.Put(AName,TypeInfo(LongInt),FData[AIndex]);
end;
procedure TArrayOfInt32SRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(LongInt),sName,FData[AIndex]);
end;
@ -2697,14 +2724,14 @@ end;
procedure TArrayOfInt64SRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Int64),FData[AIndex]);
AStore.Put(AName,TypeInfo(Int64),FData[AIndex]);
end;
procedure TArrayOfInt64SRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Int64),sName,FData[AIndex]);
end;
@ -2746,14 +2773,14 @@ end;
procedure TArrayOfInt64URemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(QWord),FData[AIndex]);
AStore.Put(AName,TypeInfo(QWord),FData[AIndex]);
end;
procedure TArrayOfInt64URemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(QWord),sName,FData[AIndex]);
end;
@ -2795,14 +2822,14 @@ end;
procedure TArrayOfFloatSingleRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Single),FData[AIndex]);
AStore.Put(AName,TypeInfo(Single),FData[AIndex]);
end;
procedure TArrayOfFloatSingleRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Single),sName,FData[AIndex]);
end;
@ -2844,14 +2871,14 @@ end;
procedure TArrayOfFloatDoubleRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Double),FData[AIndex]);
AStore.Put(AName,TypeInfo(Double),FData[AIndex]);
end;
procedure TArrayOfFloatDoubleRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Double),sName,FData[AIndex]);
end;
@ -2893,14 +2920,14 @@ end;
procedure TArrayOfFloatExtendedRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Extended),FData[AIndex]);
AStore.Put(AName,TypeInfo(Extended),FData[AIndex]);
end;
procedure TArrayOfFloatExtendedRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Extended),sName,FData[AIndex]);
end;
@ -2942,14 +2969,14 @@ end;
procedure TArrayOfFloatCurrencyRemotable.SaveItem(AStore: IFormatterBase;
const AName: String; const AIndex: Integer);
begin
AStore.Put(sARRAY_ITEM,TypeInfo(Currency),FData[AIndex]);
AStore.Put(AName,TypeInfo(Currency),FData[AIndex]);
end;
procedure TArrayOfFloatCurrencyRemotable.LoadItem(AStore: IFormatterBase;const AIndex: Integer);
var
sName : string;
begin
sName := sARRAY_ITEM;
sName := GetItemName();
AStore.Get(TypeInfo(Currency),sName,FData[AIndex]);
end;

View File

@ -235,6 +235,7 @@ Type
);
procedure BeginArray(
Const AName : string;
Const ATypeInfo : PTypeInfo;
Const AItemTypeInfo : PTypeInfo;
Const ABounds : Array Of Integer
);
@ -903,15 +904,17 @@ begin
end;
procedure TSOAPBaseFormatter.BeginArray(
const AName : string;
const AItemTypeInfo : PTypeInfo;
const ABounds : array of Integer
Const AName : string;
Const ATypeInfo : PTypeInfo;
Const AItemTypeInfo : PTypeInfo;
Const ABounds : Array Of Integer
);
Var
typData : TTypeRegistryItem;
nmspc,nmspcSH : string;
i,j, k : Integer;
strNodeName : string;
xsiNmspcSH : string;
begin
If ( Length(ABounds) < 2 ) Then
Error('Invalid array bounds.');
@ -921,18 +924,20 @@ begin
If ( k < 0 ) Then
Error('Invalid array bounds.');
k := j - i + 1;
typData := GetTypeRegistry().Find(AItemTypeInfo,False);
typData := GetTypeRegistry().Find(ATypeInfo,False);
If Not Assigned(typData) Then
Error('Array item''type not registered.');
Error('Array type not registered.');
nmspc := typData.NameSpace;
If IsStrEmpty(nmspc) Then
nmspcSH := 'tns'
Else Begin
nmspcSH := FindAttributeByValueInScope(nmspc);
If IsStrEmpty(nmspcSH) Then Begin
if IsStrEmpty(nmspcSH) then begin
nmspcSH := 'ns' + IntToStr(NextNameSpaceCounter());
AddScopeAttribute('xmlns:'+nmspcSH, nmspc);
End;
end else begin
nmspcSH := Copy(nmspcSH,Length('xmlns:')+1,MaxInt);
end;
End;
if ( Style = Document ) then begin
@ -946,10 +951,14 @@ begin
if ( EncodingStyle = Encoded ) then begin
//AddScopeAttribute(sXSI_TYPE,nmspc);
//SOAP-ENC:arrayType="xsd:int[2]"
AddScopeAttribute(
{AddScopeAttribute(
Format('%s:%s',[sSOAP_ENC_ABR,sARRAY_TYPE]) ,
Format('%s:%s[%d]',[nmspcSH,typData.DeclaredName,k])
);
);}
xsiNmspcSH := GetNameSpaceShortName(sXSI_NS,True);
if not IsStrEmpty(xsiNmspcSH) then
xsiNmspcSH := xsiNmspcSH + ':';
AddScopeAttribute(xsiNmspcSH + sTYPE,Format('%s:%s',[nmspcSH,typData.DeclaredName]));
end;
StackTop().SetNameSpace(nmspc);
end;

View File

@ -59,6 +59,7 @@ type
Name : ShortString;
OperationsCount : Byte;
Operations : PServiceOperation;
Properties : PPropertyData;
end;
PServiceRepository = ^TServiceRepository;
@ -81,6 +82,12 @@ type
out ARepository : PServiceRepository
):Integer;
procedure ClearRepository(var ARepository : PServiceRepository);
procedure SetServiceCustomData(
const ARepName : shortstring;
const AServiceName : shortstring;
const ADataName,
AData : string
);
procedure SetOperationCustomData(
const ARepName : shortstring;
const AServiceName : shortstring;
@ -211,6 +218,8 @@ begin
end;
Freemem(AService^.Operations, k * SizeOf(PServiceOperation^) );
AService^.Operations := nil;
ClearProperties(AService^.Properties);
AService^.Properties := nil;
end;
if AFreeService then
Freemem(AService,SizeOf(PService^));
@ -276,6 +285,7 @@ var
po : PServiceOperation;
begin
AService^.Name := rdr.ReadStr();
AService^.Properties := nil;
k := rdr.ReadInt8U();
if ( k > 0 ) then begin
AService^.Operations := GetMem( k * SizeOf(PServiceOperation^) );
@ -354,6 +364,7 @@ var
po : PServiceOperation;
begin
ADestService^.Name := ASrcService^.Name;
ADestService^.Properties := CloneProperties(ASrcService^.Properties);
k := ASrcService^.OperationsCount;
if ( k > 0 ) then begin
ADestService^.Operations := GetMem( k * SizeOf(PServiceOperation^) );
@ -435,6 +446,12 @@ type
out ARepository : PServiceRepository
):Integer;
procedure ClearRepository(var ARepository : PServiceRepository);
procedure SetServiceCustomData(
const ARepName : shortstring;
const AServiceName : shortstring;
const ADataName,
AData : string
);
procedure SetOperationCustomData(
const ARepName : shortstring;
const AServiceName : shortstring;
@ -613,6 +630,27 @@ begin
Result := nil;
end;
procedure TModuleMetadataMngr.SetServiceCustomData(
const ARepName : shortstring;
const AServiceName : shortstring;
const ADataName,
AData : string
);
var
i : Integer;
rp : PServiceRepository;
sp : PService;
begin
i := FindInnerListIndex(ARepName);
if ( i < 0 ) then
i := InternalLoadRepository(ARepName);
rp := FRepositories[i];
sp := FindService(rp,AServiceName);
if not Assigned(sp) then
raise EMetadataException.CreateFmt('Service non found : "%s"',[AServiceName]);
Add(sp^.Properties,ADataName,AData);
end;
function FindOperation(
const AServ : PService;
const AOperationName : shortstring

View File

@ -7,7 +7,7 @@
<MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="4"/>
<ActiveEditorIndexAtStart Value="0"/>
</General>
<PublishOptions>
<Version Value="2"/>
@ -26,14 +26,14 @@
<PackageName Value="LCL"/>
</Item1>
</RequiredPackages>
<Units Count="30">
<Units Count="36">
<Unit0>
<Filename Value="test_ebay_gui.lpr"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_ebay_gui"/>
<CursorPos X="1" Y="17"/>
<TopLine Value="1"/>
<UsageCount Value="101"/>
<UsageCount Value="121"/>
</Unit0>
<Unit1>
<Filename Value="umain.pas"/>
@ -41,10 +41,10 @@
<IsPartOfProject Value="True"/>
<ResourceFilename Value="umain.lrs"/>
<UnitName Value="umain"/>
<CursorPos X="44" Y="9"/>
<CursorPos X="1" Y="10"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="101"/>
<UsageCount Value="121"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
@ -53,47 +53,47 @@
<UnitName Value="synapse_http_protocol"/>
<CursorPos X="42" Y="22"/>
<TopLine Value="8"/>
<EditorIndex Value="1"/>
<UsageCount Value="101"/>
<Loaded Value="True"/>
<UsageCount Value="121"/>
</Unit2>
<Unit3>
<Filename Value="..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="50"/>
<CursorPos X="3" Y="2307"/>
<TopLine Value="2302"/>
<EditorIndex Value="10"/>
<UsageCount Value="61"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="23" Y="333"/>
<TopLine Value="320"/>
<UsageCount Value="27"/>
<CursorPos X="15" Y="158"/>
<TopLine Value="136"/>
<EditorIndex Value="1"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\soap_formatter.pas"/>
<UnitName Value="soap_formatter"/>
<CursorPos X="60" Y="159"/>
<TopLine Value="149"/>
<UsageCount Value="20"/>
<UsageCount Value="18"/>
</Unit5>
<Unit6>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="13"/>
<UsageCount Value="11"/>
</Unit6>
<Unit7>
<Filename Value="..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="28" Y="377"/>
<TopLine Value="371"/>
<EditorIndex Value="2"/>
<UsageCount Value="43"/>
<EditorIndex Value="6"/>
<UsageCount Value="54"/>
<Bookmarks Count="2">
<Item0 X="14" Y="670" ID="1"/>
<Item1 X="1" Y="437" ID="2"/>
@ -105,32 +105,36 @@
<UnitName Value="httpsend"/>
<CursorPos X="40" Y="123"/>
<TopLine Value="122"/>
<UsageCount Value="6"/>
<UsageCount Value="4"/>
</Unit8>
<Unit9>
<Filename Value="ebay.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ebay"/>
<CursorPos X="42" Y="535"/>
<TopLine Value="139"/>
<UsageCount Value="85"/>
<CursorPos X="3" Y="237"/>
<TopLine Value="223"/>
<EditorIndex Value="7"/>
<UsageCount Value="105"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\metadata_service.pas"/>
<UnitName Value="metadata_service"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="43"/>
<UsageCount Value="4"/>
<UsageCount Value="2"/>
</Unit10>
<Unit11>
<Filename Value="..\..\metadata_repository.pas"/>
<UnitName Value="metadata_repository"/>
<CursorPos X="46" Y="84"/>
<TopLine Value="84"/>
<UsageCount Value="13"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="8"/>
<UsageCount Value="17"/>
<Bookmarks Count="1">
<Item0 X="1" Y="91" ID="3"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit11>
<Unit12>
<Filename Value="ebay_proxy.pas"/>
@ -138,250 +142,264 @@
<UnitName Value="ebay_proxy"/>
<CursorPos X="19" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="85"/>
<EditorIndex Value="9"/>
<UsageCount Value="105"/>
<Loaded Value="True"/>
</Unit12>
<Unit13>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heaph.inc"/>
<CursorPos X="10" Y="94"/>
<TopLine Value="82"/>
<UsageCount Value="4"/>
<UsageCount Value="2"/>
</Unit13>
<Unit14>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\inc\heap.inc"/>
<CursorPos X="3" Y="342"/>
<TopLine Value="346"/>
<UsageCount Value="4"/>
<UsageCount Value="2"/>
</Unit14>
<Unit15>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="94"/>
<UsageCount Value="5"/>
<UsageCount Value="3"/>
</Unit15>
<Unit16>
<Filename Value="ebay.lrs"/>
<CursorPos X="20" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="5"/>
<UsageCount Value="3"/>
</Unit16>
<Unit17>
<Filename Value="D:\lazarusClean\lcl\lresources.pp"/>
<UnitName Value="LResources"/>
<CursorPos X="3" Y="930"/>
<TopLine Value="907"/>
<UsageCount Value="5"/>
<UsageCount Value="3"/>
</Unit17>
<Unit18>
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpash.inc"/>
<CursorPos X="20" Y="169"/>
<TopLine Value="157"/>
<UsageCount Value="6"/>
<UsageCount Value="4"/>
</Unit18>
<Unit19>
<Filename Value="D:\Lazarus\fpcsrc\rtl\inc\objpas.inc"/>
<CursorPos X="28" Y="446"/>
<TopLine Value="428"/>
<UsageCount Value="6"/>
<UsageCount Value="4"/>
</Unit19>
<Unit20>
<Filename Value="D:\Lazarus\fpcsrc\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="23" Y="520"/>
<TopLine Value="517"/>
<UsageCount Value="6"/>
<UsageCount Value="4"/>
</Unit20>
<Unit21>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="15" Y="204"/>
<TopLine Value="192"/>
<UsageCount Value="6"/>
<UsageCount Value="4"/>
</Unit21>
<Unit22>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="417"/>
<TopLine Value="412"/>
<UsageCount Value="6"/>
<UsageCount Value="4"/>
</Unit22>
<Unit23>
<Filename Value="..\..\wsdl_to_pascal\tmp_intf.pas"/>
<UnitName Value="tmp_intf"/>
<CursorPos X="34" Y="10344"/>
<TopLine Value="10333"/>
<UsageCount Value="20"/>
<UsageCount Value="18"/>
</Unit23>
<Unit24>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="14" Y="222"/>
<TopLine Value="210"/>
<UsageCount Value="7"/>
<UsageCount Value="5"/>
</Unit24>
<Unit25>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="12" Y="32"/>
<TopLine Value="15"/>
<UsageCount Value="7"/>
<UsageCount Value="5"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="15" Y="1153"/>
<TopLine Value="1136"/>
<UsageCount Value="7"/>
<UsageCount Value="5"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\parser.inc"/>
<CursorPos X="34" Y="59"/>
<TopLine Value="51"/>
<UsageCount Value="7"/>
<UsageCount Value="5"/>
</Unit27>
<Unit28>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="116"/>
<TopLine Value="102"/>
<UsageCount Value="8"/>
<UsageCount Value="6"/>
</Unit28>
<Unit29>
<Filename Value="..\..\binary_streamer.pas"/>
<UnitName Value="binary_streamer"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="55"/>
<EditorIndex Value="5"/>
<UsageCount Value="18"/>
<EditorIndex Value="11"/>
<UsageCount Value="29"/>
<Loaded Value="True"/>
</Unit29>
<Unit30>
<Filename Value="..\files\eBayWSDL.pas"/>
<UnitName Value="eBayWSDL"/>
<CursorPos X="56" Y="16040"/>
<TopLine Value="16029"/>
<EditorIndex Value="5"/>
<UsageCount Value="16"/>
<Loaded Value="True"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\lazarusClean\others_package\synapse\sswin32.pas"/>
<UnitName Value="sswin32"/>
<CursorPos X="5" Y="1196"/>
<TopLine Value="37"/>
<UsageCount Value="9"/>
</Unit31>
<Unit32>
<Filename Value="..\files\DataTypes_proxy.pas"/>
<UnitName Value="DataTypes_proxy"/>
<CursorPos X="40" Y="55"/>
<TopLine Value="51"/>
<UsageCount Value="9"/>
</Unit32>
<Unit33>
<Filename Value="..\files\eBayWSDL_proxy.pas"/>
<UnitName Value="eBayWSDL_proxy"/>
<CursorPos X="41" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="15"/>
<Loaded Value="True"/>
</Unit33>
<Unit34>
<Filename Value="..\files\eBayWSDL_imp.pas"/>
<UnitName Value="eBayWSDL_imp"/>
<CursorPos X="39" Y="1074"/>
<TopLine Value="1327"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit34>
<Unit35>
<Filename Value="..\files\eBayWSDL_binder.pas"/>
<UnitName Value="eBayWSDL_binder"/>
<CursorPos X="68" Y="11"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit35>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<JumpHistory Count="21" HistoryIndex="20">
<Position1>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1617" Column="1" TopLine="1595"/>
<Filename Value="..\files\eBayWSDL_proxy.pas"/>
<Caret Line="506" Column="85" TopLine="500"/>
</Position1>
<Position2>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="ebay.pas"/>
<Caret Line="520" Column="27" TopLine="515"/>
</Position2>
<Position3>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1056" Column="41" TopLine="1042"/>
<Filename Value="ebay.pas"/>
<Caret Line="1" Column="1" TopLine="249"/>
</Position3>
<Position4>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1609" Column="64" TopLine="1595"/>
<Filename Value="ebay.pas"/>
<Caret Line="519" Column="17" TopLine="511"/>
</Position4>
<Position5>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3060" Column="42" TopLine="3036"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position5>
<Position6>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="31804" Column="8" TopLine="32688"/>
</Position6>
<Position7>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1626" Column="48" TopLine="1605"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="23" Column="71" TopLine="1"/>
</Position7>
<Position8>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3068" Column="41" TopLine="3046"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="10951" Column="10" TopLine="10937"/>
</Position8>
<Position9>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="10958" Column="93" TopLine="10944"/>
</Position9>
<Position10>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1646" Column="1" TopLine="1629"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="16072" Column="5" TopLine="16058"/>
</Position10>
<Position11>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="24735" Column="32" TopLine="24721"/>
</Position11>
<Position12>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1629" Column="57" TopLine="1615"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="24765" Column="39" TopLine="24751"/>
</Position12>
<Position13>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="300" Column="1" TopLine="285"/>
<Filename Value="..\files\eBayWSDL_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position13>
<Position14>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1605" Column="1" TopLine="1602"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="31806" Column="19" TopLine="31802"/>
</Position14>
<Position15>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3012" Column="42" TopLine="2998"/>
<Filename Value="..\files\eBayWSDL_binder.pas"/>
<Caret Line="11" Column="69" TopLine="1"/>
</Position15>
<Position16>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1166" Column="41" TopLine="1152"/>
<Filename Value="..\..\service_intf.pas"/>
<Caret Line="84" Column="29" TopLine="83"/>
</Position16>
<Position17>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1237" Column="38" TopLine="1237"/>
<Filename Value="..\..\service_intf.pas"/>
<Caret Line="158" Column="36" TopLine="144"/>
</Position17>
<Position18>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1166" Column="71" TopLine="1166"/>
<Filename Value="..\..\service_intf.pas"/>
<Caret Line="225" Column="15" TopLine="204"/>
</Position18>
<Position19>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1237" Column="113" TopLine="1237"/>
<Filename Value="umain.pas"/>
<Caret Line="55" Column="36" TopLine="49"/>
</Position19>
<Position20>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1241" Column="12" TopLine="1227"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="32124" Column="58" TopLine="32116"/>
</Position20>
<Position21>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1165" Column="80" TopLine="1147"/>
</Position21>
<Position22>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1161" Column="74" TopLine="1151"/>
</Position22>
<Position23>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1165" Column="14" TopLine="1147"/>
</Position23>
<Position24>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1225" Column="34" TopLine="1211"/>
</Position24>
<Position25>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1148" Column="59" TopLine="1125"/>
</Position25>
<Position26>
<Filename Value="..\..\binary_streamer.pas"/>
<Filename Value="..\files\eBayWSDL.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position26>
<Position27>
<Filename Value="umain.pas"/>
<Caret Line="43" Column="9" TopLine="29"/>
</Position27>
<Position28>
<Filename Value="..\..\synapse_http_protocol.pas"/>
<Caret Line="1" Column="1" TopLine="139"/>
</Position28>
<Position29>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1285" Column="27" TopLine="1294"/>
</Position29>
<Position30>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3663" Column="24" TopLine="3652"/>
</Position30>
</Position21>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<SearchPaths>
<OtherUnitFiles Value="C:\lazarusClean\others_package\synapse\;C:\Programmes\lazarus\wst\wsdl_to_pascal\;..\..\"/>
<OtherUnitFiles Value="C:\lazarusClean\others_package\synapse\;C:\Programmes\lazarus\wst\tests\files\;..\..\"/>
<UnitOutputDirectory Value="obj"/>
<SrcPath Value="$(LazarusDir)\lcl\;$(LazarusDir)\lcl\interfaces\$(LCLWidgetType)\"/>
</SearchPaths>

View File

@ -6,7 +6,7 @@ interface
uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ExtCtrls,
Buttons, StdCtrls, ComCtrls, eBaySvc_intf;
Buttons, StdCtrls, ComCtrls;
type

View File

@ -418,6 +418,14 @@ type
procedure FormatDate();
procedure ParseDate();
end;
{ TTest_TTimeRemotable }
TTest_TTimeRemotable = class(TTestCase)
published
procedure FormatDate();
procedure ParseDate();
end;
implementation
uses base_binary_formatter, base_soap_formatter;
@ -2967,6 +2975,18 @@ begin
Fail('Write me!');
end;
{ TTest_TTimeRemotable }
procedure TTest_TTimeRemotable.FormatDate();
begin
Fail('Write me!');
end;
procedure TTest_TTimeRemotable.ParseDate();
begin
Fail('Write me!');
end;
initialization
RegisterStdTypes();
GetTypeRegistry().Register(sXSD_NS,TypeInfo(TTestEnum),'TTestEnum').RegisterExternalPropertyName('teOne', '1');
@ -2997,4 +3017,5 @@ initialization
RegisterTest(TTestBinaryFormatterAttributes);
RegisterTest(TTest_TDateRemotable);
RegisterTest(TTest_TDurationRemotable);
RegisterTest(TTest_TTimeRemotable);
end.

View File

@ -27,7 +27,7 @@
<PackageName Value="FPCUnitTestRunner"/>
</Item1>
</RequiredPackages>
<Units Count="40">
<Units Count="38">
<Unit0>
<Filename Value="wst_test_suite.lpr"/>
<IsPartOfProject Value="True"/>
@ -40,9 +40,9 @@
<Filename Value="testformatter_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testformatter_unit"/>
<CursorPos X="42" Y="2999"/>
<TopLine Value="2972"/>
<EditorIndex Value="4"/>
<CursorPos X="27" Y="3020"/>
<TopLine Value="2992"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit1>
@ -66,23 +66,22 @@
<Filename Value="..\..\base_binary_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_binary_formatter"/>
<CursorPos X="48" Y="502"/>
<TopLine Value="497"/>
<CursorPos X="45" Y="1007"/>
<TopLine Value="1003"/>
<EditorIndex Value="2"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="45" Y="1161" ID="0"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\base_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="21" Y="263"/>
<TopLine Value="250"/>
<CursorPos X="26" Y="2965"/>
<TopLine Value="665"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="5" Y="1159" ID="1"/>
<Item0 X="5" Y="1161" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit5>
@ -90,12 +89,11 @@
<Filename Value="..\..\base_soap_formatter.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="34" Y="900"/>
<TopLine Value="872"/>
<CursorPos X="18" Y="929"/>
<TopLine Value="942"/>
<EditorIndex Value="3"/>
<UsageCount Value="200"/>
<Bookmarks Count="1">
<Item0 X="22" Y="1236" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="..\..\binary_formatter.pas"/>
@ -122,353 +120,345 @@
<UsageCount Value="200"/>
</Unit9>
<Unit10>
<Filename Value="D:\lazarusClean\fpcsrc\fcl\fpcunit\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="11" Y="29"/>
<TopLine Value="35"/>
<UsageCount Value="1"/>
</Unit10>
<Unit11>
<Filename Value="..\..\metadata_repository.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_repository"/>
<CursorPos X="3" Y="79"/>
<TopLine Value="70"/>
<CursorPos X="25" Y="14"/>
<TopLine Value="712"/>
<EditorIndex Value="1"/>
<UsageCount Value="200"/>
</Unit11>
<Unit12>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="15" Y="579"/>
<TopLine Value="565"/>
<UsageCount Value="7"/>
</Unit12>
<Unit13>
<UsageCount Value="6"/>
</Unit11>
<Unit12>
<Filename Value="testmetadata_unit.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="testmetadata_unit"/>
<CursorPos X="83" Y="119"/>
<TopLine Value="46"/>
<UsageCount Value="199"/>
</Unit13>
<Unit14>
<CursorPos X="50" Y="118"/>
<TopLine Value="106"/>
<EditorIndex Value="8"/>
<UsageCount Value="202"/>
<Loaded Value="True"/>
</Unit12>
<Unit13>
<Filename Value="..\..\ws_helper\metadata_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_generator"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="31"/>
<UsageCount Value="199"/>
</Unit14>
<Unit15>
<UsageCount Value="202"/>
</Unit13>
<Unit14>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="parserdefs"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="199"/>
<EditorIndex Value="5"/>
<UsageCount Value="202"/>
<Bookmarks Count="2">
<Item0 X="45" Y="1146" ID="0"/>
<Item1 X="18" Y="1133" ID="2"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit15>
<Unit16>
</Unit14>
<Unit15>
<Filename Value="..\..\metadata_wsdl.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_wsdl"/>
<CursorPos X="25" Y="759"/>
<TopLine Value="751"/>
<EditorIndex Value="1"/>
<UsageCount Value="191"/>
<TopLine Value="748"/>
<EditorIndex Value="4"/>
<UsageCount Value="206"/>
<Loaded Value="True"/>
</Unit16>
<Unit17>
</Unit15>
<Unit16>
<Filename Value="D:\Lazarus\fpcsrc\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="15" Y="429"/>
<TopLine Value="413"/>
<UsageCount Value="6"/>
</Unit17>
<Unit18>
<UsageCount Value="5"/>
</Unit16>
<Unit17>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="13" Y="235"/>
<TopLine Value="215"/>
<UsageCount Value="0"/>
</Unit18>
<Unit19>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="187"/>
<TopLine Value="175"/>
<UsageCount Value="1"/>
</Unit19>
<Unit20>
<UsageCount Value="9"/>
</Unit17>
<Unit18>
<Filename Value="..\..\server_service_intf.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="server_service_intf"/>
<CursorPos X="35" Y="379"/>
<TopLine Value="397"/>
<UsageCount Value="125"/>
</Unit20>
<Unit21>
<UsageCount Value="143"/>
</Unit18>
<Unit19>
<Filename Value="..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="23"/>
<UsageCount Value="11"/>
</Unit21>
<Unit22>
<UsageCount Value="10"/>
</Unit19>
<Unit20>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="3" Y="316"/>
<TopLine Value="304"/>
<UsageCount Value="0"/>
</Unit22>
<Unit23>
<UsageCount Value="9"/>
</Unit20>
<Unit21>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\lists.inc"/>
<CursorPos X="3" Y="407"/>
<TopLine Value="404"/>
<UsageCount Value="0"/>
</Unit23>
<Unit24>
<UsageCount Value="9"/>
</Unit21>
<Unit22>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\inc\contnrs.pp"/>
<UnitName Value="contnrs"/>
<CursorPos X="3" Y="474"/>
<TopLine Value="471"/>
<UsageCount Value="0"/>
</Unit24>
<Unit25>
<UsageCount Value="9"/>
</Unit22>
<Unit23>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="27" Y="121"/>
<TopLine Value="104"/>
<UsageCount Value="0"/>
</Unit25>
<Unit26>
<UsageCount Value="9"/>
</Unit23>
<Unit24>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="9" Y="166"/>
<TopLine Value="142"/>
<UsageCount Value="0"/>
</Unit26>
<Unit27>
<UsageCount Value="9"/>
</Unit24>
<Unit25>
<Filename Value="D:\Lazarus\components\fpcunit\guitestrunner.pas"/>
<ComponentName Value="GUITestRunner"/>
<HasResources Value="True"/>
<UnitName Value="GuiTestRunner"/>
<CursorPos X="34" Y="32"/>
<TopLine Value="25"/>
<UsageCount Value="0"/>
</Unit27>
<Unit28>
<Filename Value="D:\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="26" Y="231"/>
<TopLine Value="193"/>
<UsageCount Value="1"/>
</Unit28>
<Unit29>
<UsageCount Value="9"/>
</Unit25>
<Unit26>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\fpcunit.pp"/>
<UnitName Value="fpcunit"/>
<CursorPos X="21" Y="94"/>
<TopLine Value="83"/>
<UsageCount Value="8"/>
</Unit29>
<Unit30>
<UsageCount Value="7"/>
</Unit26>
<Unit27>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\DUnitCompatibleInterface.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="4"/>
<UsageCount Value="2"/>
</Unit30>
<Unit31>
<UsageCount Value="1"/>
</Unit27>
<Unit28>
<Filename Value="..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="15" Y="36"/>
<TopLine Value="22"/>
<UsageCount Value="2"/>
</Unit31>
<Unit32>
<UsageCount Value="1"/>
</Unit28>
<Unit29>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="3" Y="1412"/>
<TopLine Value="1407"/>
<UsageCount Value="6"/>
</Unit32>
<Unit33>
<UsageCount Value="5"/>
</Unit29>
<Unit30>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="33" Y="192"/>
<TopLine Value="186"/>
<UsageCount Value="5"/>
</Unit33>
<Unit34>
<UsageCount Value="4"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\xmlread.pp"/>
<UnitName Value="XMLRead"/>
<CursorPos X="43" Y="13"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
</Unit34>
<Unit35>
<UsageCount Value="5"/>
</Unit31>
<Unit32>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\datih.inc"/>
<CursorPos X="10" Y="109"/>
<TopLine Value="107"/>
<UsageCount Value="7"/>
</Unit35>
<Unit36>
<UsageCount Value="6"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\dati.inc"/>
<CursorPos X="46" Y="130"/>
<TopLine Value="122"/>
<UsageCount Value="7"/>
</Unit36>
<Unit37>
<UsageCount Value="6"/>
</Unit33>
<Unit34>
<Filename Value="test_parserdef.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="test_parserdef"/>
<CursorPos X="93" Y="76"/>
<TopLine Value="11"/>
<EditorIndex Value="3"/>
<UsageCount Value="45"/>
<EditorIndex Value="6"/>
<UsageCount Value="63"/>
<Loaded Value="True"/>
</Unit37>
<Unit38>
</Unit34>
<Unit35>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\testutils.pp"/>
<UnitName Value="testutils"/>
<CursorPos X="34" Y="25"/>
<TopLine Value="1"/>
<UsageCount Value="7"/>
</Unit38>
<Unit39>
<UsageCount Value="6"/>
</Unit35>
<Unit36>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\fpcunit\testregistry.pp"/>
<UnitName Value="testregistry"/>
<CursorPos X="18" Y="17"/>
<TopLine Value="16"/>
<UsageCount Value="7"/>
</Unit39>
<UsageCount Value="6"/>
</Unit36>
<Unit37>
<Filename Value="..\..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="134"/>
<TopLine Value="141"/>
<UsageCount Value="9"/>
</Unit37>
</Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="1128" Column="39" TopLine="1122"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="315" Column="17" TopLine="291"/>
</Position1>
<Position2>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="956" Column="19" TopLine="935"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="230" Column="17" TopLine="216"/>
</Position2>
<Position3>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="977" Column="50" TopLine="956"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="198" Column="17" TopLine="185"/>
</Position3>
<Position4>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="978" Column="33" TopLine="957"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="230" Column="14" TopLine="220"/>
</Position4>
<Position5>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="1118" Column="28" TopLine="1112"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="360" Column="27" TopLine="353"/>
</Position5>
<Position6>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position6>
<Position7>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="956" Column="48" TopLine="935"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="54" Column="15" TopLine="39"/>
</Position7>
<Position8>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="977" Column="28" TopLine="956"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="62" Column="15" TopLine="47"/>
</Position8>
<Position9>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="1142" Column="1" TopLine="1129"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="108" Column="26" TopLine="93"/>
</Position9>
<Position10>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="127" Column="25" TopLine="112"/>
</Position10>
<Position11>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="986" Column="21" TopLine="951"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="198" Column="20" TopLine="192"/>
</Position11>
<Position12>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="963" Column="27" TopLine="941"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="220" Column="15" TopLine="198"/>
</Position12>
<Position13>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="974" Column="1" TopLine="957"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="264" Column="29" TopLine="252"/>
</Position13>
<Position14>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="976" Column="17" TopLine="962"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="342" Column="30" TopLine="327"/>
</Position14>
<Position15>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="978" Column="50" TopLine="964"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
</Position15>
<Position16>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="980" Column="33" TopLine="965"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="54" Column="15" TopLine="39"/>
</Position16>
<Position17>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="1050" Column="19" TopLine="1039"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="62" Column="15" TopLine="47"/>
</Position17>
<Position18>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="214" Column="45" TopLine="210"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="108" Column="26" TopLine="93"/>
</Position18>
<Position19>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="2881" Column="31" TopLine="2866"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="127" Column="25" TopLine="112"/>
</Position19>
<Position20>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="213" Column="35" TopLine="200"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="220" Column="20" TopLine="195"/>
</Position20>
<Position21>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1139" Column="42" TopLine="1126"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="326" Column="21" TopLine="303"/>
</Position21>
<Position22>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="467" Column="3" TopLine="465"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="343" Column="75" TopLine="328"/>
</Position22>
<Position23>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3667" Column="88" TopLine="3647"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="383" Column="25" TopLine="364"/>
</Position23>
<Position24>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="423" Column="65" TopLine="413"/>
</Position24>
<Position25>
<Filename Value="..\..\ws_helper\parserdefs.pas"/>
<Caret Line="1132" Column="44" TopLine="1113"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="85" Column="1" TopLine="71"/>
</Position25>
<Position26>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1167" Column="124" TopLine="1145"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="429" Column="68" TopLine="426"/>
</Position26>
<Position27>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="3927" Column="13" TopLine="3912"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="85" Column="1" TopLine="71"/>
</Position27>
<Position28>
<Filename Value="..\..\base_service_intf.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="621" Column="5" TopLine="586"/>
</Position28>
<Position29>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="416" Column="3" TopLine="414"/>
<Filename Value="..\..\metadata_repository.pas"/>
<Caret Line="635" Column="8" TopLine="617"/>
</Position29>
<Position30>
<Filename Value="testformatter_unit.pas"/>
<Caret Line="2965" Column="35" TopLine="2960"/>
<Filename Value="testmetadata_unit.pas"/>
<Caret Line="118" Column="50" TopLine="106"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>
<Version Value="5"/>
<PathDelim Value="\"/>
<Target>
<Filename Value="wst_test_suite.exe"/>
</Target>
<SearchPaths>
<OtherUnitFiles Value="..\..\;..\..\ws_helper\"/>
<UnitOutputDirectory Value="obj"/>

View File

@ -159,6 +159,7 @@ type
procedure GenerateEnum(ASymbol : TEnumTypeDefinition);
procedure GenerateArray(ASymbol : TArrayDefinition);
procedure GenerateCustomMetadatas();
function GetDestUnitName():string;
public
constructor Create(
@ -177,14 +178,13 @@ Const sPROXY_BASE_CLASS = 'TBaseProxy';
sBINDER_BASE_CLASS = 'TBaseServiceBinder';
sIMP_BASE_CLASS = 'TBaseServiceImplementation';
sSERIALIZER_CLASS = 'IFormatterClient';
RETURN_PARAM_NAME = 'return';
//RETURN_PARAM_NAME = 'return';
RETURN_VAL_NAME = 'returnVal';
sNAME_SPACE = 'sNAME_SPACE';
sUNIT_NAME = 'sUNIT_NAME';
sPRM_NAME = 'strPrmName';
sLOC_SERIALIZER = 'locSerializer';
//sRES_TYPE_INFO = 'resTypeInfo';
//sLOC_TYPE_INFO = 'locTypeInfo';
{ TProxyGenerator }
@ -776,7 +776,7 @@ Var
prm := AMthd.Parameter[prmCnt];
If prm.DataType.NeedFinalization() Then Begin
if prm.DataType.InheritsFrom(TClassTypeDefinition) then begin
WriteLn('Pointer(%s) := Nil;',[RETURN_VAL_NAME]);
WriteLn('TObject(%s) := Nil;',[RETURN_VAL_NAME]);
end else begin
WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind in [tkClass,tkInterface] ) Then',[prm.DataType.Name]);
IncIndent();
@ -790,7 +790,7 @@ Var
prm := AMthd.Parameter[k];
If prm.DataType.NeedFinalization() Then Begin
if prm.DataType.InheritsFrom(TClassTypeDefinition) then begin
WriteLn('Pointer(%s) := Nil;',[prm.Name]);
WriteLn('TObject(%s) := Nil;',[prm.Name]);
end else begin
WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind in [tkClass,tkObject,tkInterface] ) Then',[prm.DataType.Name]);
IncIndent();
@ -846,7 +846,7 @@ Var
prm := AMthd.Parameter[prmCnt];
If prm.DataType.NeedFinalization() Then Begin
if prm.DataType.InheritsFrom(TClassTypeDefinition) then
WriteLn('If Assigned(Pointer(%s)) Then',[RETURN_VAL_NAME])
WriteLn('If Assigned(TObject(%s)) Then',[RETURN_VAL_NAME])
else
WriteLn('If ( PTypeInfo(TypeInfo(%s))^.Kind = tkClass ) And Assigned(Pointer(%s)) Then',[prm.DataType.Name,RETURN_VAL_NAME]);
IncIndent();
@ -1270,6 +1270,7 @@ begin
IncIndent();
Indent();WriteLn('sNAME_SPACE = %s;',[QuotedStr(FSymbolTable.ExternalName)]);
Indent();WriteLn('sUNIT_NAME = %s;',[QuotedStr(FSymbolTable.Name)]);
DecIndent();
WriteLn('');
@ -1282,6 +1283,7 @@ begin
SetCurrentStream(FImpStream);
WriteLn('');
WriteLn('Implementation');
WriteLn('uses metadata_repository;');
FImpTempStream.WriteLn('initialization');
end;
@ -1756,11 +1758,83 @@ begin
FImpTempStream.Indent();
FImpTempStream.WriteLn('GetTypeRegistry().Register(%s,TypeInfo(%s),%s);',[sNAME_SPACE,ASymbol.Name,QuotedStr(ASymbol.ExternalName)]);
if ( ASymbol.ItemName <> ASymbol.ItemExternalName ) then begin
FImpTempStream.WriteLn(
'GetTypeRegistry().ItemByTypeInfo[%s].RegisterExternalPropertyName(''item'',%s);',
[ASymbol.Name,QuotedStr(ASymbol.ItemExternalName)]
);
end;
end;
procedure TInftGenerator.GenerateCustomMetadatas();
procedure WriteOperationDatas(AInftDef : TInterfaceDefinition; AOp : TMethodDefinition);
var
k : Integer;
pl : TStrings;
begin
pl := AOp.Properties;
for k := 0 to Pred(pl.Count) do begin
if not IsStrEmpty(pl.ValueFromIndex[k]) then begin
Indent();WriteLn('mm.SetOperationCustomData(');
IncIndent();
Indent(); WriteLn('%s,',[sUNIT_NAME]);
Indent(); WriteLn('%s,',[QuotedStr(AInftDef.Name)]);
Indent(); WriteLn('%s,',[QuotedStr(AOp.Name)]);
Indent(); WriteLn('%s,',[QuotedStr(pl.Names[k])]);
Indent(); WriteLn('%s' ,[QuotedStr(pl.ValueFromIndex[k])]);
DecIndent();
Indent();WriteLn(');');
end;
end;
end;
procedure WriteServiceDatas(AIntf : TInterfaceDefinition);
var
k : Integer;
begin
if not IsStrEmpty(AIntf.Address) then begin
Indent();WriteLn('mm.SetServiceCustomData(');
IncIndent();
Indent(); WriteLn('%s,',[sUNIT_NAME]);
Indent(); WriteLn('%s,',[QuotedStr(AIntf.Name)]);
Indent(); WriteLn('%s,',[QuotedStr('Address')]);
Indent(); WriteLn('%s' ,[QuotedStr(AIntf.Address)]);
DecIndent();
Indent();WriteLn(');');
end;
for k := 0 to Pred(AIntf.MethodCount) do begin
WriteOperationDatas(AIntf,AIntf.Method[k]);
end;
end;
var
i : Integer;
begin
SetCurrentStream(FImpStream);
IncIndent();
NewLine();NewLine();
WriteLn('procedure Register_%s_ServiceMetadata();',[SymbolTable.Name]);
WriteLn('var');
Indent(); WriteLn('mm : IModuleMetadataMngr;');
WriteLn('begin');
Indent();WriteLn('mm := GetModuleMetadataMngr();');
Indent();WriteLn('mm.SetRepositoryNameSpace(%s, %s);',[sUNIT_NAME,sNAME_SPACE]);
for i := 0 to Pred(SymbolTable.Count) do begin
if SymbolTable.Item[i] is TInterfaceDefinition then begin
WriteServiceDatas(SymbolTable.Item[i] as TInterfaceDefinition);
end;
end;
WriteLn('end;');
DecIndent();
end;
function TInftGenerator.GetDestUnitName(): string;
begin
Result := Format('%s_intf',[SymbolTable.Name]);
Result := SymbolTable.Name;
end;
constructor TInftGenerator.Create(
@ -1865,6 +1939,12 @@ begin
end;
end;
NewLine();
IncIndent();
Indent(); WriteLn('procedure Register_%s_ServiceMetadata();',[SymbolTable.Name]);
DecIndent();
GenerateCustomMetadatas();
GenerateUnitImplementationFooter();
FSrcMngr.Merge(GetDestUnitName() + '.pas',[FDecStream,FImpStream,FImpTempStream]);
FDecStream := nil;

View File

@ -133,6 +133,7 @@ Type
TArrayDefinition = class(TTypeDefinition)
private
FItemExternalName: string;
FItemName: string;
FItemType: TTypeDefinition;
protected
@ -142,13 +143,15 @@ Type
);override;
public
constructor Create(
const AName : string;
AItemType : TTypeDefinition;
ItemName : string
const AName : string;
AItemType : TTypeDefinition;
const AItemName,
AItemExternalName : string
);
function NeedFinalization():Boolean;override;
property ItemName : string read FItemName;
property ItemType : TTypeDefinition read FItemType;
property ItemExternalName : string read FItemExternalName;
end;
TEnumTypeDefinition = class;
@ -296,6 +299,7 @@ Type
FMethodType: TMethodType;
FParameterList : TObjectList;
private
FProperties: TStrings;
function GetParameter(Index: Integer): TParameterDefinition;
function GetParameterCount: Integer;
protected
@ -317,6 +321,7 @@ Type
property MethodType : TMethodType Read FMethodType;
property ParameterCount : Integer Read GetParameterCount;
property Parameter[Index:Integer] : TParameterDefinition Read GetParameter;
property Properties : TStrings read FProperties;
End;
{ TInterfaceDefinition }
@ -326,6 +331,7 @@ Type
FInterfaceGUID: string;
FMethodList : TObjectList;
private
FAddress: string;
function GetMethod(Index: Integer): TMethodDefinition;
function GetMethodCount: Integer;
protected
@ -346,6 +352,7 @@ Type
Property MethodCount : Integer Read GetMethodCount;
Property Method[Index:Integer] : TMethodDefinition Read GetMethod;
property InterfaceGUID : string read FInterfaceGUID write FInterfaceGUID;
property Address : string read FAddress write FAddress;
End;
{ TSymbolTable }
@ -525,10 +532,12 @@ begin
Inherited Create(AName);
FMethodType := AMethodType;
FParameterList := TObjectList.create(True);
FProperties := TStringList.Create();
end;
destructor TMethodDefinition.Destroy();
begin
FreeAndNil(FProperties);
FreeAndNil(FParameterList);
inherited Destroy();
end;
@ -1176,6 +1185,7 @@ begin
AddClassDef(Result,'TAbstractSimpleRemotable','TBaseRemotable');
AddClassDef(Result,'TDateRemotable','TAbstractSimpleRemotable').RegisterExternalAlias('dateTime');
AddClassDef(Result,'TDurationRemotable','TAbstractSimpleRemotable').RegisterExternalAlias('duration');
AddClassDef(Result,'TTimeRemotable','TAbstractSimpleRemotable').RegisterExternalAlias('time');
AddClassDef(Result,'TAbstractComplexRemotable','TBaseRemotable');
loc_TBaseComplexSimpleContentRemotable := AddClassDef(Result,'TBaseComplexSimpleContentRemotable','TAbstractComplexRemotable');
@ -1267,14 +1277,19 @@ begin
end;
constructor TArrayDefinition.Create(
const AName : string;
AItemType : TTypeDefinition;
ItemName : string
const AName : string;
AItemType : TTypeDefinition;
const AItemName,
AItemExternalName : string
);
begin
Assert(Assigned(AItemType));
inherited Create(AName);
FItemType := AItemType;
FItemName := AItemName;
FItemExternalName := AItemExternalName;
if IsStrEmpty(FItemExternalName) then
FItemExternalName := FItemName;
end;
function TArrayDefinition.NeedFinalization(): Boolean;

View File

@ -24,7 +24,7 @@
<RunParams>
<local>
<FormatVersion Value="1"/>
<CommandLineParams Value="-u -i -p -b -a&quot;C:\Programmes\lazarus\wst\tests\files&quot; &quot;C:\Programmes\lazarus\utils\googleapi\GoogleSearch.wsdl&quot;"/>
<CommandLineParams Value="-u -i -p -b -a&quot;C:\Programmes\lazarus\wst\tests\files&quot; &quot;C:\Programmes\lazarus\wst\tests\files\MathService.wsdl&quot;"/>
<LaunchingApplication PathPlusParams="\usr\X11R6\bin\xterm -T 'Lazarus Run Output' -e $(LazarusDir)\tools\runwait.sh $(TargetCmdLine)"/>
</local>
</RunParams>
@ -38,8 +38,8 @@
<Filename Value="ws_helper.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ws_helper"/>
<CursorPos X="26" Y="29"/>
<TopLine Value="15"/>
<CursorPos X="30" Y="181"/>
<TopLine Value="99"/>
<EditorIndex Value="1"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
@ -48,9 +48,9 @@
<Filename Value="ws_parser.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="ws_parser"/>
<CursorPos X="53" Y="420"/>
<TopLine Value="400"/>
<EditorIndex Value="7"/>
<CursorPos X="1" Y="437"/>
<TopLine Value="423"/>
<EditorIndex Value="8"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit1>
@ -58,14 +58,15 @@
<Filename Value="generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="generator"/>
<CursorPos X="112" Y="448"/>
<TopLine Value="417"/>
<CursorPos X="36" Y="1286"/>
<TopLine Value="1281"/>
<EditorIndex Value="0"/>
<UsageCount Value="200"/>
<Bookmarks Count="3">
<Bookmarks Count="4">
<Item0 X="43" Y="723" ID="0"/>
<Item1 X="69" Y="860" ID="1"/>
<Item2 X="17" Y="219" ID="2"/>
<Item3 X="23" Y="1810" ID="4"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit2>
@ -73,9 +74,9 @@
<Filename Value="parserdefs.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="parserdefs"/>
<CursorPos X="3" Y="41"/>
<TopLine Value="30"/>
<EditorIndex Value="5"/>
<CursorPos X="58" Y="355"/>
<TopLine Value="330"/>
<EditorIndex Value="6"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit3>
@ -85,7 +86,7 @@
<UnitName Value="parserutils"/>
<CursorPos X="1" Y="39"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<EditorIndex Value="7"/>
<UsageCount Value="200"/>
<Loaded Value="True"/>
</Unit4>
@ -93,7 +94,7 @@
<Filename Value="ws_helper.lpi"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
<SyntaxHighlighter Value="None"/>
</Unit5>
<Unit6>
@ -101,42 +102,42 @@
<UnitName Value="Classes"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit6>
<Unit7>
<Filename Value="usr\share\fpcsrc\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit7>
<Unit8>
<Filename Value="usr\share\fpcsrc\rtl\unix\sysutils.pp"/>
<UnitName Value="sysutils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="8"/>
<UsageCount Value="7"/>
</Unit8>
<Unit9>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\lazarus\IdDsnCoreResourceStrings.pas"/>
<UnitName Value="IdDsnCoreResourceStrings"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit9>
<Unit10>
<Filename Value="D:\Lazarus\others_package\indy\indy-10.2.0.1\lazarus\IdDsnPropEdBinding.pas"/>
<UnitName Value="IdDsnPropEdBinding"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit10>
<Unit11>
<Filename Value="D:\Lazarus\ide\lazarus.pp"/>
<UnitName Value="Lazarus"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit11>
<Unit12>
<Filename Value="source_utils.pas"/>
@ -151,26 +152,26 @@
<UnitName Value="getopts"/>
<CursorPos X="16" Y="45"/>
<TopLine Value="33"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit13>
<Unit14>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/>
<CursorPos X="23" Y="246"/>
<TopLine Value="246"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit14>
<Unit15>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="10" Y="74"/>
<TopLine Value="70"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit15>
<Unit16>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\sysutils\sysstr.inc"/>
<CursorPos X="3" Y="185"/>
<TopLine Value="180"/>
<UsageCount Value="3"/>
<UsageCount Value="2"/>
</Unit16>
<Unit17>
<Filename Value="command_line_parser.pas"/>
@ -184,80 +185,82 @@
<Filename Value="metadata_generator.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="metadata_generator"/>
<CursorPos X="1" Y="19"/>
<TopLine Value="1"/>
<UsageCount Value="170"/>
<CursorPos X="3" Y="96"/>
<TopLine Value="69"/>
<EditorIndex Value="2"/>
<UsageCount Value="190"/>
<Loaded Value="True"/>
</Unit18>
<Unit19>
<Filename Value="..\binary_streamer.pas"/>
<IsPartOfProject Value="True"/>
<UnitName Value="binary_streamer"/>
<CursorPos X="6" Y="13"/>
<TopLine Value="1"/>
<UsageCount Value="170"/>
<CursorPos X="32" Y="344"/>
<TopLine Value="328"/>
<UsageCount Value="190"/>
</Unit19>
<Unit20>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\finah.inc"/>
<CursorPos X="11" Y="27"/>
<TopLine Value="1"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit20>
<Unit21>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\fina.inc"/>
<CursorPos X="3" Y="26"/>
<TopLine Value="23"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit21>
<Unit22>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="17" Y="662"/>
<TopLine Value="652"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit22>
<Unit23>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\filutilh.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="54"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit23>
<Unit24>
<Filename Value="D:\Lazarus\lcl\lresources.pp"/>
<UnitName Value="LResources"/>
<CursorPos X="15" Y="590"/>
<TopLine Value="586"/>
<UsageCount Value="5"/>
<UsageCount Value="4"/>
</Unit24>
<Unit25>
<Filename Value="D:\Lazarus\fpcsrc\rtl\win\sysutils.pp"/>
<UnitName Value="sysutils"/>
<CursorPos X="12" Y="33"/>
<TopLine Value="11"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit25>
<Unit26>
<Filename Value="D:\Lazarus\fpcsrc\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="11" Y="221"/>
<TopLine Value="194"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit26>
<Unit27>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="1" Y="47"/>
<TopLine Value="25"/>
<UsageCount Value="2"/>
<UsageCount Value="1"/>
</Unit27>
<Unit28>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="30" Y="1183"/>
<TopLine Value="1171"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit28>
<Unit29>
<Filename Value="D:\lazarusClean\fpcsrc\rtl\objpas\classes\parser.inc"/>
<CursorPos X="3" Y="303"/>
<TopLine Value="299"/>
<UsageCount Value="4"/>
<UsageCount Value="3"/>
</Unit29>
<Unit30>
<Filename Value="wst_resources_utils.pas"/>
@ -265,45 +268,45 @@
<UnitName Value="wst_resources_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="85"/>
<UsageCount Value="105"/>
</Unit30>
<Unit31>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\classes.pp"/>
<UnitName Value="Classes"/>
<CursorPos X="1" Y="47"/>
<TopLine Value="20"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit31>
<Unit32>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\win32\sysutils.pp"/>
<UnitName Value="sysutils"/>
<CursorPos X="15" Y="33"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit32>
<Unit33>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="15" Y="19"/>
<TopLine Value="7"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit33>
<Unit34>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\osutilsh.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit34>
<Unit35>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\finah.inc"/>
<CursorPos X="10" Y="30"/>
<TopLine Value="16"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit35>
<Unit36>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\fina.inc"/>
<CursorPos X="15" Y="102"/>
<TopLine Value="78"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit36>
<Unit37>
<Filename Value="..\wsdl_to_pascal\wsdl2pas_imp.pas"/>
@ -311,193 +314,204 @@
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="29" Y="1641"/>
<TopLine Value="1633"/>
<UsageCount Value="77"/>
<UsageCount Value="97"/>
</Unit37>
<Unit38>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\fexpand.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="124"/>
<UsageCount Value="6"/>
<UsageCount Value="5"/>
</Unit38>
<Unit39>
<Filename Value="..\wst_rtti_filter\rtti_filters.pas"/>
<UnitName Value="rtti_filters"/>
<CursorPos X="1" Y="571"/>
<TopLine Value="557"/>
<UsageCount Value="11"/>
<UsageCount Value="10"/>
</Unit39>
<Unit40>
<Filename Value="..\wst_rtti_filter\dom_cursors.pas"/>
<UnitName Value="dom_cursors"/>
<CursorPos X="1" Y="194"/>
<TopLine Value="180"/>
<CursorPos X="3" Y="110"/>
<TopLine Value="108"/>
<EditorIndex Value="4"/>
<UsageCount Value="23"/>
<UsageCount Value="31"/>
<Loaded Value="True"/>
</Unit40>
<Unit41>
<Filename Value="..\wst_rtti_filter\cursor_intf.pas"/>
<UnitName Value="cursor_intf"/>
<CursorPos X="1" Y="113"/>
<TopLine Value="99"/>
<EditorIndex Value="3"/>
<UsageCount Value="23"/>
<CursorPos X="3" Y="89"/>
<TopLine Value="84"/>
<EditorIndex Value="5"/>
<UsageCount Value="33"/>
<Loaded Value="True"/>
</Unit41>
<Unit42>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="41" Y="69"/>
<TopLine Value="67"/>
<UsageCount Value="7"/>
<UsageCount Value="6"/>
</Unit42>
<Unit43>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\fcl\xml\dom.pp"/>
<UnitName Value="DOM"/>
<CursorPos X="14" Y="292"/>
<TopLine Value="271"/>
<UsageCount Value="10"/>
<CursorPos X="14" Y="232"/>
<TopLine Value="215"/>
<UsageCount Value="9"/>
</Unit43>
<Unit44>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpash.inc"/>
<CursorPos X="26" Y="139"/>
<TopLine Value="125"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit44>
<Unit45>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\inc\objpas.inc"/>
<CursorPos X="11" Y="360"/>
<TopLine Value="354"/>
<UsageCount Value="9"/>
<UsageCount Value="8"/>
</Unit45>
<Unit46>
<Filename Value="..\..\..\..\lazarusClean\fpc\2.0.4\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="14" Y="219"/>
<TopLine Value="183"/>
<UsageCount Value="10"/>
<UsageCount Value="9"/>
</Unit46>
<Unit47>
<Filename Value="wsdl2pas_imp.pas"/>
<UnitName Value="wsdl2pas_imp"/>
<CursorPos X="43" Y="883"/>
<TopLine Value="862"/>
<EditorIndex Value="2"/>
<UsageCount Value="14"/>
<CursorPos X="21" Y="514"/>
<TopLine Value="514"/>
<EditorIndex Value="3"/>
<UsageCount Value="24"/>
<Bookmarks Count="1">
<Item0 X="21" Y="646" ID="3"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit47>
</Units>
<JumpHistory Count="28" HistoryIndex="27">
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="802" Column="48" TopLine="780"/>
<Caret Line="401" Column="34" TopLine="386"/>
</Position1>
<Position2>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Caret Line="1063" Column="19" TopLine="1049"/>
</Position2>
<Position3>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1321" Column="37" TopLine="1300"/>
<Caret Line="176" Column="63" TopLine="151"/>
</Position3>
<Position4>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1460" Column="57" TopLine="1438"/>
<Caret Line="1066" Column="24" TopLine="1054"/>
</Position4>
<Position5>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="849" Column="32" TopLine="861"/>
<Caret Line="559" Column="20" TopLine="544"/>
</Position5>
<Position6>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="802" Column="112" TopLine="788"/>
<Caret Line="297" Column="37" TopLine="279"/>
</Position6>
<Position7>
<Filename Value="generator.pas"/>
<Caret Line="458" Column="20" TopLine="420"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="193" Column="88" TopLine="175"/>
</Position7>
<Position8>
<Filename Value="generator.pas"/>
<Caret Line="1" Column="1" TopLine="1"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="617" Column="31" TopLine="594"/>
</Position8>
<Position9>
<Filename Value="generator.pas"/>
<Caret Line="193" Column="9" TopLine="172"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="561" Column="20" TopLine="553"/>
</Position9>
<Position10>
<Filename Value="generator.pas"/>
<Caret Line="194" Column="39" TopLine="173"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1092" Column="15" TopLine="1074"/>
</Position10>
<Position11>
<Filename Value="generator.pas"/>
<Caret Line="274" Column="9" TopLine="253"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="442" Column="13" TopLine="428"/>
</Position11>
<Position12>
<Filename Value="generator.pas"/>
<Caret Line="439" Column="47" TopLine="418"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="508" Column="20" TopLine="492"/>
</Position12>
<Position13>
<Filename Value="generator.pas"/>
<Caret Line="443" Column="49" TopLine="422"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="617" Column="1" TopLine="602"/>
</Position13>
<Position14>
<Filename Value="generator.pas"/>
<Caret Line="497" Column="34" TopLine="476"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="508" Column="14" TopLine="485"/>
</Position14>
<Position15>
<Filename Value="generator.pas"/>
<Caret Line="541" Column="9" TopLine="520"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="116" Column="58" TopLine="102"/>
</Position15>
<Position16>
<Filename Value="generator.pas"/>
<Caret Line="546" Column="9" TopLine="525"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="513" Column="68" TopLine="513"/>
</Position16>
<Position17>
<Filename Value="generator.pas"/>
<Caret Line="586" Column="9" TopLine="565"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="117" Column="28" TopLine="116"/>
</Position17>
<Position18>
<Filename Value="generator.pas"/>
<Caret Line="587" Column="19" TopLine="566"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="1095" Column="15" TopLine="1071"/>
</Position18>
<Position19>
<Filename Value="generator.pas"/>
<Caret Line="588" Column="18" TopLine="567"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="442" Column="10" TopLine="428"/>
</Position19>
<Position20>
<Filename Value="generator.pas"/>
<Caret Line="604" Column="9" TopLine="583"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="499" Column="53" TopLine="471"/>
</Position20>
<Position21>
<Filename Value="generator.pas"/>
<Caret Line="605" Column="47" TopLine="584"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="137" Column="55" TopLine="119"/>
</Position21>
<Position22>
<Filename Value="generator.pas"/>
<Caret Line="927" Column="26" TopLine="906"/>
<Filename Value="parserdefs.pas"/>
<Caret Line="334" Column="22" TopLine="330"/>
</Position22>
<Position23>
<Filename Value="generator.pas"/>
<Caret Line="966" Column="9" TopLine="945"/>
<Caret Line="1770" Column="41" TopLine="1765"/>
</Position23>
<Position24>
<Filename Value="generator.pas"/>
<Caret Line="1001" Column="9" TopLine="980"/>
<Caret Line="1812" Column="4" TopLine="1805"/>
</Position24>
<Position25>
<Filename Value="generator.pas"/>
<Caret Line="1002" Column="44" TopLine="981"/>
<Caret Line="1795" Column="28" TopLine="1780"/>
</Position25>
<Position26>
<Filename Value="generator.pas"/>
<Caret Line="1215" Column="9" TopLine="1194"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="507" Column="40" TopLine="478"/>
</Position26>
<Position27>
<Filename Value="generator.pas"/>
<Caret Line="1250" Column="9" TopLine="1229"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="153" Column="56" TopLine="127"/>
</Position27>
<Position28>
<Filename Value="generator.pas"/>
<Caret Line="1535" Column="30" TopLine="1514"/>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="506" Column="16" TopLine="487"/>
</Position28>
<Position29>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="508" Column="1" TopLine="493"/>
</Position29>
<Position30>
<Filename Value="wsdl2pas_imp.pas"/>
<Caret Line="515" Column="1" TopLine="490"/>
</Position30>
</JumpHistory>
</ProjectOptions>
<CompilerOptions>

View File

@ -257,13 +257,10 @@ Var
sbl : TInterfaceDefinition;
procedure ReadIntfHeader();
Var
tmpStr : String;
begin
NextToken();
Repeat
Tokenizer.CheckToken(toSymbol);
tmpStr := Tokenizer.TokenString;
NextToken();
If AnsiSameText(Tokenizer.TokenString,GetPascalTokenStr(ptRigthParenthesis)) Then Begin
NextToken();
@ -437,7 +434,6 @@ end;
procedure TPascalParser.ParseClassType(const AName: String);
Var
sbl : TClassTypeDefinition;
tmpStr : String;
begin
sbl := TClassTypeDefinition.Create(AName);
FSymbolTable.Add(sbl);

View File

@ -91,6 +91,7 @@ type
FWsdlShortNames : TStringList;
FSoapShortNames : TStringList;
FXSShortNames : TStringList;
FChildCursor : IObjectCursor;
FServiceCursor : IObjectCursor;
FBindingCursor : IObjectCursor;
FPortTypeCursor : IObjectCursor;
@ -112,14 +113,14 @@ type
procedure Prepare();
procedure ParseService(ANode : TDOMNode);
procedure ParsePort(ANode : TDOMNode);
procedure ParsePortType(
function ParsePortType(
ANode, ABindingNode : TDOMNode
);
procedure ParseOperation(
) : TInterfaceDefinition;
function ParseOperation(
AOwner : TInterfaceDefinition;
ANode : TDOMNode;
const ASoapBindingStyle : string
);
) : TMethodDefinition;
function ParseType(const AName, ATypeOrElement : string) : TTypeDefinition;
public
constructor Create(ADoc : TXMLDocument; ASymbols : TSymbolTable);
@ -133,8 +134,9 @@ implementation
uses dom_cursors, parserutils, StrUtils, Contnrs;
const
s_address : WideString = 'address';
s_all : WideString = 'all';
s_any : WideString = 'any';
//s_any : WideString = 'any';
s_array : WideString = 'array';
s_arrayType : WideString = 'arrayType';
s_attribute : WideString = 'attribute';
@ -148,6 +150,7 @@ const
s_extension : WideString = 'extension';
s_input : WideString = 'input';
s_item : WideString = 'item';
s_location : WideString = 'location';
s_message : WideString = 'message';
s_maxOccurs : WideString = 'maxOccurs';
s_minOccurs : WideString = 'minOccurs';
@ -161,7 +164,7 @@ const
s_prohibited : WideString = 'prohibited';
s_required : WideString = 'required';
s_restriction : WideString = 'restriction';
s_return : WideString = 'return';
//s_return : WideString = 'return';
s_rpc : WideString = 'rpc';
s_schema : WideString = 'schema';
s_xs : WideString = 'http://www.w3.org/2001/XMLSchema';
@ -170,7 +173,9 @@ const
s_simpleContent : WideString = 'simpleContent';
s_simpleType : WideString = 'simpleType';
s_soap : WideString = 'http://schemas.xmlsoap.org/wsdl/soap/';
s_soapAction : WideString = 'soapAction';
s_style : WideString = 'style';
s_targetNamespace : WideString = 'targetNamespace';
s_type : WideString = 'type';
s_types : WideString = 'types';
s_unbounded : WideString = 'unbounded';
@ -187,7 +192,7 @@ type TCursorExposedType = ( cetRttiNode, cetDomNode );
function CreateAttributesCursor(ANode : TDOMNode; const AExposedType : TCursorExposedType):IObjectCursor;
begin
Result := nil;
if ( ANode <> nil ) and ( ANode.Attributes <> nil ) then begin
if ( ANode <> nil ) and ( ANode.Attributes <> nil ) and ( ANode.Attributes.Length > 0 ) then begin
Result := TDOMNamedNodeMapCursor.Create(ANode.Attributes,faNone) ;
if ( AExposedType = cetRttiNode ) then
Result := TDOMNodeRttiExposerCursor.Create(Result);
@ -272,23 +277,8 @@ begin
end;
function TWsdlParser.CreateWsdlNameFilter(const AName: WideString): IObjectFilter;
var
k : Integer;
locStr : string;
locWStr : WideString;
begin
locStr := '';
for k := 0 to Pred(FWsdlShortNames.Count) do begin
if IsStrEmpty(FWsdlShortNames[k]) then
locWStr := ''
else
locWStr := FWsdlShortNames[k] + ':';
locWStr := locWStr + AName;
locStr := locStr + ' or ' + s_NODE_NAME + '=' + QuotedStr(locWStr) ;
end;
if ( Length(locStr) > 0 ) then
Delete(locStr,1,Length(' or '));
Result := ParseFilter(locStr,TDOMNodeRttiExposer);
Result := ParseFilter(CreateQualifiedNameFilterStr(AName,FWsdlShortNames),TDOMNodeRttiExposer);
end;
function TWsdlParser.FindNamedNode(
@ -298,20 +288,17 @@ function TWsdlParser.FindNamedNode(
var
attCrs, crs : IObjectCursor;
curObj : TDOMNodeRttiExposer;
fltrCreator : TRttiFilterCreator;
s : string;
fltr : IObjectFilter;
begin
Result := nil;
fltrCreator := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
s := s_NODE_NAME;
fltrCreator.AddCondition(s,sfoEqualCaseInsensitive,s_name,fcNone);
if Assigned(AList) then begin
fltr := ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_name)]),TDOMNodeRttiExposer);
AList.Reset();
while AList.MoveNext() do begin
curObj := AList.GetCurrent() as TDOMNodeRttiExposer;
attCrs := CreateAttributesCursor(curObj.InnerObject,cetRttiNode);
if Assigned(attCrs) then begin
crs := CreateCursorOn(attCrs,TRttiObjectFilter.Create(fltrCreator.Root,clrNone));
crs := CreateCursorOn(attCrs,fltr);
crs.Reset();
if crs.MoveNext() and WideSameText(AName,TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue) then begin
Result := curObj.InnerObject;
@ -319,9 +306,6 @@ begin
end;
end;
end;
finally
fltrCreator.Clear(clrFreeObjects);
FreeAndNil(fltrCreator);
end;
end;
@ -386,95 +370,79 @@ end;
procedure TWsdlParser.Prepare();
var
locAttCursor : IObjectCursor;
locChildCursor : IObjectCursor;
locFltrCreator : TRttiFilterCreator;
locObj : TDOMNodeRttiExposer;
locSrvcCrs : IObjectCursor;
begin
FPortTypeCursor := nil;
FWsdlShortNames.Clear();
locAttCursor := CreateAttributesCursor(FDoc.DocumentElement,cetRttiNode);
locChildCursor := TDOMNodeListCursor.Create(FDoc.DocumentElement.GetChildNodes,faFreeOnDestroy) ;
locChildCursor := TDOMNodeRttiExposerCursor.Create(locChildCursor);
FChildCursor := TDOMNodeListCursor.Create(FDoc.DocumentElement.GetChildNodes,faFreeOnDestroy) ;
FChildCursor := TDOMNodeRttiExposerCursor.Create(FChildCursor);
locFltrCreator := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
ExtractNameSpaceShortNames(locAttCursor,FWsdlShortNames,s_wsdl,nfaRaiseException,True);
ExtractNameSpaceShortNames(locAttCursor,FSoapShortNames,s_soap,nfaRaiseException,False);
ExtractNameSpaceShortNames(locAttCursor,FXSShortNames,s_xs,nfaRaiseException,True);
ExtractNameSpaceShortNames(locAttCursor,FWsdlShortNames,s_wsdl,nfaRaiseException,True);
ExtractNameSpaceShortNames(locAttCursor,FSoapShortNames,s_soap,nfaRaiseException,False);
ExtractNameSpaceShortNames(locAttCursor,FXSShortNames,s_xs,nfaRaiseException,True);
locFltrCreator.Clear(clrFreeObjects);
CreateWsdlNameFilter(locFltrCreator,s_service);
FServiceCursor := CreateCursorOn(locChildCursor.Clone() as IObjectCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects));
FServiceCursor.Reset();
locFltrCreator.Clear(clrNone);
CreateWsdlNameFilter(locFltrCreator,s_binding);
FBindingCursor := CreateCursorOn(locChildCursor.Clone() as IObjectCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects));
FBindingCursor.Reset();
FServiceCursor := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_service,FWsdlShortNames),TDOMNodeRttiExposer)
);
FServiceCursor.Reset();
FBindingCursor := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_binding,FWsdlShortNames),TDOMNodeRttiExposer)
);
FBindingCursor.Reset();
locFltrCreator.Clear(clrNone);
CreateWsdlNameFilter(locFltrCreator,s_portType);
FPortTypeCursor := CreateCursorOn(locChildCursor.Clone() as IObjectCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects));
FPortTypeCursor.Reset();
FPortTypeCursor := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_portType,FWsdlShortNames),TDOMNodeRttiExposer)
);
FPortTypeCursor.Reset();
FSchemaCursor := nil;
locFltrCreator.Clear(clrNone);
CreateWsdlNameFilter(locFltrCreator,s_types);
FTypesCursor := CreateCursorOn(locChildCursor.Clone() as IObjectCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects));
FTypesCursor.Reset();
if FTypesCursor.MoveNext() then begin
locObj := FTypesCursor.GetCurrent() as TDOMNodeRttiExposer;
if locObj.InnerObject.HasChildNodes() then begin
FSchemaCursor := CreateChildrenCursor(locObj.InnerObject,cetRttiNode);
FSchemaCursor.Reset();
locFltrCreator.Clear(clrNone);
CreateXsNameFilter(locFltrCreator,s_schema);
FSchemaCursor := CreateCursorOn(
FSchemaCursor,//.Clone() as IObjectCursor,
TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects)
);
FSchemaCursor.Reset();
end;
FSchemaCursor := nil;
FTypesCursor := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_types,FWsdlShortNames),TDOMNodeRttiExposer)
);
FTypesCursor.Reset();
if FTypesCursor.MoveNext() then begin
locObj := FTypesCursor.GetCurrent() as TDOMNodeRttiExposer;
if locObj.InnerObject.HasChildNodes() then begin
FSchemaCursor := CreateChildrenCursor(locObj.InnerObject,cetRttiNode);
FSchemaCursor.Reset();
FSchemaCursor := CreateCursorOn(
FSchemaCursor,//.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_schema,FXSShortNames),TDOMNodeRttiExposer)
);
FSchemaCursor.Reset();
end;
locFltrCreator.Clear(clrNone);
CreateWsdlNameFilter(locFltrCreator,s_message);
FMessageCursor := CreateCursorOn(locChildCursor.Clone() as IObjectCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects));
FMessageCursor.Reset();
locSrvcCrs := FServiceCursor.Clone() as IObjectCursor;
while locSrvcCrs.MoveNext() do begin
locObj := locSrvcCrs.GetCurrent() as TDOMNodeRttiExposer;
ParseService(locObj.InnerObject);
end;
finally
locFltrCreator.Free();
end;
FMessageCursor := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_message,FWsdlShortNames),TDOMNodeRttiExposer)
);
FMessageCursor.Reset();
end;
procedure TWsdlParser.ParseService(ANode: TDOMNode);
var
locFltrCreator : TRttiFilterCreator;
locCursor, locPortCursor : IObjectCursor;
locObj : TDOMNodeRttiExposer;
begin
locFltrCreator := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
CreateWsdlNameFilter(locFltrCreator,s_port);
locCursor := CreateChildrenCursor(ANode,cetRttiNode);
if Assigned(locCursor) then begin
locPortCursor := CreateCursorOn(locCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrFreeObjects));
locFltrCreator.Clear(clrNone);
locPortCursor.Reset();
while locPortCursor.MoveNext() do begin
locObj := locPortCursor.GetCurrent() as TDOMNodeRttiExposer;
ParsePort(locObj.InnerObject);
end;
locCursor := CreateChildrenCursor(ANode,cetRttiNode);
if Assigned(locCursor) then begin
locPortCursor := CreateCursorOn(
locCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_port,FWsdlShortNames),TDOMNodeRttiExposer)
);
locPortCursor.Reset();
while locPortCursor.MoveNext() do begin
locObj := locPortCursor.GetCurrent() as TDOMNodeRttiExposer;
ParsePort(locObj.InnerObject);
end;
finally
locFltrCreator.Free();
end;
end;
@ -488,26 +456,16 @@ procedure TWsdlParser.ParsePort(ANode: TDOMNode);
function ExtractBindingQName(out AName : WideString):Boolean ;
var
attCrs, crs : IObjectCursor;
fltrCreator : TRttiFilterCreator;
s : string;
begin
Result := False;
attCrs := CreateAttributesCursor(ANode,cetRttiNode);
if Assigned(attCrs) then begin
fltrCreator := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
s := s_NODE_NAME;
fltrCreator.AddCondition(s,sfoEqualCaseInsensitive,s_binding,fcNone);
crs := CreateCursorOn(attCrs,TRttiObjectFilter.Create(fltrCreator.Root,clrNone));
crs.Reset();
if crs.MoveNext() then begin
AName := TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue;
Result := True;
exit;
end;
finally
fltrCreator.Clear(clrFreeObjects);
FreeAndNil(fltrCreator);
crs := CreateCursorOn(attCrs,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_binding)]),TDOMNodeRttiExposer));
crs.Reset();
if crs.MoveNext() then begin
AName := TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue;
Result := True;
exit;
end;
end;
end;
@ -515,26 +473,16 @@ procedure TWsdlParser.ParsePort(ANode: TDOMNode);
function ExtractTypeQName(ABndgNode : TDOMNode; out AName : WideString):Boolean ;
var
attCrs, crs : IObjectCursor;
fltrCreator : TRttiFilterCreator;
s : string;
begin
Result := False;
attCrs := CreateAttributesCursor(ABndgNode,cetRttiNode);
if Assigned(attCrs) then begin
fltrCreator := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
s := s_NODE_NAME;
fltrCreator.AddCondition(s,sfoEqualCaseInsensitive,s_type,fcNone);
crs := CreateCursorOn(attCrs,TRttiObjectFilter.Create(fltrCreator.Root,clrNone));
crs.Reset();
if crs.MoveNext() then begin
AName := TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue;
Result := True;
exit;
end;
finally
fltrCreator.Clear(clrFreeObjects);
FreeAndNil(fltrCreator);
crs := CreateCursorOn(attCrs,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_type)]),TDOMNodeRttiExposer));
crs.Reset();
if crs.MoveNext() then begin
AName := TDOMNodeRttiExposer(crs.GetCurrent()).NodeValue;
Result := True;
exit;
end;
end;
end;
@ -544,10 +492,36 @@ procedure TWsdlParser.ParsePort(ANode: TDOMNode);
Result := FindNamedNode(FPortTypeCursor,AName);
end;
function ExtractAddress() : string;
var
tmpCrs : IObjectCursor;
nd : TDOMNode;
begin
Result := '';
if ANode.HasChildNodes() then begin
tmpCrs := CreateCursorOn(
CreateChildrenCursor(ANode,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_address,FSoapShortNames),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
tmpCrs := CreateCursorOn(
CreateAttributesCursor(nd,cetRttiNode),
ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_location)]),TDOMNodeRttiExposer)
);
if Assigned(tmpCrs) and tmpCrs.MoveNext() then begin
Result := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).NodeValue;
end;
end;
end;
end;
var
bindingName, typeName : WideString;
i : Integer;
bindingNode, typeNode : TDOMNode;
intfDef : TInterfaceDefinition;
begin
if ExtractBindingQName(bindingName) then begin
i := Pos(':',bindingName);
@ -559,14 +533,15 @@ begin
typeName := Copy(typeName,( i + 1 ), MaxInt);
typeNode := FindTypeNode(typeName);
if Assigned(typeNode) then begin
ParsePortType(typeNode,bindingNode);
intfDef := ParsePortType(typeNode,bindingNode);
intfDef.Address := ExtractAddress();
end;
end;
end;
end;
end;
procedure TWsdlParser.ParsePortType(ANode, ABindingNode : TDOMNode);
function TWsdlParser.ParsePortType(ANode, ABindingNode : TDOMNode) : TInterfaceDefinition;
function ExtractSoapBindingStyle(out AName : WideString):Boolean ;
var
@ -596,56 +571,83 @@ procedure TWsdlParser.ParsePortType(ANode, ABindingNode : TDOMNode);
end;
end;
function ExtractBindingOperationCursor() : IObjectCursor ;
begin
Result := nil;
if ABindingNode.HasChildNodes() then begin
Result := CreateCursorOn(
CreateChildrenCursor(ABindingNode,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_operation,FWsdlShortNames),TDOMNodeRttiExposer)
);
end;
end;
procedure ParseOperationAtt_SoapAction(ABndngOpCurs : IObjectCursor; AOp : TMethodDefinition);
var
nd : TDOMNode;
tmpCrs : IObjectCursor;
begin
nd := FindNamedNode(ABndngOpCurs,AOp.ExternalName);
if Assigned(nd) and nd.HasChildNodes() then begin
tmpCrs := CreateCursorOn(
CreateChildrenCursor(nd,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_operation,FSoapShortNames),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
if Assigned(nd.Attributes) and ( nd.Attributes.Length > 0 ) then begin
tmpCrs := CreateCursorOn(
CreateAttributesCursor(nd,cetRttiNode),
ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_soapAction)]),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
nd := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
AOp.Properties.Values[s_soapAction] := nd.NodeValue;
end;
end;
end;
end;
end;
var
locIntf : TInterfaceDefinition;
locAttCursor : IObjectCursor;
locFltrCreator : TRttiFilterCreator;
locCursor, locOpCursor : IObjectCursor;
locCursor, locOpCursor, locBindingOperationCursor : IObjectCursor;
locObj : TDOMNodeRttiExposer;
i : Integer;
locStrBuffer, locSoapBindingStyle : string;
locSoapBindingStyle : string;
locWStrBuffer : WideString;
locMthd : TMethodDefinition;
begin
locAttCursor := CreateAttributesCursor(ANode,cetRttiNode);
locFltrCreator := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
locCursor := CreateCursorOn(locAttCursor,ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_name)]),TDOMNodeRttiExposer));
locCursor.Reset();
if not locCursor.MoveNext() then
raise EWslParserException.CreateFmt('PortType Attribute not found : "%s"',[s_name]);
locObj := locCursor.GetCurrent() as TDOMNodeRttiExposer;
locIntf := TInterfaceDefinition.Create(locObj.NodeValue);
try
locStrBuffer := s_NODE_NAME;
locFltrCreator.AddCondition(locStrBuffer,sfoEqualCaseInsensitive,s_name,fcNone);
locCursor := CreateCursorOn(locAttCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrNone));
locCursor.Reset();
if not locCursor.MoveNext() then
raise EWslParserException.CreateFmt('PortType Attribute not found : "%s"',[s_name]);
locObj := locCursor.GetCurrent() as TDOMNodeRttiExposer;
locIntf := TInterfaceDefinition.Create(locObj.NodeValue);
try
FSymbols.Add(locIntf);
except
FreeAndNil(locIntf);
raise;
end;
locCursor := CreateChildrenCursor(ANode,cetRttiNode);
if Assigned(locCursor) then begin
locFltrCreator.Clear(clrFreeObjects);
for i := 0 to Pred(FWsdlShortNames.Count) do begin
if IsStrEmpty(FWsdlShortNames[i]) then
locWStrBuffer := ''
else
locWStrBuffer := FWsdlShortNames[i] + ':';
locWStrBuffer := locWStrBuffer + s_operation;
locStrBuffer := s_NODE_NAME;
locFltrCreator.AddCondition(locStrBuffer,sfoEqualCaseInsensitive,locWStrBuffer,fcOr);
end;
locOpCursor := CreateCursorOn(locCursor,TRttiObjectFilter.Create(locFltrCreator.Root,clrNone));
locOpCursor.Reset();
ExtractSoapBindingStyle(locWStrBuffer);
locSoapBindingStyle := locWStrBuffer;
while locOpCursor.MoveNext() do begin
locObj := locOpCursor.GetCurrent() as TDOMNodeRttiExposer;
ParseOperation(locIntf,locObj.InnerObject,locSoapBindingStyle);
FSymbols.Add(locIntf);
except
FreeAndNil(locIntf);
raise;
end;
Result := locIntf;
locCursor := CreateChildrenCursor(ANode,cetRttiNode);
if Assigned(locCursor) then begin
locOpCursor := CreateCursorOn(locCursor,ParseFilter(CreateQualifiedNameFilterStr(s_operation,FWsdlShortNames),TDOMNodeRttiExposer));
locOpCursor.Reset();
ExtractSoapBindingStyle(locWStrBuffer);
locSoapBindingStyle := locWStrBuffer;
locBindingOperationCursor := ExtractBindingOperationCursor();
while locOpCursor.MoveNext() do begin
locObj := locOpCursor.GetCurrent() as TDOMNodeRttiExposer;
locMthd := ParseOperation(locIntf,locObj.InnerObject,locSoapBindingStyle);
if Assigned(locMthd) then begin
ParseOperationAtt_SoapAction(locBindingOperationCursor,locMthd);
end;
end;
finally
locFltrCreator.Free();
end;
end;
@ -679,11 +681,11 @@ begin
inherited;
end;
procedure TWsdlParser.ParseOperation(
function TWsdlParser.ParseOperation(
AOwner : TInterfaceDefinition;
ANode : TDOMNode;
const ASoapBindingStyle : string
);
) : TMethodDefinition;
function ExtractOperationName(out AName : string):Boolean;
var
@ -875,7 +877,7 @@ procedure TWsdlParser.ParseOperation(
end;
end;
if ( SameText(ASoapBindingStyle,s_rpc) and
( prmDef <> nil ) and SameText(prmDef.Name,s_return) and
( prmDef <> nil ) and ( prmDef.Modifier = pmOut ) and//and SameText(prmDef.Name,s_return) and
( prmDef = tmpMthd.Parameter[Pred(tmpMthd.ParameterCount)] )
) or
( SameText(ASoapBindingStyle,s_document) and
@ -909,6 +911,8 @@ var
locMthd : TMethodDefinition;
mthdName : string;
begin
Result := nil;
locMthd := nil;
if not ExtractOperationName(mthdName) then
raise EWslParserException.CreateFmt('Operation Attribute not found : "%s"',[s_name]);
if SameText(s_document,ASoapBindingStyle) then begin
@ -920,6 +924,7 @@ begin
if ( locMthd <> nil ) then
AOwner.AddMethod(locMthd);
end;
Result := locMthd;
end;
function TWsdlParser.ParseType(const AName, ATypeOrElement: string): TTypeDefinition;
@ -1083,10 +1088,44 @@ procedure TWsdlParser.Parse();
end;
end;
end;
procedure ExtractNameSpace();
var
tmpCrs : IObjectCursor;
nd : TDOMNode;
s : string;
begin
nd := FDoc.DocumentElement;
if Assigned(nd.Attributes) and ( nd.Attributes.Length > 0 ) then begin
tmpCrs := CreateCursorOn(
CreateAttributesCursor(nd,cetRttiNode),
ParseFilter(Format('%s = %s',[s_NODE_NAME,QuotedStr(s_targetNamespace)]),TDOMNodeRttiExposer)
);
tmpCrs.Reset();
if tmpCrs.MoveNext() then begin
s := (tmpCrs.GetCurrent() as TDOMNodeRttiExposer).NodeValue;
if not IsStrEmpty(s) then begin
FSymbols.RegisterExternalAlias(s);
end;
end;
end;
end;
var
locSrvcCrs : IObjectCursor;
locObj : TDOMNodeRttiExposer;
begin
Prepare();
locSrvcCrs := FServiceCursor.Clone() as IObjectCursor;
locSrvcCrs.Reset();
while locSrvcCrs.MoveNext() do begin
locObj := locSrvcCrs.GetCurrent() as TDOMNodeRttiExposer;
ParseService(locObj.InnerObject);
end;
ParseForwardDeclarations();
ExtractNameSpace();
end;
{ TAbstractTypeParser }
@ -1375,7 +1414,8 @@ var
TArrayDefinition.Create(
Format('%s_%sArray',[AClassName,locPropTyp.Name]),
locPropTyp.DataType,
locPropTyp.Name
locPropTyp.Name,
locPropTyp.ExternalName
)
);
end;
@ -1440,7 +1480,7 @@ var
end;
if not locSym.InheritsFrom(TTypeDefinition) then
raise EWslParserException.CreateFmt('Invalid array type definition, invalid item type definition : "%s".',[FTypeName]);
Result := TArrayDefinition.Create(AInternalName,locSym as TTypeDefinition,s_item);
Result := TArrayDefinition.Create(AInternalName,locSym as TTypeDefinition,s_item,s_item);
if AHasInternalName then
Result.RegisterExternalAlias(ATypeName);
end;
@ -1493,7 +1533,7 @@ begin
Result := nil;
propTyp := arrayItems[0] as TPropertyDefinition;
//arrayDef := TArrayDefinition.Create(internalName,(arrayItemType as TTypeDefinition),arrayItemName);
arrayDef := TArrayDefinition.Create(internalName,propTyp.DataType,propTyp.Name);
arrayDef := TArrayDefinition.Create(internalName,propTyp.DataType,propTyp.Name,propTyp.ExternalName);
FreeAndNil(classDef);
Result := arrayDef;
if hasInternalName then
@ -1748,74 +1788,60 @@ end;
procedure TSimpleTypeParser.ExtractContentType();
var
locCrs, locAttCrs : IObjectCursor;
fltrCtr : TRttiFilterCreator;
tmpNode : TDOMNode;
begin
fltrCtr := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
CreateQualifiedNameFilter(fltrCtr,s_restriction,FOwner.FXSShortNames);
locCrs := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,TRttiObjectFilter.Create(fltrCtr.Root,clrFreeObjects)
);
locCrs.Reset();
if locCrs.MoveNext() then begin
FRestrictionNode := (locCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
tmpNode := nil;
locAttCrs := CreateAttributesCursor(FRestrictionNode,cetRttiNode);
if Assigned(locAttCrs) then begin
locAttCrs := CreateCursorOn(locAttCrs,ParseFilter(Format('%s=%s',[s_NODE_NAME,QuotedStr(s_base)]),TDOMNodeRttiExposer));
locAttCrs.Reset();
if locAttCrs.MoveNext() then begin
tmpNode := (locAttCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
end;
locCrs := CreateCursorOn(
FChildCursor.Clone() as IObjectCursor,
ParseFilter(CreateQualifiedNameFilterStr(s_restriction,FOwner.FXSShortNames),TDOMNodeRttiExposer)
);
locCrs.Reset();
if locCrs.MoveNext() then begin
FRestrictionNode := (locCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
tmpNode := nil;
locAttCrs := CreateAttributesCursor(FRestrictionNode,cetRttiNode);
if Assigned(locAttCrs) then begin
locAttCrs := CreateCursorOn(locAttCrs,ParseFilter(Format('%s=%s',[s_NODE_NAME,QuotedStr(s_base)]),TDOMNodeRttiExposer));
locAttCrs.Reset();
if locAttCrs.MoveNext() then begin
tmpNode := (locAttCrs.GetCurrent() as TDOMNodeRttiExposer).InnerObject;
end;
FBaseName := '';
if Assigned(tmpNode) then begin
FBaseName := ExtractNameFromQName(tmpNode.NodeValue);
end;
fltrCtr.Clear(clrNone);
CreateQualifiedNameFilter(fltrCtr,s_enumeration,FOwner.FXSShortNames);
locCrs := CreateChildrenCursor(FRestrictionNode,cetRttiNode) as IObjectCursor;
if Assigned(locCrs) then begin
locCrs.Reset();
if locCrs.MoveNext() then begin
FIsEnum := True;
end else begin
if IsStrEmpty(FBaseName) then
raise EWslParserException.CreateFmt('Base type is not specified for the simple type, parsing : "%s".',[FTypeName]);
FIsEnum := False
end;
end;
FBaseName := '';
if Assigned(tmpNode) then begin
FBaseName := ExtractNameFromQName(tmpNode.NodeValue);
end;
locCrs := CreateChildrenCursor(FRestrictionNode,cetRttiNode) as IObjectCursor;
if Assigned(locCrs) then begin
locCrs := CreateCursorOn(
locCrs,
ParseFilter(CreateQualifiedNameFilterStr(s_enumeration,FOwner.FXSShortNames),TDOMNodeRttiExposer)
);
locCrs.Reset();
if locCrs.MoveNext() then begin
FIsEnum := True;
end else begin
if IsStrEmpty(FBaseName) then
raise EWslParserException.CreateFmt('Base type is not specified for the simple type, parsing : "%s".',[FTypeName]);
FIsEnum := False
end;
end else begin
raise EWslParserException.CreateFmt('The parser only support "Restriction" mode simple type derivation, parsing : "%s".',[FTypeName]);
if IsStrEmpty(FBaseName) then
raise EWslParserException.CreateFmt('Base type is not specified for the simple type, parsing : "%s".',[FTypeName]);
FIsEnum := False
end;
finally
fltrCtr.Clear(clrNone);
FreeAndNil(fltrCtr);
end else begin
raise EWslParserException.CreateFmt('The parser only support "Restriction" mode simple type derivation, parsing : "%s".',[FTypeName]);
end;
end;
function TSimpleTypeParser.ParseEnumContent(): TTypeDefinition;
function ExtractEnumCursor():IObjectCursor ;
var
fltrCtr : TRttiFilterCreator;
begin
fltrCtr := TRttiFilterCreator.Create(TDOMNodeRttiExposer);
try
CreateQualifiedNameFilter(fltrCtr,s_enumeration,FOwner.FXSShortNames);
Result := CreateCursorOn(
CreateChildrenCursor(FRestrictionNode,cetRttiNode),
TRttiObjectFilter.Create(fltrCtr.Root,clrFreeObjects)
);
finally
fltrCtr.Clear(clrNone);
FreeAndNil(fltrCtr);
end;
Result := CreateCursorOn(
CreateChildrenCursor(FRestrictionNode,cetRttiNode),
ParseFilter(CreateQualifiedNameFilterStr(s_enumeration,FOwner.FXSShortNames),TDOMNodeRttiExposer)
);
end;
var