浏览代码

* Some corrections in service name construction, in line with method name construction

Michaël Van Canneyt 1 月之前
父节点
当前提交
667607f121
共有 1 个文件被更改,包括 10 次插入12 次删除
  1. 10 12
      packages/fcl-openapi/src/fpopenapi.pascaltypes.pp

+ 10 - 12
packages/fcl-openapi/src/fpopenapi.pascaltypes.pp

@@ -776,7 +776,8 @@ begin
   For I:=0 to aMap.Count-1 do
     begin
     aMap.GetNameValue(I,N,V);
-    FServiceOperationMap.Add(N,V);
+    if (N<>'') and (V<>'') then
+      FServiceOperationMap.Add(N,V);
     end;
 end;
 
@@ -897,7 +898,7 @@ function TAPIData.GenerateServiceName(const aUrl: String; const aPath: TPathItem
     Result:=StringReplace(S,' ','',[rfReplaceAll])
   end;
 {
-  the maps contain ServiceName.MethodName.
+  the maps contain ServiceName[.MethodName]
   We use ServiceName if there is an entry in the map.
   if there is no entry in the map and there is 1 tag, we take the name of the tag.
   if there is no tag, we take the first component of the URL path.
@@ -909,17 +910,14 @@ var
 
 begin
   Result:='';
-  if (aOperation.Tags.Count=1) then
-    lTag:=ServiceNamePrefix+CleanIdentifier(aOperation.Tags[0])+ServiceNameSuffix
-  else
-    lTag:='';
+  // We need to take into account the full map first, as is done for the method.
   if aOperation.OperationID<>'' then
     lFullName:=FServiceOperationMap.Items[aOperation.OperationID]
-  else if LTag<>'' then
-    lFullName:=lTag+'.'+aOperation.OperationID
   else
     lFullName:=FServiceOperationMap.Items[aOperation.PathComponent+'.'+aURL];
-  if lFullName='' then
+  if (lFullName='') and (aOperation.Tags.Count=1) then
+    lFullName:=ServiceNamePrefix+CleanIdentifier(aOperation.Tags[0])+ServiceNameSuffix;
+  if (lFullName='') then
     begin
     lStrings:=SplitString(aURL,'/');
     // First non-empty
@@ -976,8 +974,7 @@ begin
         S:=lStrings[i];
         S:=StringReplace(S,'{','',[rfReplaceAll]);
         S:=StringReplace(S,'}','',[rfReplaceAll]);
-        For J:=1 to Length(S)-1 do
-          if not (Upcase(S[J]) in ['A'..'Z','0'..'9','_']) then
+        S:=Sanitize(S);
         Result:=Result+'_'+S;
         end;
       end;
@@ -1227,7 +1224,7 @@ begin
   if Result=Nil then
     begin
     Result:=TAPITypeData.CreateBinaryData(aContentType);
-    S:=ObjectTypePrefix+StringReplace(aContentType,'/','_',[])+'StreamData';
+    S:=ObjectTypePrefix+Sanitize(aContentType)+'StreamData';
     AddType(S,Result);
     end;
 end;
@@ -1563,6 +1560,7 @@ constructor TAPITypeData.CreateBinaryData(const aContentType: string);
 begin
   Inherited Create(0,ptUnknown,'','TStream',Nil);
   FContentType:=aContentType;
+  FBinaryData:=True;
 end;
 
 function TAPITypeData.AddProperty(const aApiName, aPascalName: String): TAPIProperty;