Test for "record" marshaling.

git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@3862 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
inoussa
2015-01-03 13:35:44 +00:00
parent a9a772e219
commit c4849d7583
11 changed files with 382 additions and 664 deletions

View File

@ -1,24 +1,26 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<Version Value="9"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/>
<General> <General>
<Flags> <Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/> <MainUnitHasTitleStatement Value="False"/>
<LRSInOutputDirectory Value="False"/>
</Flags> </Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="0"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/>
<Language Value=""/> <Language Value=""/>
<CharSet Value=""/> <CharSet Value=""/>
<StringTable ProductVersion=""/>
</VersionInfo> </VersionInfo>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
</BuildModes>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
<IgnoreBinaries Value="False"/> <IgnoreBinaries Value="False"/>
@ -31,185 +33,40 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="16"> <Units Count="2">
<Unit0> <Unit0>
<Filename Value="record_client.pas"/> <Filename Value="record_client.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="record_client"/> <UnitName Value="record_client"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="0"/>
<UsageCount Value="35"/>
<Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="..\record_sample.pas"/>
<UnitName Value="record_sample"/>
<CursorPos X="53" Y="16"/>
<TopLine Value="13"/>
<EditorIndex Value="9"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="..\record_sample_proxy.pas"/>
<UnitName Value="record_sample_proxy"/>
<CursorPos X="1" Y="56"/>
<TopLine Value="41"/>
<EditorIndex Value="8"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit2>
<Unit3>
<Filename Value="..\record_sample.wst"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="9"/>
<SyntaxHighlighter Value="None"/>
</Unit3>
<Unit4>
<Filename Value="..\..\..\synapse_http_protocol.pas"/>
<UnitName Value="synapse_http_protocol"/>
<CursorPos X="1" Y="16"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\wst_types.pas"/> <Filename Value="..\..\..\wst_types.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wst_types"/> <UnitName Value="wst_types"/>
<CursorPos X="1" Y="1"/> </Unit1>
<TopLine Value="1"/>
<EditorIndex Value="7"/>
<UsageCount Value="35"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="4"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\soap_formatter.pas"/>
<UnitName Value="soap_formatter"/>
<CursorPos X="1" Y="188"/>
<TopLine Value="173"/>
<EditorIndex Value="1"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\imp_utils.pas"/>
<UnitName Value="imp_utils"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="5"/>
<UsageCount Value="18"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\classes\classesh.inc"/>
<CursorPos X="15" Y="513"/>
<TopLine Value="498"/>
<UsageCount Value="9"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\classes\stringl.inc"/>
<CursorPos X="54" Y="230"/>
<TopLine Value="222"/>
<UsageCount Value="9"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\strutils.pp"/>
<UnitName Value="strutils"/>
<CursorPos X="21" Y="32"/>
<TopLine Value="163"/>
<UsageCount Value="9"/>
</Unit13>
<Unit14>
<Filename Value="..\..\..\service_intf.pas"/>
<UnitName Value="service_intf"/>
<CursorPos X="1" Y="220"/>
<TopLine Value="205"/>
<UsageCount Value="10"/>
</Unit14>
<Unit15>
<Filename Value="..\..\..\indy_http_protocol.pas"/>
<UnitName Value="indy_http_protocol"/>
<CursorPos X="15" Y="35"/>
<TopLine Value="20"/>
<UsageCount Value="10"/>
</Unit15>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="11"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Target>
<Filename Value="record_client"/>
</Target>
<SearchPaths> <SearchPaths>
<IncludeFiles Value="..\..\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc\"/> <IncludeFiles Value="..\..;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc"/>
<OtherUnitFiles Value="..\;..\..\;..\..\..\;$(LazarusDir)\others_package\synapse\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Core\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Protocols\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\System\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc\"/> <OtherUnitFiles Value="..;..\..;..\..\.."/>
<UnitOutputDirectory Value="obj"/> <UnitOutputDirectory Value="obj"/>
<SrcPath Value="$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Core\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Protocols\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\System\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc\"/>
</SearchPaths> </SearchPaths>
<CodeGeneration> <Parsing>
<Generate Value="Faster"/> <SyntaxOptions>
</CodeGeneration> <UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<Other> <Other>
<CompilerPath Value="$(CompPath)"/> <CompilerPath Value="$(CompPath)"/>
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<BreakPoints Count="6">
<Item1>
<Source Value="..\..\..\metadata_wsdl.pas"/>
<Line Value="459"/>
</Item1>
<Item2>
<Source Value="..\..\..\metadata_wsdl.pas"/>
<Line Value="468"/>
</Item2>
<Item3>
<Source Value="..\..\..\metadata_wsdl.pas"/>
<Line Value="431"/>
</Item3>
<Item4>
<Source Value="..\..\..\server_service_intf.pas"/>
<Line Value="630"/>
</Item4>
<Item5>
<Source Value="..\..\..\base_service_intf.pas"/>
<Line Value="4634"/>
</Item5>
<Item6>
<Source Value="..\..\..\base_service_intf.pas"/>
<Line Value="4711"/>
</Item6>
</BreakPoints>
<Exceptions Count="2"> <Exceptions Count="2">
<Item1> <Item1>
<Name Value="ECodetoolError"/> <Name Value="ECodetoolError"/>

View File

@ -5,8 +5,7 @@ program record_client;
uses uses
Classes, SysUtils, {$IFDEF WINDOWS}ActiveX,{$ENDIF} Classes, SysUtils, {$IFDEF WINDOWS}ActiveX,{$ENDIF}
soap_formatter, soap_formatter,
synapse_http_protocol, fpc_http_protocol,
//indy_http_protocol,
metadata_repository, metadata_repository,
record_sample, record_sample_proxy; record_sample, record_sample_proxy;
@ -52,14 +51,13 @@ var
locService : RecordService; locService : RecordService;
A : RecordA; A : RecordA;
B : RecordB; B : RecordB;
C : RecordC; D, C : RecordC;
begin begin
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
CoInitialize(nil); CoInitialize(nil);
try try
{$ENDIF} {$ENDIF}
SYNAPSE_RegisterHTTP_Transport(); FPC_RegisterHTTP_Transport();
//INDY_RegisterHTTP_Transport();
WriteLn('Web Services Toolkit Record sample'); WriteLn('Web Services Toolkit Record sample');
WriteLn('This sample demonstrates the Object Pascal "Record" support by WST'); WriteLn('This sample demonstrates the Object Pascal "Record" support by WST');
WriteLn(); WriteLn();
@ -86,16 +84,16 @@ begin
WriteLn(' comment : ',B.comment); WriteLn(' comment : ',B.comment);
WriteLn(); WriteLn();
WriteLn; WriteLn;
C := locService.AddRec(A,B,C); D := locService.AddRec(A,B,C);
WriteLn; WriteLn;
WriteLn('Response ( C ) : '); WriteLn('Response ( D ) : ');
WriteLn(' intField : ',C.intField); WriteLn(' intField : ',D.intField);
WriteLn(' RecordField.intField : ',C.RecordField.intField); WriteLn(' RecordField.intField : ',D.RecordField.intField);
WriteLn(' RecordField.singleField : ',C.RecordField.singleField); WriteLn(' RecordField.singleField : ',D.RecordField.singleField);
WriteLn(' RecordField.singleField : ',C.RecordField.comment); WriteLn(' RecordField.singleField : ',D.RecordField.comment);
WriteLn(' RecordField.RecordField.fieldA : ',C.RecordField.RecordField.fieldA); WriteLn(' RecordField.RecordField.fieldA : ',D.RecordField.RecordField.fieldA);
WriteLn(' RecordField.RecordField.fieldB : ',C.RecordField.RecordField.fieldB); WriteLn(' RecordField.RecordField.fieldB : ',D.RecordField.RecordField.fieldB);
WriteLn(' RecordField.RecordField.comment : ',C.RecordField.RecordField.comment); WriteLn(' RecordField.RecordField.comment : ',D.RecordField.RecordField.comment);
WriteLn(); WriteLn();
if ( UpperCase(ReadEntryStr('Continue ( Y/N ) :'))[1] <> 'Y' ) then if ( UpperCase(ReadEntryStr('Continue ( Y/N ) :'))[1] <> 'Y' ) then

View File

@ -1,33 +1,81 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="utf-8"?>
<definitions name="urn:record_sample" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:record_sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="urn:record_sample"> <definitions name="urn:record_sample" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:tns="urn:record_sample" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" targetNamespace="urn:record_sample">
<types> <types>
<xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:record_sample"> <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="urn:record_sample" xmlns:wst="urn:wst_base" xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:record_sample">
<xsd:complexType name="TRecordClass"> <xsd:complexType name="RecordA" wst:wst_record="true">
<xsd:sequence> <xsd:sequence>
<xsd:element name="fieldA" type="xsd:int" maxOccurs="1" minOccurs="1"/> <xsd:element name="fieldA" type="xsd:int"/>
<xsd:element name="fieldB" type="xsd:single" maxOccurs="1" minOccurs="1"/> <xsd:element name="fieldB" type="xsd:float"/>
<xsd:element name="comment" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="RecordB" wst:wst_record="true">
<xsd:sequence>
<xsd:element name="singleField" type="xsd:float"/>
<xsd:element name="intField" type="xsd:int"/>
<xsd:element name="comment" type="xsd:string"/>
<xsd:element name="RecordField" type="tns:RecordA"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="RecordC" wst:wst_record="true">
<xsd:sequence>
<xsd:element name="intField" type="xsd:int"/>
<xsd:element name="RecordField" type="tns:RecordB"/>
</xsd:sequence> </xsd:sequence>
</xsd:complexType> </xsd:complexType>
</xsd:schema> </xsd:schema>
</types> </types>
<message name="Add"><part name="AValue" type="tns:TRecordClass"/></message> <message name="Add">
<message name="AddResponse"><part name="result" type="xsd:long"/></message> <part name="AValue" type="tns:RecordA"/>
</message>
<message name="AddResponse">
<part name="result" type="tns:RecordB"/>
</message>
<message name="AddRec">
<part name="AA" type="tns:RecordA"/>
<part name="AB" type="tns:RecordB"/>
<part name="AC" type="tns:RecordC"/>
</message>
<message name="AddRecResponse">
<part name="result" type="tns:RecordC"/>
</message>
<portType name="RecordService"> <portType name="RecordService">
<document><GUID value="{E42B7653-4B50-4956-88B4-FBCEC57B667A}"/></document> <documentation>
<GUID value="{4CB555BD-B523-49BD-8861-496497B081DD}"/>
</documentation>
<operation name="Add"> <operation name="Add">
<input message="tns:Add"/> <input message="tns:Add"/>
<output message="tns:AddResponse"/> <output message="tns:AddResponse"/>
</operation> </operation>
<operation name="AddRec">
<input message="tns:AddRec"/>
<output message="tns:AddRecResponse"/>
</operation>
</portType> </portType>
<binding name="RecordServiceBinding" type="tns:RecordService"> <binding name="RecordServiceBinding" type="tns:RecordService">
<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="Add"> <operation name="Add">
<soap:operation soapAction=""/> <soap:operation soapAction=""/>
<input><soap:body use="literal" namespace="urn:record_sample"/></input> <input>
<output><soap:body use="literal" namespace="urn:record_sample"/></output> <soap:body use="literal" namespace="urn:record_sample"/>
</input>
<output>
<soap:body use="literal" namespace="urn:record_sample"/>
</output>
</operation>
<operation name="AddRec">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal" namespace="urn:record_sample"/>
</input>
<output>
<soap:body use="literal" namespace="urn:record_sample"/>
</output>
</operation> </operation>
</binding> </binding>
<service name="RecordService"> <service name="RecordService">
<port name="RecordServicePort" binding="tns:RecordServiceBinding"><soap:address location="http://127.0.0.1:20000"/></port> <port name="RecordServicePort" binding="tns:RecordServiceBinding">
<soap:address location="http://127.0.0.1:20000"/>
</port>
</service> </service>
</definitions> </definitions>

View File

@ -2,15 +2,13 @@
This unit has been produced by ws_helper. This unit has been produced by ws_helper.
Input unit name : "record_sample". Input unit name : "record_sample".
This unit name : "record_sample". This unit name : "record_sample".
Date : "26/08/2007 01:12:11". Date : "02/01/2015 23:42:08".
} }
unit record_sample; unit record_sample;
{$IFDEF FPC} {$IFDEF FPC}
{$mode objfpc} {$H+} {$mode objfpc} {$H+}
{$ENDIF} {$ENDIF}
{$IFNDEF FPC} {$DEFINE WST_RECORD_RTTI}
{$DEFINE WST_RECORD_RTTI}
{$ENDIF}
interface interface
uses SysUtils, Classes, TypInfo, base_service_intf, service_intf; uses SysUtils, Classes, TypInfo, base_service_intf, service_intf;
@ -21,22 +19,35 @@ const
type type
TRecordClass = class;
TRecordClass = class(TBaseComplexRemotable) RecordA = record
private fieldA : integer;
FfieldA : integer; fieldB : Single;
FfieldB : Single; comment : UnicodeString;
published end;
property fieldA : integer read FfieldA write FfieldA;
property fieldB : Single read FfieldB write FfieldB; RecordB = record
singleField : Single;
intField : integer;
comment : UnicodeString;
RecordField : RecordA;
end;
RecordC = record
intField : integer;
RecordField : RecordB;
end; end;
RecordService = interface(IInvokable) RecordService = interface(IInvokable)
['{E42B7653-4B50-4956-88B4-FBCEC57B667A}'] ['{4CB555BD-B523-49BD-8861-496497B081DD}']
function Add( function Add(
const AValue : TRecordClass const AValue : RecordA
):Int64; ):RecordB;
function AddRec(
const AA : RecordA;
const AB : RecordB;
const AC : RecordC
):RecordC;
end; end;
procedure Register_record_sample_ServiceMetadata(); procedure Register_record_sample_ServiceMetadata();
@ -84,12 +95,108 @@ begin
'FORMAT_OutputEncodingStyle', 'FORMAT_OutputEncodingStyle',
'literal' 'literal'
); );
mm.SetOperationCustomData(
sUNIT_NAME,
'RecordService',
'AddRec',
'_E_N_',
'AddRec'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'RecordService',
'AddRec',
'FORMAT_Input_EncodingStyle',
'literal'
);
mm.SetOperationCustomData(
sUNIT_NAME,
'RecordService',
'AddRec',
'FORMAT_OutputEncodingStyle',
'literal'
);
end; end;
initialization
GetTypeRegistry().Register(sNAME_SPACE,TypeInfo(TRecordClass),'TRecordClass');
{$IFDEF WST_RECORD_RTTI}
function __RecordA_TYPEINFO_FUNC__() : PTypeInfo;
var
p : ^RecordA;
r : RecordA;
begin
p := @r;
Result := MakeRawTypeInfo(
'RecordA',
SizeOf(RecordA),
[ PtrUInt(@(p^.fieldA)) - PtrUInt(p), PtrUInt(@(p^.fieldB)) - PtrUInt(p), PtrUInt(@(p^.comment)) - PtrUInt(p) ],
[ TypeInfo(integer), TypeInfo(Single), TypeInfo(UnicodeString) ]
);
end;
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
function __RecordB_TYPEINFO_FUNC__() : PTypeInfo;
var
p : ^RecordB;
r : RecordB;
begin
p := @r;
Result := MakeRawTypeInfo(
'RecordB',
SizeOf(RecordB),
[ PtrUInt(@(p^.singleField)) - PtrUInt(p), PtrUInt(@(p^.intField)) - PtrUInt(p), PtrUInt(@(p^.comment)) - PtrUInt(p), PtrUInt(@(p^.RecordField)) - PtrUInt(p) ],
[ TypeInfo(Single), TypeInfo(integer), TypeInfo(UnicodeString), TypeInfo(RecordA) ]
);
end;
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
function __RecordC_TYPEINFO_FUNC__() : PTypeInfo;
var
p : ^RecordC;
r : RecordC;
begin
p := @r;
Result := MakeRawTypeInfo(
'RecordC',
SizeOf(RecordC),
[ PtrUInt(@(p^.intField)) - PtrUInt(p), PtrUInt(@(p^.RecordField)) - PtrUInt(p) ],
[ TypeInfo(integer), TypeInfo(RecordB) ]
);
end;
{$ENDIF WST_RECORD_RTTI}
var
typeRegistryInstance : TTypeRegistry = nil;
initialization
typeRegistryInstance := GetTypeRegistry();
typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(RecordA),'RecordA').RegisterExternalPropertyName('__FIELDS__','fieldA;fieldB;comment');
{$IFNDEF WST_RECORD_RTTI}
typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordA)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(RecordA)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordA)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordA)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__RecordA_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordA)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(RecordB),'RecordB').RegisterExternalPropertyName('__FIELDS__','singleField;intField;comment;RecordField');
{$IFNDEF WST_RECORD_RTTI}
typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordB)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(RecordB)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordB)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordB)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__RecordB_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordB)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
typeRegistryInstance.Register(sNAME_SPACE,TypeInfo(RecordC),'RecordC').RegisterExternalPropertyName('__FIELDS__','intField;RecordField');
{$IFNDEF WST_RECORD_RTTI}
typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordC)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(TypeInfo(RecordC)),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordC)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
{$IFDEF WST_RECORD_RTTI}
typeRegistryInstance.ItemByTypeInfo[TypeInfo(RecordC)].RegisterObject(FIELDS_STRING,TRecordRttiDataObject.Create(MakeRecordTypeInfo(__RecordC_TYPEINFO_FUNC__()),GetTypeRegistry().ItemByTypeInfo[TypeInfo(RecordC)].GetExternalPropertyName('__FIELDS__')));
{$ENDIF WST_RECORD_RTTI}
End. End.

View File

@ -2,7 +2,7 @@
This unit has been produced by ws_helper. This unit has been produced by ws_helper.
Input unit name : "record_sample". Input unit name : "record_sample".
This unit name : "record_sample_binder". This unit name : "record_sample_binder".
Date : "26/08/2007 01:12:11". Date : "02/01/2015 23:42:08".
} }
unit record_sample_binder; unit record_sample_binder;
{$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF} {$IFDEF FPC} {$mode objfpc}{$H+} {$ENDIF}
@ -10,16 +10,17 @@ interface
uses SysUtils, Classes, base_service_intf, server_service_intf, record_sample; uses SysUtils, Classes, base_service_intf, server_service_intf, record_sample;
type type
TRecordService_ServiceBinder = class(TBaseServiceBinder) TRecordService_ServiceBinder = class(TBaseServiceBinder)
protected protected
procedure AddHandler(AFormatter : IFormatterResponse; AContext : ICallContext); procedure AddHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
procedure AddRecHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
public public
constructor Create(); constructor Create();
end; end;
type
TRecordService_ServiceBinderFactory = class(TInterfacedObject,IItemFactory) TRecordService_ServiceBinderFactory = class(TInterfacedObject,IItemFactory)
private private
FInstance : IInterface; FInstance : IInterface;
@ -43,17 +44,14 @@ var
hasObjCntrl : Boolean; hasObjCntrl : Boolean;
tmpObj : RecordService; tmpObj : RecordService;
callCtx : ICallContext; callCtx : ICallContext;
strPrmName : string; locStrPrmName : string;
procName,trgName : string; procName,trgName : string;
AValue : TRecordClass; AValue : RecordA;
returnVal : Int64; returnVal : RecordB;
begin begin
callCtx := AContext; callCtx := AContext;
Fillchar(AValue,SizeOf(TRecordClass),#0);
strPrmName := 'AValue'; AFormatter.Get(TypeInfo(TRecordClass),strPrmName,AValue); locStrPrmName := 'AValue'; AFormatter.Get(TypeInfo(RecordA),locStrPrmName,AValue);
if Assigned(Pointer(AValue)) then
callCtx.AddObjectToFree(TObject(AValue));
tmpObj := Self.GetFactory().CreateInstance() as RecordService; tmpObj := Self.GetFactory().CreateInstance() as RecordService;
if Supports(tmpObj,ICallControl,cllCntrl) then if Supports(tmpObj,ICallControl,cllCntrl) then
@ -68,7 +66,51 @@ begin
trgName := AFormatter.GetCallTarget(); trgName := AFormatter.GetCallTarget();
AFormatter.Clear(); AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName); AFormatter.BeginCallResponse(procName,trgName);
AFormatter.Put('result',TypeInfo(Int64),returnVal); AFormatter.Put('result',TypeInfo(RecordB),returnVal);
AFormatter.EndCallResponse();
callCtx := nil;
finally
if hasObjCntrl then
objCntrl.Deactivate();
Self.GetFactory().ReleaseInstance(tmpObj);
end;
end;
procedure TRecordService_ServiceBinder.AddRecHandler(AFormatter : IFormatterResponse; AContext : ICallContext);
var
cllCntrl : ICallControl;
objCntrl : IObjectControl;
hasObjCntrl : Boolean;
tmpObj : RecordService;
callCtx : ICallContext;
locStrPrmName : string;
procName,trgName : string;
AA : RecordA;
AB : RecordB;
AC : RecordC;
returnVal : RecordC;
begin
callCtx := AContext;
locStrPrmName := 'AA'; AFormatter.Get(TypeInfo(RecordA),locStrPrmName,AA);
locStrPrmName := 'AB'; AFormatter.Get(TypeInfo(RecordB),locStrPrmName,AB);
locStrPrmName := 'AC'; AFormatter.Get(TypeInfo(RecordC),locStrPrmName,AC);
tmpObj := Self.GetFactory().CreateInstance() as RecordService;
if Supports(tmpObj,ICallControl,cllCntrl) then
cllCntrl.SetCallContext(callCtx);
hasObjCntrl := Supports(tmpObj,IObjectControl,objCntrl);
if hasObjCntrl then
objCntrl.Activate();
try
returnVal := tmpObj.AddRec(AA,AB,AC);
procName := AFormatter.GetCallProcedureName();
trgName := AFormatter.GetCallTarget();
AFormatter.Clear();
AFormatter.BeginCallResponse(procName,trgName);
AFormatter.Put('result',TypeInfo(RecordC),returnVal);
AFormatter.EndCallResponse(); AFormatter.EndCallResponse();
callCtx := nil; callCtx := nil;
@ -84,6 +126,7 @@ constructor TRecordService_ServiceBinder.Create();
begin begin
inherited Create(GetServiceImplementationRegistry().FindFactory('RecordService')); inherited Create(GetServiceImplementationRegistry().FindFactory('RecordService'));
RegisterVerbHandler('Add',{$IFDEF FPC}@{$ENDIF}AddHandler); RegisterVerbHandler('Add',{$IFDEF FPC}@{$ENDIF}AddHandler);
RegisterVerbHandler('AddRec',{$IFDEF FPC}@{$ENDIF}AddRecHandler);
end; end;

View File

@ -48,13 +48,16 @@ function TRecordService_ServiceImp.AddRec(
const AB : RecordB; const AB : RecordB;
const AC : RecordC const AC : RecordC
):RecordC; ):RecordC;
var
h,m,s,ms : Word;
Begin Begin
Result.RecordField.intField := 1234; DecodeTime(Now(),h,m,s,ms);
Result.RecordField.RecordField.fieldA := 0; Result.RecordField.intField := h;
Result.RecordField.RecordField.fieldB := 0; Result.RecordField.RecordField.fieldA := m;
Result.RecordField.RecordField.fieldB := s;
Result.intField := Trunc(AA.fieldA + AA.fieldB); Result.intField := Trunc(AA.fieldA + AA.fieldB);
Result.RecordField.singleField := AB.singleField + AB.intField; Result.RecordField.singleField := AB.singleField + AB.intField;
Result.RecordField.comment := 'Computed in AddRec().'; Result.RecordField.RecordField.comment := 'Computed in AddRec().';
End; End;

View File

@ -2,7 +2,7 @@
This unit has been produced by ws_helper. This unit has been produced by ws_helper.
Input unit name : "record_sample". Input unit name : "record_sample".
This unit name : "record_sample_proxy". This unit name : "record_sample_proxy".
Date : "26/08/2007 01:12:11". Date : "02/01/2015 23:42:08".
} }
Unit record_sample_proxy; Unit record_sample_proxy;
@ -18,19 +18,29 @@ Type
Protected Protected
class function GetServiceType() : PTypeInfo;override; class function GetServiceType() : PTypeInfo;override;
function Add( function Add(
const AValue : TRecordClass const AValue : RecordA
):Int64; ):RecordB;
function AddRec(
const AA : RecordA;
const AB : RecordB;
const AC : RecordC
):RecordC;
End; End;
Function wst_CreateInstance_RecordService(const AFormat : string = 'SOAP:'; const ATransport : string = 'HTTP:'):RecordService; Function wst_CreateInstance_RecordService(const AFormat : string = 'SOAP:'; const ATransport : string = 'HTTP:'; const AAddress : string = ''):RecordService;
Implementation Implementation
uses wst_resources_imp, metadata_repository; uses wst_resources_imp, metadata_repository;
Function wst_CreateInstance_RecordService(const AFormat : string; const ATransport : string):RecordService; Function wst_CreateInstance_RecordService(const AFormat : string; const ATransport : string; const AAddress : string):RecordService;
Var
locAdr : string;
Begin Begin
Result := TRecordService_Proxy.Create('RecordService',AFormat+GetServiceDefaultFormatProperties(TypeInfo(RecordService)),ATransport + 'address=' + GetServiceDefaultAddress(TypeInfo(RecordService))); locAdr := AAddress;
if ( locAdr = '' ) then
locAdr := GetServiceDefaultAddress(TypeInfo(RecordService));
Result := TRecordService_Proxy.Create('RecordService',AFormat+GetServiceDefaultFormatProperties(TypeInfo(RecordService)),ATransport + 'address=' + locAdr);
End; End;
{ TRecordService_Proxy implementation } { TRecordService_Proxy implementation }
@ -41,23 +51,55 @@ begin
end; end;
function TRecordService_Proxy.Add( function TRecordService_Proxy.Add(
const AValue : TRecordClass const AValue : RecordA
):Int64; ):RecordB;
Var Var
locSerializer : IFormatterClient; locSerializer : IFormatterClient;
strPrmName : string; locCallContext : ICallContext;
locStrPrmName : string;
Begin Begin
locCallContext := Self as ICallContext;
locSerializer := GetSerializer(); locSerializer := GetSerializer();
Try Try
locSerializer.BeginCall('Add', GetTarget(),(Self as ICallContext)); locSerializer.BeginCall('Add', GetTarget(),locCallContext);
locSerializer.Put('AValue', TypeInfo(TRecordClass), AValue); locSerializer.Put('AValue', TypeInfo(RecordA), AValue);
locSerializer.EndCall(); locSerializer.EndCall();
MakeCall(); MakeCall();
locSerializer.BeginCallRead((Self as ICallContext)); locSerializer.BeginCallRead(locCallContext);
strPrmName := 'result'; locStrPrmName := 'result';
locSerializer.Get(TypeInfo(Int64), strPrmName, Result); locSerializer.Get(TypeInfo(RecordB), locStrPrmName, Result);
Finally
locSerializer.Clear();
End;
End;
function TRecordService_Proxy.AddRec(
const AA : RecordA;
const AB : RecordB;
const AC : RecordC
):RecordC;
Var
locSerializer : IFormatterClient;
locCallContext : ICallContext;
locStrPrmName : string;
Begin
locCallContext := Self as ICallContext;
locSerializer := GetSerializer();
Try
locSerializer.BeginCall('AddRec', GetTarget(),locCallContext);
locSerializer.Put('AA', TypeInfo(RecordA), AA);
locSerializer.Put('AB', TypeInfo(RecordB), AB);
locSerializer.Put('AC', TypeInfo(RecordC), AC);
locSerializer.EndCall();
MakeCall();
locSerializer.BeginCallRead(locCallContext);
locStrPrmName := 'result';
locSerializer.Get(TypeInfo(RecordC), locStrPrmName, Result);
Finally Finally
locSerializer.Clear(); locSerializer.Clear();

View File

@ -1,24 +1,26 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<Version Value="9"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/>
<General> <General>
<Flags> <Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/> <MainUnitHasTitleStatement Value="False"/>
<LRSInOutputDirectory Value="False"/>
</Flags> </Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<IconPath Value="./"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="7"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/>
<Language Value=""/> <Language Value=""/>
<CharSet Value=""/> <CharSet Value=""/>
<StringTable ProductVersion=""/>
</VersionInfo> </VersionInfo>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
</BuildModes>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
<IgnoreBinaries Value="False"/> <IgnoreBinaries Value="False"/>
@ -31,203 +33,57 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="18"> <Units Count="5">
<Unit0> <Unit0>
<Filename Value="record_server.pas"/> <Filename Value="record_server.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="record_server"/> <UnitName Value="record_server"/>
<CursorPos X="34" Y="16"/>
<TopLine Value="4"/>
<EditorIndex Value="0"/>
<UsageCount Value="37"/>
<Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="..\..\..\indy_http_server.pas"/>
<UnitName Value="indy_http_server"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="12"/>
</Unit1>
<Unit2>
<Filename Value="..\..\..\wst_fpc_xml.pas"/>
<UnitName Value="wst_fpc_xml"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<UsageCount Value="13"/>
</Unit2>
<Unit3>
<Filename Value="..\record_sample_binder.pas"/> <Filename Value="..\record_sample_binder.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="record_sample_binder"/> <UnitName Value="record_sample_binder"/>
<CursorPos X="1" Y="1"/> </Unit1>
<TopLine Value="1"/> <Unit2>
<EditorIndex Value="7"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit3>
<Unit4>
<Filename Value="..\record_sample.pas"/> <Filename Value="..\record_sample.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="record_sample"/> <UnitName Value="record_sample"/>
<CursorPos X="1" Y="1"/> </Unit2>
<TopLine Value="1"/> <Unit3>
<EditorIndex Value="9"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\record_sample_proxy.pas"/>
<UnitName Value="record_sample_proxy"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="12"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\record_sample_imp.pas"/> <Filename Value="..\record_sample_imp.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="record_sample_imp"/> <UnitName Value="record_sample_imp"/>
<CursorPos X="52" Y="20"/> </Unit3>
<TopLine Value="1"/> <Unit4>
<EditorIndex Value="8"/>
<UsageCount Value="26"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\base_service_intf.pas"/>
<UnitName Value="base_service_intf"/>
<CursorPos X="38" Y="1227"/>
<TopLine Value="1216"/>
<EditorIndex Value="10"/>
<UsageCount Value="19"/>
<Bookmarks Count="1">
<Item0 X="3" Y="362" ID="1"/>
</Bookmarks>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\record_rtti.pas"/>
<UnitName Value="record_rtti"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="11"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\server_service_soap.pas"/>
<UnitName Value="server_service_soap"/>
<CursorPos X="17" Y="21"/>
<TopLine Value="1"/>
<EditorIndex Value="1"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\base_soap_formatter.pas"/>
<UnitName Value="base_soap_formatter"/>
<CursorPos X="21" Y="21"/>
<TopLine Value="1"/>
<EditorIndex Value="2"/>
<UsageCount Value="19"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysstrh.inc"/>
<CursorPos X="55" Y="89"/>
<TopLine Value="60"/>
<UsageCount Value="9"/>
</Unit11>
<Unit12>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\objpash.inc"/>
<CursorPos X="8" Y="75"/>
<TopLine Value="282"/>
<UsageCount Value="9"/>
</Unit12>
<Unit13>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="56" Y="39"/>
<TopLine Value="200"/>
<UsageCount Value="10"/>
</Unit13>
<Unit14>
<Filename Value="..\..\..\wst_global.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit14>
<Unit15>
<Filename Value="..\..\..\wst_types.pas"/> <Filename Value="..\..\..\wst_types.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="wst_types"/> <UnitName Value="wst_types"/>
<CursorPos X="14" Y="18"/> </Unit4>
<TopLine Value="10"/>
<EditorIndex Value="4"/>
<UsageCount Value="30"/>
<Loaded Value="True"/>
</Unit15>
<Unit16>
<Filename Value="..\..\..\wst.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="5"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit16>
<Unit17>
<Filename Value="..\..\..\wst_delphi.inc"/>
<CursorPos X="13" Y="1"/>
<TopLine Value="1"/>
<EditorIndex Value="6"/>
<UsageCount Value="13"/>
<Loaded Value="True"/>
</Unit17>
</Units> </Units>
<JumpHistory Count="0" HistoryIndex="-1"/>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="11"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Target>
<Filename Value="record_server"/>
</Target>
<SearchPaths> <SearchPaths>
<IncludeFiles Value="..\..\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc\"/> <IncludeFiles Value="..\.."/>
<OtherUnitFiles Value="..\;..\..\;..\..\..\;..\..\..\wst_rtti_filter\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Core\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Protocols\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\System\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc\"/> <OtherUnitFiles Value="..;..\..;..\..\..;..\..\..\wst_rtti_filter"/>
<UnitOutputDirectory Value="obj"/> <UnitOutputDirectory Value="obj"/>
<SrcPath Value="$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Core\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Protocols\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\System\;$(LazarusDir)\others_package\indy\indy-10.2.0.1\fpc\Inc\"/>
</SearchPaths> </SearchPaths>
<CodeGeneration> <Parsing>
<Generate Value="Faster"/> <SyntaxOptions>
</CodeGeneration> <UseAnsiStrings Value="False"/>
</SyntaxOptions>
</Parsing>
<Other> <Other>
<CustomOptions Value="-dINDY_10 <CustomOptions Value="-dINDY_10
-dUseCThreads -dUseCThreads"/>
"/>
<CompilerPath Value="$(CompPath)"/> <CompilerPath Value="$(CompPath)"/>
</Other> </Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<BreakPoints Count="4">
<Item1>
<Source Value="..\..\..\metadata_wsdl.pas"/>
<Line Value="459"/>
</Item1>
<Item2>
<Source Value="..\..\..\metadata_wsdl.pas"/>
<Line Value="468"/>
</Item2>
<Item3>
<Source Value="..\..\..\metadata_wsdl.pas"/>
<Line Value="431"/>
</Item3>
<Item4>
<Source Value="..\..\..\server_service_intf.pas"/>
<Line Value="630"/>
</Item4>
</BreakPoints>
<Exceptions Count="2"> <Exceptions Count="2">
<Item1> <Item1>
<Name Value="ECodetoolError"/> <Name Value="ECodetoolError"/>

View File

@ -7,7 +7,7 @@ uses
cthreads, cthreads,
{$ENDIF}{$ENDIF} {$ENDIF}{$ENDIF}
Classes, SysUtils, Classes, SysUtils,
indy_http_server, metadata_service, server_listener, fpc_http_server, metadata_service, server_listener,
server_service_soap, server_binary_formatter, server_service_xmlrpc, config_objects, server_service_soap, server_binary_formatter, server_service_xmlrpc, config_objects,
record_sample, record_sample_binder, record_sample_imp, record_rtti; record_sample, record_sample_binder, record_sample_imp, record_rtti;
@ -24,7 +24,7 @@ begin
//wst_CreateDefaultFile(wst_GetConfigFileName(),nil); //wst_CreateDefaultFile(wst_GetConfigFileName(),nil);
AppObject := TwstIndyHttpListener.Create('127.0.0.1',20000); AppObject := TwstFPHttpListener.Create('127.0.0.1',20000);
try try
WriteLn('"Web Service Toolkit" HTTP Server sample listening at:'); WriteLn('"Web Service Toolkit" HTTP Server sample listening at:');
WriteLn(''); WriteLn('');

View File

@ -1,23 +1,26 @@
<?xml version="1.0"?> <?xml version="1.0" encoding="UTF-8"?>
<CONFIG> <CONFIG>
<ProjectOptions> <ProjectOptions>
<Version Value="9"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<Version Value="5"/>
<General> <General>
<Flags> <Flags>
<MainUnitHasUsesSectionForAllUnits Value="False"/> <MainUnitHasUsesSectionForAllUnits Value="False"/>
<MainUnitHasCreateFormStatements Value="False"/> <MainUnitHasCreateFormStatements Value="False"/>
<MainUnitHasTitleStatement Value="False"/> <MainUnitHasTitleStatement Value="False"/>
<LRSInOutputDirectory Value="False"/>
</Flags> </Flags>
<SessionStorage Value="InProjectDir"/>
<MainUnit Value="0"/> <MainUnit Value="0"/>
<TargetFileExt Value=".exe"/>
<ActiveEditorIndexAtStart Value="2"/>
</General> </General>
<VersionInfo> <VersionInfo>
<ProjectVersion Value=""/>
<Language Value=""/> <Language Value=""/>
<CharSet Value=""/> <CharSet Value=""/>
<StringTable ProductVersion=""/>
</VersionInfo> </VersionInfo>
<BuildModes Count="1">
<Item1 Name="default" Default="True"/>
</BuildModes>
<PublishOptions> <PublishOptions>
<Version Value="2"/> <Version Value="2"/>
<IgnoreBinaries Value="False"/> <IgnoreBinaries Value="False"/>
@ -30,269 +33,31 @@
<LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/> <LaunchingApplication PathPlusParams="/usr/X11R6/bin/xterm -T 'Lazarus Run Output' -e $(LazarusDir)/tools/runwait.sh $(TargetCmdLine)"/>
</local> </local>
</RunParams> </RunParams>
<Units Count="12"> <Units Count="2">
<Unit0> <Unit0>
<Filename Value="test_record.pas"/> <Filename Value="test_record.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="test_record"/> <UnitName Value="test_record"/>
<CursorPos X="31" Y="37"/>
<TopLine Value="17"/>
<EditorIndex Value="0"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit0> </Unit0>
<Unit1> <Unit1>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win\sysutils.pp"/> <Filename Value="..\..\..\record_rtti.pas"/>
<UnitName Value="sysutils"/>
<CursorPos X="10" Y="33"/>
<TopLine Value="49"/>
<EditorIndex Value="9"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit1>
<Unit2>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\sysutilh.inc"/>
<CursorPos X="11" Y="236"/>
<TopLine Value="210"/>
<UsageCount Value="10"/>
</Unit2>
<Unit3>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\sysutils\intfh.inc"/>
<CursorPos X="1" Y="1"/>
<TopLine Value="4"/>
<UsageCount Value="10"/>
</Unit3>
<Unit4>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\objpas\typinfo.pp"/>
<UnitName Value="typinfo"/>
<CursorPos X="7" Y="75"/>
<TopLine Value="60"/>
<EditorIndex Value="8"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit4>
<Unit5>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\rtti.inc"/>
<CursorPos X="3" Y="132"/>
<TopLine Value="43"/>
<EditorIndex Value="2"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit5>
<Unit6>
<Filename Value="..\record_rtti.pas"/>
<IsPartOfProject Value="True"/> <IsPartOfProject Value="True"/>
<UnitName Value="record_rtti"/> </Unit1>
<CursorPos X="13" Y="28"/>
<TopLine Value="7"/>
<EditorIndex Value="1"/>
<UsageCount Value="20"/>
<Loaded Value="True"/>
</Unit6>
<Unit7>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\system.inc"/>
<CursorPos X="20" Y="244"/>
<TopLine Value="222"/>
<EditorIndex Value="4"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit7>
<Unit8>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\systemh.inc"/>
<CursorPos X="11" Y="865"/>
<TopLine Value="845"/>
<EditorIndex Value="5"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit8>
<Unit9>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\win\systhrd.inc"/>
<CursorPos X="14" Y="137"/>
<TopLine Value="137"/>
<EditorIndex Value="7"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit9>
<Unit10>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\aliases.inc"/>
<CursorPos X="11" Y="31"/>
<TopLine Value="1"/>
<EditorIndex Value="3"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit10>
<Unit11>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\compproc.inc"/>
<CursorPos X="32" Y="408"/>
<TopLine Value="391"/>
<EditorIndex Value="6"/>
<UsageCount Value="10"/>
<Loaded Value="True"/>
</Unit11>
</Units> </Units>
<JumpHistory Count="30" HistoryIndex="29">
<Position1>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="101" Column="1" TopLine="77"/>
</Position1>
<Position2>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="95" Column="1" TopLine="77"/>
</Position2>
<Position3>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="96" Column="1" TopLine="77"/>
</Position3>
<Position4>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="97" Column="1" TopLine="77"/>
</Position4>
<Position5>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="98" Column="1" TopLine="77"/>
</Position5>
<Position6>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="99" Column="1" TopLine="77"/>
</Position6>
<Position7>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="100" Column="1" TopLine="77"/>
</Position7>
<Position8>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="101" Column="1" TopLine="77"/>
</Position8>
<Position9>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="103" Column="1" TopLine="77"/>
</Position9>
<Position10>
<Filename Value="test_record.pas"/>
<Caret Line="43" Column="1" TopLine="17"/>
</Position10>
<Position11>
<Filename Value="test_record.pas"/>
<Caret Line="22" Column="1" TopLine="7"/>
</Position11>
<Position12>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="103" Column="22" TopLine="77"/>
</Position12>
<Position13>
<Filename Value="test_record.pas"/>
<Caret Line="42" Column="1" TopLine="17"/>
</Position13>
<Position14>
<Filename Value="test_record.pas"/>
<Caret Line="32" Column="50" TopLine="17"/>
</Position14>
<Position15>
<Filename Value="test_record.pas"/>
<Caret Line="31" Column="50" TopLine="17"/>
</Position15>
<Position16>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="15" Column="24" TopLine="1"/>
</Position16>
<Position17>
<Filename Value="test_record.pas"/>
<Caret Line="27" Column="29" TopLine="17"/>
</Position17>
<Position18>
<Filename Value="test_record.pas"/>
<Caret Line="42" Column="1" TopLine="17"/>
</Position18>
<Position19>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="97" Column="29" TopLine="78"/>
</Position19>
<Position20>
<Filename Value="test_record.pas"/>
<Caret Line="42" Column="1" TopLine="17"/>
</Position20>
<Position21>
<Filename Value="test_record.pas"/>
<Caret Line="33" Column="1" TopLine="17"/>
</Position21>
<Position22>
<Filename Value="test_record.pas"/>
<Caret Line="42" Column="1" TopLine="17"/>
</Position22>
<Position23>
<Filename Value="test_record.pas"/>
<Caret Line="33" Column="55" TopLine="17"/>
</Position23>
<Position24>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\rtti.inc"/>
<Caret Line="139" Column="38" TopLine="130"/>
</Position24>
<Position25>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\system.inc"/>
<Caret Line="244" Column="20" TopLine="222"/>
</Position25>
<Position26>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\systemh.inc"/>
<Caret Line="739" Column="10" TopLine="651"/>
</Position26>
<Position27>
<Filename Value="..\..\..\..\..\..\..\lazarus_23_215XX\fpc\source\rtl\inc\systemh.inc"/>
<Caret Line="865" Column="11" TopLine="845"/>
</Position27>
<Position28>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="97" Column="44" TopLine="78"/>
</Position28>
<Position29>
<Filename Value="test_record.pas"/>
<Caret Line="42" Column="24" TopLine="17"/>
</Position29>
<Position30>
<Filename Value="..\record_rtti.pas"/>
<Caret Line="40" Column="73" TopLine="40"/>
</Position30>
</JumpHistory>
</ProjectOptions> </ProjectOptions>
<CompilerOptions> <CompilerOptions>
<Version Value="5"/> <Version Value="11"/>
<PathDelim Value="\"/> <PathDelim Value="\"/>
<SearchPaths> <SearchPaths>
<OtherUnitFiles Value="C:\Programmes\lazarus\wst\trunk\tests\record\"/> <OtherUnitFiles Value="..\..\.."/>
</SearchPaths> </SearchPaths>
<CodeGeneration> <Parsing>
<Generate Value="Faster"/> <SyntaxOptions>
</CodeGeneration> <UseAnsiStrings Value="False"/>
<Other> </SyntaxOptions>
<CompilerPath Value="$(CompPath)"/> </Parsing>
</Other>
</CompilerOptions> </CompilerOptions>
<Debugging> <Debugging>
<BreakPoints Count="4">
<Item1>
<Source Value="..\..\..\samples\http_server\D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="230"/>
</Item1>
<Item2>
<Source Value="..\..\..\samples\http_server\D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="193"/>
</Item2>
<Item3>
<Source Value="..\..\..\samples\http_server\D:\lazarusClean\fpcsrc\rtl\inc\getopts.pp"/>
<Line Value="198"/>
</Item3>
<Item4>
<Source Value="..\..\..\ws_helper\wsdl2pas_imp.pas"/>
<Line Value="606"/>
</Item4>
</BreakPoints>
<Watches Count="2">
<Item1>
<Expression Value="locStrFilter"/>
</Item1>
<Item2>
<Expression Value="i"/>
</Item2>
</Watches>
<Exceptions Count="2"> <Exceptions Count="2">
<Item1> <Item1>
<Name Value="ECodetoolError"/> <Name Value="ECodetoolError"/>

View File

@ -3,8 +3,7 @@ program test_record;
{$mode objfpc}{$H+} {$mode objfpc}{$H+}
uses uses
Classes, SysUtils Classes, SysUtils, TypInfo, record_rtti;
,TypInfo, record_rtti;
type type