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 하지됩니다 있습니까 응답을 생성한다 (다른 중에서) 다음과 같은 클래스입니다 바꿔 줘?
서버에서 내부 서버 오류가 발생합니다. 원인은 데이터 요청의 유효성 검사입니다. SoapUI에서 응답을 분석 할 때 서버에서 오류를 보내는 것으로 나타났습니다. 하지만 예외 EIdHTTPProtocolException이 발생하고 오류에 액세스 할 수 없습니다. 잘못을 처리하려면 어떻게해야합니까? – leko