2014-11-20 3 views
1

Delphi 2007에서 SSL을 사용하여 SOAP 클라이언트를 작성해야합니다. WSDL 가져 오기 도구 $ Rev : 10138을 사용하여 코드를 생성했습니다. 오류 처리에 문제가 있습니다. 코드에서 는처리 오류 SOAP 클라이언트

SzczegolyBledu = class(TRemotable) 
private 
    Fkod: KodBledu; 
    Fzrodlo: KrotkiTekst; 
    Fopis: KrotkiTekst; 
published 
    property kod: KodBledu  read Fkod write Fkod; 
    property zrodlo: KrotkiTekst read Fzrodlo write Fzrodlo; 
    property opis: KrotkiTekst read Fopis write Fopis; 
end; 

BladTechniczny = class(ERemotableException) 
private 
    Fkod: KodBledu; 
    Fopis: KrotkiTekst; 
    Fopis_Specified: boolean; 
    FopisTechniczny: DlugiTekst; 
    FopisTechniczny_Specified: boolean; 
    procedure Setopis(Index: Integer; const AKrotkiTekst: KrotkiTekst); 
    function opis_Specified(Index: Integer): boolean; 
    procedure SetopisTechniczny(Index: Integer; const ADlugiTekst: DlugiTekst); 
    function opisTechniczny_Specified(Index: Integer): boolean; 
published 
    property kod:   KodBledu  read Fkod write Fkod; 
    property opis:   KrotkiTekst Index (IS_OPTN) read Fopis write Setopis stored opis_Specified; 
    property opisTechniczny: DlugiTekst Index (IS_OPTN) read FopisTechniczny write SetopisTechniczny stored opisTechniczny_Specified; 
end; 

bladTechniczny2 = class(BladTechniczny) 
private 
published 
end; 

Array_Of_SzczegolyBledu = array of SzczegolyBledu; { -- } 

BladBiznesowy = class(ERemotableException) 
private 
    Fkod: KodBledu; 
    Fopis: KrotkiTekst; 
    Fopis_Specified: boolean; 
    Fszczegoly: Array_Of_SzczegolyBledu; 
    Fszczegoly_Specified: boolean; 
    procedure Setopis(Index: Integer; const AKrotkiTekst: KrotkiTekst); 
    function opis_Specified(Index: Integer): boolean; 
    procedure Setszczegoly(Index: Integer; const AArray_Of_SzczegolyBledu: Array_Of_SzczegolyBledu); 
    function szczegoly_Specified(Index: Integer): boolean; 
public 
    destructor Destroy; override; 
published 
    property kod:  KodBledu     read Fkod write Fkod; 
    property opis:  KrotkiTekst    Index (IS_OPTN) read Fopis write Setopis stored opis_Specified; 
    property szczegoly: Array_Of_SzczegolyBledu Index (IS_OPTN) read Fszczegoly write Setszczegoly stored szczegoly_Specified; 
end; 

bladBiznesowy2 = class(BladBiznesowy) 
private 
published 
end; 

implementation 

destructor BladBiznesowy.Destroy; 
var 
    I: Integer; 
begin 
    for I := 0 to Length(Fszczegoly)-1 do 
    FreeAndNil(Fszczegoly[I]); 
    SetLength(Fszczegoly, 0); 
    inherited Destroy; 
end; 

procedure BladBiznesowy.Setopis(Index: Integer; const AKrotkiTekst: KrotkiTekst); 
begin 
    Fopis := AKrotkiTekst; 
    Fopis_Specified := True; 
end; 

function BladBiznesowy.opis_Specified(Index: Integer): boolean; 
begin 
    Result := Fopis_Specified; 
end; 

procedure BladBiznesowy.Setszczegoly(Index: Integer; const AArray_Of_SzczegolyBledu: Array_Of_SzczegolyBledu); 
begin 
    Fszczegoly := AArray_Of_SzczegolyBledu; 
    Fszczegoly_Specified := True; 
end; 

function BladBiznesowy.szczegoly_Specified(Index: Integer): boolean; 
begin 
    Result := Fszczegoly_Specified; 
end; 

procedure BladTechniczny.Setopis(Index: Integer; const AKrotkiTekst: KrotkiTekst); 
begin 
    Fopis := AKrotkiTekst; 
    Fopis_Specified := True; 
end; 

function BladTechniczny.opis_Specified(Index: Integer): boolean; 
begin 
    Result := Fopis_Specified; 
end; 

procedure BladTechniczny.SetopisTechniczny(Index: Integer; const ADlugiTekst: DlugiTekst); 
begin 
    FopisTechniczny := ADlugiTekst; 
    FopisTechniczny_Specified := True; 
end; 

function BladTechniczny.opisTechniczny_Specified(Index: Integer): boolean; 
begin 
    Result := FopisTechniczny_Specified; 
end; 

initialization 

    RemClassRegistry.RegisterXSClass(BladTechniczny, 'http://msw.gov.pl/srp/v3_0/uslugi/wspolne/', 'BladTechniczny'); 
    RemClassRegistry.RegisterXSClass(bladTechniczny2, 'http://msw.gov.pl/srp/v3_0/uslugi/subskrypcje/', 'bladTechniczny2', 'bladTechniczny'); 

    RemClassRegistry.RegisterXSClass(BladBiznesowy, 'http://msw.gov.pl/srp/v3_0/uslugi/wspolne/', 'BladBiznesowy'); 
    RemClassRegistry.RegisterXSClass(bladBiznesowy2, 'http://msw.gov.pl/srp/v3_0/uslugi/subskrypcje/', 'bladBiznesowy2', 'bladBiznesowy'); 

SOAPUI 날

이 방식은 델파이에서
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"/> 
    <soap:Body> 
    <soap:Fault> 
     <faultcode>soap:Server</faultcode> 
     <faultstring>Błąd: xxx</faultstring> 
     <detail> 
      <ns2:bladTechniczny xmlns:ns2="http://msw.gov.pl/srp/v3_0/uslugi/subskrypcje/"> 
       <kod>xxx</kod> 
       <opisx>xxx</opis> 
       <opisTechniczny></opisTechniczny> 
      </ns2:bladTechniczny> 
     </detail> 
     </soap:Fault> 
    </soap:Body> 
</soap:Envelope> 

이 RemotableException 에게 bladTechniczny를 생성하지만 난 EIdHTTPProtocolException 하지됩니다 있습니까 응답을 생성한다 (다른 중에서) 다음과 같은 클래스입니다 바꿔 줘?

답변

0

웹 서비스 끝점 http://msw.gov.pl/srp/v3_0/uslugi/subskrypcje/에 도달하면 서버가 https://msw.gov.pl/srp/v3_0/uslugi/subskrypcje/으로 리디렉션됩니다.

그래서 https URI를 사용하여 WSDL을 가져 와서 다시 시도하십시오.

+0

서버에서 내부 서버 오류가 발생합니다. 원인은 데이터 요청의 유효성 검사입니다. SoapUI에서 응답을 분석 할 때 서버에서 오류를 보내는 것으로 나타났습니다. 하지만 예외 EIdHTTPProtocolException이 발생하고 오류에 액세스 할 수 없습니다. 잘못을 처리하려면 어떻게해야합니까? – leko