Since the support of webservice component had end in the PowerBuilder we have to change the strategy to transform and generate the xml.
I have been reading about the PBDOM for the XML parsing and this works well, But how about the generation of the XML from the values in the Structure and send this as a input to HTTPClient.
I am stuck on how we can generate the structured XML using PBDOM since we have the data in the nested Structures.
My structure definition is something like attached which has nested structures in it and I would like to generate the XML using PBDOM which can be formed like the attached XML.
The XML I want should be something like below:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="servlet.sam.can.tan.com" xmlns:wsto="http://wsto.sam.can.tan.com">
<soapenv:Header>
<soapenv:Body>
<ser:saveCurrentPosition>
<wsto:positionTO>
<wsto:positionCode>?</wsto:positionCode>
<wsto:loan>
<!--Zero or more repetitions:-->
<ser:item>
<wsto:loanId>?</wsto:loanId>
<wsto:extAccountId>?</wsto:extAccountId>
<wsto:creditApplId>?</wsto:creditApplId>
<wsto:creditApplLoanId>?</wsto:creditApplLoanId>
<wsto:accountNum>?</wsto:accountNum>
<wsto:bsbNum>?</wsto:bsbNum>
<wsto:loanTypeCd>?</wsto:loanTypeCd>
<wsto:productCd>?</wsto:productCd>
<wsto:productNameLong>?</wsto:productNameLong>
<wsto:productNameShort>?</wsto:productNameShort>
<wsto:interestRatePct>?</wsto:interestRatePct>
<wsto:originalLoanAmt>?</wsto:originalLoanAmt>
<wsto:balanceAmt>?</wsto:balanceAmt>
<wsto:interestCapFlag>?</wsto:interestCapFlag>
<wsto:originalLoanTerm>?</wsto:originalLoanTerm>
<wsto:firstHomeBuyerFlag>?</wsto:firstHomeBuyerFlag>
<wsto:remainingLoanTerm>?</wsto:remainingLoanTerm>
<wsto:lendingLimitAmt>?</wsto:lendingLimitAmt>
<wsto:llvrBalanceAmount>?</wsto:llvrBalanceAmount>
<wsto:loanRepaymentAmt>?</wsto:loanRepaymentAmt>
<wsto:lenderCd>?</wsto:lenderCd>
<wsto:lenderName>?</wsto:lenderName>
<wsto:lenderContactName>?</wsto:lenderContactName>
<wsto:addressId>?</wsto:addressId>
<wsto:specialConcessionCd>?</wsto:specialConcessionCd>
<wsto:borrowerTypeCd>?</wsto:borrowerTypeCd>
<wsto:securitisedLoanFlag>?</wsto:securitisedLoanFlag>
<wsto:loanPaidOutFlag>?</wsto:loanPaidOutFlag>
<wsto:closingFlag>?</wsto:closingFlag>
<wsto:paymentTypeCd>?</wsto:paymentTypeCd>
<wsto:updateSequenceId>?</wsto:updateSequenceId>
<wsto:dmSourceCd>?</wsto:dmSourceCd>
<wsto:deleteFlag>?</wsto:deleteFlag>
<wsto:dataStateTO>
<wsto:modificationStatus>?</wsto:modificationStatus>
<wsto:source>?</wsto:source>
</wsto:dataStateTO>
</ser:item>
</wsto:loan>
</wsto:positionTO>
</ser:saveCurrentPosition>
</soapenv:Body>
</soapenv:Header>
</soapenv:Envelope >
I have used below code but it is not generating the namespace on the new element which is being added:
lpbdom_builder = Create PBDOM_Builder
lpbdom_doc = lpbdom_builder.BuildFromString(ls_xml)
root_element = lpbdom_doc.GetRootElement()
ls_Text = root_element.GetName()
root_element.AddNameSpaceDeclaration('wsto',"http://wsto.sam.edscs.eds.com")
root_element.SetNameSpace('wsto',"http://wsto.sam.edscs.eds.com",false)
root_element.AddNameSpaceDeclaration('ser',"servlet.sam.edscs.eds.com")
root_element.SetNameSpace('ser',"servlet.sam.edscs.eds.com",false)
root_element.AddNameSpaceDeclaration('soapenv',"http://schemas.xmlsoap.org/soap/envelope/")
root_element.SetNameSpace('soapenv',"http://schemas.xmlsoap.org/soap/envelope/",false)
root_element.GetContent(lpbdom_obj)
lpbdom_element2 = Create PBDOM_Element
lpbdom_element2.SetName("Header")
root_element.AddContent(lpbdom_element2)
ls_attribute_name = lpbdom_doc.SaveDocumentIntoString()
Similarly this XML is nested structure so how to add child element under the nested structure.