You've already forked lazarus-ccr
XMLRPC Serializer : type free data defaults to string
git-svn-id: https://svn.code.sf.net/p/lazarus-ccr/svn@880 8e941d3f-bd1b-0410-a28a-d453659cc2b4
This commit is contained in:
@ -242,7 +242,11 @@ type
|
|||||||
const AData : Pointer
|
const AData : Pointer
|
||||||
);{$IFDEF USE_INLINE}inline;{$ENDIF}
|
);{$IFDEF USE_INLINE}inline;{$ENDIF}
|
||||||
|
|
||||||
function GetNodeValue(var AName : string; out AResBuffer : DOMString) : Boolean;
|
function GetNodeValue(
|
||||||
|
var AName : string;
|
||||||
|
out AResBuffer : DOMString;
|
||||||
|
const AHandleDefaultType : Boolean = False
|
||||||
|
) : Boolean;
|
||||||
function GetEnum(
|
function GetEnum(
|
||||||
Const ATypeInfo : PTypeInfo;
|
Const ATypeInfo : PTypeInfo;
|
||||||
Var AName : String;
|
Var AName : String;
|
||||||
@ -950,25 +954,30 @@ begin
|
|||||||
end;
|
end;
|
||||||
|
|
||||||
function TXmlRpcBaseFormatter.GetNodeValue(
|
function TXmlRpcBaseFormatter.GetNodeValue(
|
||||||
var AName: string;
|
var AName: string;
|
||||||
out AResBuffer : DOMString
|
out AResBuffer : DOMString;
|
||||||
|
const AHandleDefaultType : Boolean
|
||||||
) : Boolean;
|
) : Boolean;
|
||||||
var
|
var
|
||||||
locElt : TDOMNode;
|
locElt : TDOMNode;
|
||||||
stkTop : TStackItem;
|
stkTop : TStackItem;
|
||||||
begin
|
begin
|
||||||
stkTop := StackTop();
|
stkTop := StackTop();
|
||||||
locElt := stkTop.FindNode(AName) as TDOMElement;
|
locElt := stkTop.FindNode(AName);
|
||||||
|
|
||||||
Result := ( locElt <> nil );
|
Result := ( locElt <> nil );
|
||||||
if Result then begin
|
if Result then begin
|
||||||
if locElt.HasChildNodes then begin
|
if locElt.HasChildNodes then begin
|
||||||
AResBuffer := locElt.FirstChild.NodeValue
|
AResBuffer := locElt.FirstChild.NodeValue
|
||||||
end else begin
|
end else begin
|
||||||
if ( stkTop.FoundState = fsFoundNil ) then
|
if ( stkTop.FoundState = fsFoundNil ) then begin
|
||||||
AResBuffer := ''
|
if AHandleDefaultType then
|
||||||
else
|
AResBuffer := locElt.NodeValue
|
||||||
|
else
|
||||||
|
AResBuffer := '';
|
||||||
|
end else begin
|
||||||
AResBuffer := locElt.NodeValue;
|
AResBuffer := locElt.NodeValue;
|
||||||
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
@ -1106,7 +1115,7 @@ function TXmlRpcBaseFormatter.GetStr(
|
|||||||
var
|
var
|
||||||
locBuffer : DOMString;
|
locBuffer : DOMString;
|
||||||
begin
|
begin
|
||||||
Result := GetNodeValue(AName,locBuffer);
|
Result := GetNodeValue(AName,locBuffer,True);
|
||||||
if Result then
|
if Result then
|
||||||
AData := locBuffer;
|
AData := locBuffer;
|
||||||
end;
|
end;
|
||||||
|
@ -594,6 +594,7 @@ type
|
|||||||
function Support_nil():Boolean;override;
|
function Support_nil():Boolean;override;
|
||||||
published
|
published
|
||||||
procedure test_WriteBuffer();
|
procedure test_WriteBuffer();
|
||||||
|
procedure test_default_data_type();
|
||||||
end;
|
end;
|
||||||
|
|
||||||
{ TTestArray }
|
{ TTestArray }
|
||||||
@ -5563,6 +5564,61 @@ begin
|
|||||||
end;
|
end;
|
||||||
end;
|
end;
|
||||||
|
|
||||||
|
procedure TTestXmlRpcFormatter.test_default_data_type();
|
||||||
|
const
|
||||||
|
s_XML_BUFFER : ansistring =
|
||||||
|
//'<?xml version="1.0"?>' + sLineBreak +
|
||||||
|
'<struct>' + sLineBreak +
|
||||||
|
' <member>' + sLineBreak +
|
||||||
|
' <name>o1</name>' + sLineBreak +
|
||||||
|
' <value>' + sLineBreak +
|
||||||
|
' <struct>' + sLineBreak +
|
||||||
|
' <member>' + sLineBreak +
|
||||||
|
' <name>fieldSmallint</name>' + sLineBreak +
|
||||||
|
' <value><int>123</int></value>' + sLineBreak +
|
||||||
|
' </member>' + sLineBreak +
|
||||||
|
' <member>' + sLineBreak +
|
||||||
|
' <name>fieldWord</name>' + sLineBreak +
|
||||||
|
' <value><int>456</int></value>' + sLineBreak +
|
||||||
|
' </member>' + sLineBreak +
|
||||||
|
' <member>' + sLineBreak +
|
||||||
|
' <name>fieldString</name>' + sLineBreak +
|
||||||
|
' <value>fpc-wst</value>' + sLineBreak +
|
||||||
|
' </member>' + sLineBreak +
|
||||||
|
' </struct>' + sLineBreak +
|
||||||
|
' </value>' + sLineBreak +
|
||||||
|
' </member>' + sLineBreak +
|
||||||
|
'</struct>';
|
||||||
|
|
||||||
|
var
|
||||||
|
f : IFormatterBase;
|
||||||
|
s : TMemoryStream;
|
||||||
|
a : TTestSmallClass;
|
||||||
|
x : string;
|
||||||
|
begin
|
||||||
|
s := Nil;
|
||||||
|
a := TTestSmallClass.Create();
|
||||||
|
try
|
||||||
|
f := CreateFormatter(TypeInfo(TClass_B));
|
||||||
|
s := TMemoryStream.Create();
|
||||||
|
s.Write(s_XML_BUFFER[1],Length(s_XML_BUFFER));
|
||||||
|
s.Position := 0;
|
||||||
|
f.LoadFromStream(s);
|
||||||
|
x := 'Root';
|
||||||
|
f.BeginObjectRead(x,TypeInfo(TClass_B));
|
||||||
|
x := 'o1';
|
||||||
|
f.Get(TypeInfo(TTestSmallClass),x,a);
|
||||||
|
f.EndScopeRead();
|
||||||
|
|
||||||
|
CheckEquals(123,a.fieldSmallint);
|
||||||
|
CheckEquals(456,a.fieldWord);
|
||||||
|
CheckEquals('fpc-wst',a.fieldString);
|
||||||
|
finally
|
||||||
|
a.Free();
|
||||||
|
s.Free();
|
||||||
|
end;
|
||||||
|
end;
|
||||||
|
|
||||||
{ TTest_SoapFormatterExceptionBlock }
|
{ TTest_SoapFormatterExceptionBlock }
|
||||||
|
|
||||||
function TTest_SoapFormatterExceptionBlock.CreateFormatter() : IFormatterResponse;
|
function TTest_SoapFormatterExceptionBlock.CreateFormatter() : IFormatterResponse;
|
||||||
|
Reference in New Issue
Block a user