🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.delphi
Article #346147

Re: GUS i httprio - SID w nagłówku http, EDOMParsError. CDATA

#346147
From: kali - Tomasz Kalinowski
Date: Thu, 02 Nov 2017 10:44
109 lines
7260 bytes
Poproszę Was jeszcze jednak o pomoc. Utkwiłem dalej. Aktualnie dane odbieram ale pojawia się wspomniany błąd (po pobraniu danych): EDOMParsError with message 'Nieprawidłowa wartość na najwyższym poziomie dokumentu' 

Co i jak: 
Wysyłana koperta SOAP:
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://www.w3.org/2003/05/soap-envelope" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><SOAP-ENV:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To> <wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneSzukaj</wsa:Action> </SOAP-ENV:Header><SOAP-ENV:Body><DaneSzukaj xmlns="http://CIS/BIR/PUBL/2014/07"><pParametryWyszukiwania><Nip xmlns="http://CIS/BIR/PUBL/2014/07/DataContract">5420201038</Nip></pParametryWyszukiwania></DaneSzukaj></SOAP-ENV:Body></SOAP-ENV:Envelope>

Odpowiedź. Dane odbieram w postaci (&lt; &gt; ...):

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneSzukajResponse</a:Action></s:Header><s:Body><DaneSzukajResponse xmlns="http://CIS/BIR/PUBL/2014/07"><DaneSzukajResult>&lt;root&gt;&#xD;
  &lt;dane&gt;&#xD;
    &lt;Regon&gt;05002589200000&lt;/Regon&gt;&#xD;
    &lt;RegonLink&gt;&amp;lt;a href='javascript:danePobierzPelnyRaport("05002589200000","DaneRaportPrawnaPubl", 0);'&amp;gt;050025892&amp;lt;/a&amp;gt;&lt;/RegonLink&gt;&#xD;
    &lt;Nazwa&gt;MPO SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ&lt;/Nazwa&gt;&#xD;
    &lt;Wojewodztwo&gt;PODLASKIE&lt;/Wojewodztwo&gt;&#xD;
    &lt;Powiat&gt;m. Białystok&lt;/Powiat&gt;&#xD;
    &lt;Gmina&gt;M. Białystok&lt;/Gmina&gt;&#xD;
    &lt;Miejscowosc&gt;Białystok&lt;/Miejscowosc&gt;&#xD;
    &lt;KodPocztowy&gt;15-950&lt;/KodPocztowy&gt;&#xD;
    &lt;Ulica&gt;ul. Test-Krucza&lt;/Ulica&gt;&#xD;
    &lt;Typ&gt;P&lt;/Typ&gt;&#xD;
    &lt;SilosID&gt;6&lt;/SilosID&gt;&#xD;
  &lt;/dane&gt;&#xD;
&lt;/root&gt;</DaneSzukajResult></DaneSzukajResponse></s:Body></s:Envelope>


I otrzymuje błąd j.w. Więc podmieniam Response w HTTPRIO1AfterExecute:

procedure TForm1.HTTPRIO1AfterExecute(const MethodName: string;
  SOAPResponse: TStream);
var  sl: tstringlist;
data:string;
begin
if operacja='DaneSzukaj' then
begin
//showmessage('tu');
  Memo1.Lines.Add(' ______________________________________');
  Memo1.Lines.Add('Resopnse: '+MethodName);
  sl:=TStringList.Create;

  SOAPResponse.Position:=0;
  with TStringStream.Create('') do
  try
    CopyFrom(SOAPResponse, SOAPResponse.Size - SOAPResponse.Position);
    data:= DataString;
    Data:=StringReplace(Data,'&amp;','&',[RfReplaceAll]);
    Data:=StringReplace(Data,'&lt;','<',[RfReplaceAll]);
    Data:=StringReplace(Data,'&gt;','>',[RfReplaceAll]);
    Data:=StringReplace(Data,'&#xD;','',[RfReplaceAll]);
//    Data:=StringReplace(Data,'<DaneSzukajResult>','<DaneSzukajResult><![CDATA[',[RfReplaceAll]);
//    Data:=StringReplace(Data,'</root>','</root>]]>',[RfReplaceAll]);

    sl.Add(data);

    SOAPResponse.Size := 0;
    SOAPResponse.Position := 0;
    sl.SaveToStream(SOAPResponse);
    Data:=UTF8ToWideString(Data);
    Memo1.Lines.Add(data);
  finally
    Free;
  end;
end;


Oczywiście wtedy odpowiedź jest czytelniejsza (+UTF8ToWideString):

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"><s:Header><a:Action s:mustUnderstand="1">http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/DaneSzukajResponse</a:Action></s:Header><s:Body><DaneSzukajResponse xmlns="http://CIS/BIR/PUBL/2014/07"><DaneSzukajResult><root>
  <dane>
    <Regon>05002589200000</Regon>
    <RegonLink><a href='javascript:danePobierzPelnyRaport("05002589200000","DaneRaportPrawnaPubl", 0);'>050025892</a></RegonLink>
    <Nazwa>MPO SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ</Nazwa>
    <Wojewodztwo>PODLASKIE</Wojewodztwo>
    <Powiat>m. Białystok</Powiat>
    <Gmina>M. Białystok</Gmina>
    <Miejscowosc>Białystok</Miejscowosc>
    <KodPocztowy>15-950</KodPocztowy>
    <Ulica>ul. Test-Krucza</Ulica>
    <Typ>P</Typ>
    <SilosID>6</SilosID>
  </dane>
</root></DaneSzukajResult></DaneSzukajResponse></s:Body></s:Envelope>

jednak błąd nadal się pojawia. Dodawałem więc znaczniki CDATA: Mimo to, ciągle to samo:
EDOMParsError:
Line: 215 </root>]]></DaneSzukajResult></DaneSzuka'. (tak, brak j>)
Debuger zatrzymuje program w Xml.XMLDoc w procedurze LoadData w tym miejscu:

  if not Status then
  begin
    DocSource := xdsNone;
    ParseError := DOMDocument as IDOMParseError;
    Msg := Format('%s%s%s: %d%s%s', [ParseError.Reason, SLineBreak, SLine,
      ParseError.Line, SLineBreak, Copy(ParseError.SrcText, 1, 40)]);
>    raise EDOMParseError.Create(ParseError, Msg);
  end;


Przeglądałem Unofficial SOAP Bug Fixes, ale prócz poprawki ActivateDSL z SOAP.WSDLNode.pas niczego nie znalazłem.
Odpowiedź z danymi z ws, po dokonaniu zamian w responsie (&lt;...) wygląda identycznie, jak ta, którą otrzymuję w SoapUI. 

Pracuje na wersjii Berlin. 

Może macie dla mnie jakieś sugestie?
Czy owy problem ze znacznikami cdata/&lt; da się rozwiązać zgrabniej?
Jest też problem z kodowaniem. Dane które wracają się krzaczą dopóki nie wykonam konwersji UTF8ToWideString (może to jakaś wskazówka).

Dzięki za pomoc ....
- kali
Technical Details
Message-ID: <c426c356-863e-4ad1-a093-859e9ec067cd@googlegroups.com>
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!z50no777155qtj.0!news-out.google.com!v14ni1653qtc.0!nntp.google.com!k31no770573qta.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
References: <1f0e00a9-2a79-4683-bce9-7f12abcb551d@googlegroups.com> <0ffb26e4-ce45-4b95-9aef-18dd56465bf4@googlegroups.com> <899c467c-dd0d-4a65-aaba-5d3714558ca1@googlegroups.com> <90312a1c-ef7e-4e9d-bfe7-91a253036b12@googlegroups.com> <dy148590jagb$.dlg@tyczka.com> <2ffd6599-8a1a-419a-bad6-8abfade1aeab@googlegroups.com> <90dda74f-b7c1-4b1e-93f0-18b671409ff5@googlegroups.com>

Show Full Headers
Complete Article Headers
X-Received: by 10.237.63.36 with SMTP id p33mr2154850qtf.16.1509619483803;        Thu, 02 Nov 2017 03:44:43 -0700 (PDT)
X-Received: by 10.157.15.247 with SMTP id m52mr86711otd.1.1509619483626; Thu, 02 Nov 2017 03:44:43 -0700 (PDT)
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!news.icm.edu.pl!newsfeed2.atman.pl!newsfeed.atman.pl!goblin3!goblin.stu.neva.ru!news.misty.com!border2.nntp.dca1.giganews.com!nntp.giganews.com!z50no777155qtj.0!news-out.google.com!v14ni1653qtc.0!nntp.google.com!k31no770573qta.1!postnews.google.com!glegroupsg2000goo.googlegroups.com!not-for-mail
Newsgroups: pl.comp.lang.delphi
Date: Thu, 2 Nov 2017 03:44:43 -0700 (PDT)
In-Reply-To: <90dda74f-b7c1-4b1e-93f0-18b671409ff5@googlegroups.com>
Complaints-To: groups-abuse@google.com
Injection-Info: glegroupsg2000goo.googlegroups.com; posting-host=109.231.45.61; posting-account=nydamgoAAAABZaXeK216J1vT5w9W4FrQ
NNTP-Posting-Host: 109.231.45.61
References: <1f0e00a9-2a79-4683-bce9-7f12abcb551d@googlegroups.com> <0ffb26e4-ce45-4b95-9aef-18dd56465bf4@googlegroups.com> <899c467c-dd0d-4a65-aaba-5d3714558ca1@googlegroups.com> <90312a1c-ef7e-4e9d-bfe7-91a253036b12@googlegroups.com> <dy148590jagb$.dlg@tyczka.com> <2ffd6599-8a1a-419a-bad6-8abfade1aeab@googlegroups.com> <90dda74f-b7c1-4b1e-93f0-18b671409ff5@googlegroups.com>
User-Agent: G2/1.0
MIME-Version: 1.0
Message-ID: <c426c356-863e-4ad1-a093-859e9ec067cd@googlegroups.com>
Subject: Re: GUS i httprio - SID w nagłówku http,
 EDOMParsError. CDATA
From: kali - Tomasz Kalinowski <tkalinows@gmail.com>
Injection-Date: Thu, 02 Nov 2017 10:44:43 +0000
Lines: 143
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit