SOAP call response parsing
Posted: Mon Jan 10, 2022 8:18 pm
Hello, i am using HTTPAPI and making SOAP call, getting XML response back but not able to parse properly, please help.
Full response from server attached below but i am interested to capture error messages only from XML tag <DatErrMsg>" and seperate values of MsgCIgd, Dsc and DtlDsc. Running through debug, able to see variable act value is 3, that means it is able to recognize 3 occurrences of name <DatErrMsg> but the path it is reading is "/SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr " instead reading "<ErrMsgDtl MsgCIgd="200001" MsgClg="IPESB" Dsc="Shipment details were validated successfully" DtlDsc="Shipment details were validated successfully"></ErrMsgDtl>" and value returning is blank.
Variable values:
Act = 3
A_NAME(1) = DatErrMsg
A_NAME(2) = DatErrMsg
A_NAME(3) = DatErrMsg
A_VAL(1) =
A_VAL(2) =
A_VAL(3) =
A_PATH(1) = /SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr
A_PATH(2) = /SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr
A_PATH(3) = /SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr
Giving only part of the code which is relevant to diagnosis the issue:
rc = http_url_post_xml(%Trim(I1_Url)
: %addr(Soap) + 2
: %len(Soap)
: *NULL
: %paddr(IncomingData)
: *NULL
: HTTP_TIMEOUT
: *omit
: 'application/soap+xml; ' +
'charset=UTF-8; action="DocumentManagem' +
'ent_WSConsumer_WS_DocumentManagement_Bind' +
'er_ShipmentValidateAndImageArchive"');
P E
P IncomingData B
D IncomingData PI
D UserData * value
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value 65535A varying const
D attrs * dim(32767)
D const options(*varsize)
/free
select;
when name = 'DatErrMsg';
act = act + 1;
A_Val(act) = %Trim(value);
A_Name(act) = %Trim(name);
A_Path(act) = %Trim(path);
Other;
endsl;
/end-free
P E
Debug Log: Respose back:
recvdoc(): Receiving 3023 bytes.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelop ... P-ENV:Body>
<tns:shipmentValidateAndImageArchiveResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="DocumentManagement/WSConsumer/WS/DocumentManagement">
<MSG>
<Hdr Id="XXXXXXX" Ver="1.038" Dtm="2022-01-07T20:53:32">
<Sndr AppCd="ESB" AppNm="ESB"></Sndr>
<Rcp AppCd="99951" AppNm="Test_Shipping">
<GId Id="1" IdTp="RQMSGID"></GId>
</Rcp>
</Hdr>
<Bd>
<Shp Id="XXXXXXXXX">
<ShpTr CstValCurCd="USD" CstVal="50.25" MgNProdCd="P" OrgFcCd="PHX" OrgSrvaCd="PHX">
<SCDtl CRlTyCd="SP" CtryCd="US"></SCDtl>
<SCDtl CRlTyCd="RV" CtryCd="NO"></SCDtl>
</ShpTr>
<ShpInDoc>
<SDoc DocId="1" DocTyCd="CIN">
<Img ImgID="1" GenDtm="2022-01-06T15:10:00" SrcAppNm="Test_Shipping" ImgEncdTy="PDF" ImgMimeTy="application/pdf"></Img>
</SDoc>
</ShpInDoc>
<ShpInDoc>
<SDoc DocId="2" DocTyCd="HWB">
<Img ImgID="2" GenDtm="2022-01-06T15:10:00" SrcAppNm="Test_Shipping" ImgEncdTy="PDF" ImgMimeTy="application/pdf"></Img>
</SDoc>
</ShpInDoc>
</Shp>
</Bd>
<DatTrErr>
<OrgHdr CorrId="1"></OrgHdr>
<Rp CmptNm="DocumentManagement.ShipmentValidateAndImageArchiveProvider"></Rp>
<ErrMsgGI Ty="CF" Pri="3" Sev="10"></ErrMsgGI>
<DatErrMsg>
<ErrMsgDtl MsgCIgd="200001" MsgClg="IPESB" Dsc="Shipment details were validated successfully" DtlDsc="Shipment details were validated successfully"></ErrMsgDtl>
</DatErrMsg>
</DatTrErr>
<DatTrErr>
<OrgH dr CorrId="1"></OrgHdr>
<Rp CmptNm="DocumentManagement.ShipmentValidateAndImageArchiveProvider"></Rp>
<ErrMsgGI Ty="CF" Pri="3" Sev="10"></ErrMsgGI>
<DatErrMsg>
<ErrMsgDtl MsgCIgd="200006" MsgClg="IPESB" Dsc="Document image archive request was processed to image archive successfully" DtlDsc="Image: AM1/Test_Shipping.US.P.1109313192_INV_PHX_PHX_YR8_20220106_151010.PDF is successfully archived"></ErrMsgDtl>
</DatErrMsg>
</DatTrErr>
<DatTrErr>
<OrgHdr CorrId="1"></OrgHdr>
<Rp CmptNm="DocumentManagement.ShipmentValidateAndImageArchiveProvider"></Rp>
<ErrMsgGI Ty="CF" Pri="2" Sev="10"></ErrMsgGI>
<DatErrMsg>
<ErrMsgDtl MsgCIgd="100000" MsgClg="IPESB" Dsc="Service operation execution finished successfully" DtlDsc="Service operation execution finished successfully"></ErrMsgDtl>
</DatErrMsg>
</DatTrErr>
</MSG>
</tns:shipmentValidateAndImageArchiveResp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
http_close(): entered
Full response from server attached below but i am interested to capture error messages only from XML tag <DatErrMsg>" and seperate values of MsgCIgd, Dsc and DtlDsc. Running through debug, able to see variable act value is 3, that means it is able to recognize 3 occurrences of name <DatErrMsg> but the path it is reading is "/SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr " instead reading "<ErrMsgDtl MsgCIgd="200001" MsgClg="IPESB" Dsc="Shipment details were validated successfully" DtlDsc="Shipment details were validated successfully"></ErrMsgDtl>" and value returning is blank.
Variable values:
Act = 3
A_NAME(1) = DatErrMsg
A_NAME(2) = DatErrMsg
A_NAME(3) = DatErrMsg
A_VAL(1) =
A_VAL(2) =
A_VAL(3) =
A_PATH(1) = /SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr
A_PATH(2) = /SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr
A_PATH(3) = /SOAP-ENV:Envelope/SOAP-ENV:Body/tns:shipmentValidateAndImageArchiveResp/MSG/DatTrErr
Giving only part of the code which is relevant to diagnosis the issue:
rc = http_url_post_xml(%Trim(I1_Url)
: %addr(Soap) + 2
: %len(Soap)
: *NULL
: %paddr(IncomingData)
: *NULL
: HTTP_TIMEOUT
: *omit
: 'application/soap+xml; ' +
'charset=UTF-8; action="DocumentManagem' +
'ent_WSConsumer_WS_DocumentManagement_Bind' +
'er_ShipmentValidateAndImageArchive"');
P E
P IncomingData B
D IncomingData PI
D UserData * value
D depth 10I 0 value
D name 1024A varying const
D path 24576A varying const
D value 65535A varying const
D attrs * dim(32767)
D const options(*varsize)
/free
select;
when name = 'DatErrMsg';
act = act + 1;
A_Val(act) = %Trim(value);
A_Name(act) = %Trim(name);
A_Path(act) = %Trim(path);
Other;
endsl;
/end-free
P E
Debug Log: Respose back:
recvdoc(): Receiving 3023 bytes.
<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Header xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelop ... P-ENV:Body>
<tns:shipmentValidateAndImageArchiveResp xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tns="DocumentManagement/WSConsumer/WS/DocumentManagement">
<MSG>
<Hdr Id="XXXXXXX" Ver="1.038" Dtm="2022-01-07T20:53:32">
<Sndr AppCd="ESB" AppNm="ESB"></Sndr>
<Rcp AppCd="99951" AppNm="Test_Shipping">
<GId Id="1" IdTp="RQMSGID"></GId>
</Rcp>
</Hdr>
<Bd>
<Shp Id="XXXXXXXXX">
<ShpTr CstValCurCd="USD" CstVal="50.25" MgNProdCd="P" OrgFcCd="PHX" OrgSrvaCd="PHX">
<SCDtl CRlTyCd="SP" CtryCd="US"></SCDtl>
<SCDtl CRlTyCd="RV" CtryCd="NO"></SCDtl>
</ShpTr>
<ShpInDoc>
<SDoc DocId="1" DocTyCd="CIN">
<Img ImgID="1" GenDtm="2022-01-06T15:10:00" SrcAppNm="Test_Shipping" ImgEncdTy="PDF" ImgMimeTy="application/pdf"></Img>
</SDoc>
</ShpInDoc>
<ShpInDoc>
<SDoc DocId="2" DocTyCd="HWB">
<Img ImgID="2" GenDtm="2022-01-06T15:10:00" SrcAppNm="Test_Shipping" ImgEncdTy="PDF" ImgMimeTy="application/pdf"></Img>
</SDoc>
</ShpInDoc>
</Shp>
</Bd>
<DatTrErr>
<OrgHdr CorrId="1"></OrgHdr>
<Rp CmptNm="DocumentManagement.ShipmentValidateAndImageArchiveProvider"></Rp>
<ErrMsgGI Ty="CF" Pri="3" Sev="10"></ErrMsgGI>
<DatErrMsg>
<ErrMsgDtl MsgCIgd="200001" MsgClg="IPESB" Dsc="Shipment details were validated successfully" DtlDsc="Shipment details were validated successfully"></ErrMsgDtl>
</DatErrMsg>
</DatTrErr>
<DatTrErr>
<OrgH dr CorrId="1"></OrgHdr>
<Rp CmptNm="DocumentManagement.ShipmentValidateAndImageArchiveProvider"></Rp>
<ErrMsgGI Ty="CF" Pri="3" Sev="10"></ErrMsgGI>
<DatErrMsg>
<ErrMsgDtl MsgCIgd="200006" MsgClg="IPESB" Dsc="Document image archive request was processed to image archive successfully" DtlDsc="Image: AM1/Test_Shipping.US.P.1109313192_INV_PHX_PHX_YR8_20220106_151010.PDF is successfully archived"></ErrMsgDtl>
</DatErrMsg>
</DatTrErr>
<DatTrErr>
<OrgHdr CorrId="1"></OrgHdr>
<Rp CmptNm="DocumentManagement.ShipmentValidateAndImageArchiveProvider"></Rp>
<ErrMsgGI Ty="CF" Pri="2" Sev="10"></ErrMsgGI>
<DatErrMsg>
<ErrMsgDtl MsgCIgd="100000" MsgClg="IPESB" Dsc="Service operation execution finished successfully" DtlDsc="Service operation execution finished successfully"></ErrMsgDtl>
</DatErrMsg>
</DatTrErr>
</MSG>
</tns:shipmentValidateAndImageArchiveResp>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
http_close(): entered