Как я могу вернуть определенные значения из проанализированной строки XML - PullRequest
0 голосов
/ 20 сентября 2019

Я пытаюсь обработать ответ шлюза XML от нашего процессора шлюза онлайн-платежей в потоке.Затем возьмите эти переменные, чтобы обновить различные записи о контактах, возможностях и транзакциях.Я борюсь с получением значений из XML

. Я просто не очень разбираюсь в XML Parseing, поэтому сначала пытаюсь вернуть нужные мне значения, а потом могу беспокоиться о том, чтобы повторить их из@ invocablemethod.

String trans = '<?xml version="1.0" encoding="utf-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><soap:Body><DirectPaymentResponse xmlns="https://api.ewaypaymentscom/"><DirectPaymentResult><AuthorisationCode>0000C</AuthorisationCode><ResponseCode>00</ResponseCode><ResponseMessage>A2000</ResponseMessage><TransactionID>0000003</TransactionID><TransactionStatus>true</TransactionStatus><TransactionType>MOTO</TransactionType><BeagleScore>0.6</BeagleScore><Verification><CVN>Unchecked</CVN><Address>Unchecked</Address><Email>Unchecked</Email><Mobile>Unchecked</Mobile><Phone>Unchecked</Phone></Verification><Customer><TokenCustomerID>66666666</TokenCustomerID><Reference>Reference</Reference><Title>Mr.</Title><FirstName>aan</FirstName><LastName>McDat</LastName><CompanyName>Perkins</CompanyName><JobDescription>Officer</JobDescription><Street1>23 Verdun Street</Street1><Street2 /><City>Nedlands</City><State>WA</State><PostalCode>6009</PostalCode><Country>au</Country><Email>t@perkins.org.au</Email><Phone>0811111111</Phone><Mobile>0422222222</Mobile><Comments>Hi there</Comments><Fax /><Url>perkins.org.au</Url><CardDetails><Number>452012XXXXX9</Number><Name>ASd estt</Name><ExpiryMonth>1</ExpiryMonth><ExpiryYear>19</ExpiryYear><StartMonth /><StartYear /><IssueNumber /><CVN /></CardDetails></Customer><Payment><TotalAmount>200</TotalAmount><InvoiceNumber>0067F00000UmnAJ</InvoiceNumber><InvoiceDescription /><InvoiceReference /><CurrencyCode>AUD</CurrencyCode></Payment></DirectPaymentResult></DirectPaymentResponse></soap:Body></soap:Envelope>';

Над строкой, которую я получаю

Dom.Document doc = new Dom.Document();
Doc.load(trans);

Затем я работаю вниз по узлам, чтобы попытаться получить значения.

Dom.XmlNode Env = doc.getRootElement();
system.debug('Root Element'+doc.getRootElement());

Dom.XmlNode body = Env.getChildElement('Body', 'http://www.w3.org/2003/05/soap-envelope');
system.debug('Child Element'+Env.getChildElement('Body', 'http://www.w3.org/2003/05/soap-envelope'));

List<Dom.XmlNode> cElements = Env.getChildElements();
system.debug('Child Elements'+Env.getChildElements());

Dom.XmlNode DirectPR = body.getChildElement('DirectPaymentResponse','https://api.ewaypaymentscom/');


system.debug('DirectPR'+body.getChildElement('DirectPaymentResponse','https://api.ewaypaymentscom/'));

Dom.XmlNode DirectPResult = DirectPR.getChildElement('DirectPaymentResult','https://api.ewaypaymentscom/');
system.debug('Direct Payment Results'+DirectPR.getChildElement('DirectPaymentResult','https://api.ewaypaymentscom/'));

Dom.XmlNode AuthCodes = DirectPResult.getChildElement('AuthorisationCode', 'https://api.ewaypaymentscom/');
system.debug('Auth Element '+DirectPResult.getChildElement('AuthorisationCode', 'https://api.ewaypaymentscom/'));

Dom.XmlNode AUText = AuthCodes.getChildElement('Text', 'https://api.ewaypaymentscom/');
system.debug('Auth Element '+AuthCodes.getChildElement('Text', 'https://api.ewaypaymentscom/'));

String Conde = AuthCodes.getAttributeValue('AuthorisationCode', 'https://api.ewaypaymentscom/');
system.debug('Auth Code; '+AuthCodes.getAttributeValue('AuthorisationCode', 'https://api.ewaypaymentscom/'));`

Я пытался вернуть значения, но продолжаю получать сообщение: «Произошла ошибка: произошла ошибка Apex: System.NullPointerException: попытка отменить ссылку на нулевой объект»и не {'Но не могу повторить эту проблему.Обратите внимание, что я удалил точки из «api.ewaypaymentscom», так как он позволяет мне включать только 10. Если я удалил их из метода getChildElement, он возвращает только ноль.В настоящее время я использую окно «Выполнить анон» для проверки кода, но хочу использовать его в классе вызываемого метода.

1 Ответ

0 голосов
/ 20 сентября 2019

Ааа, я понял, я могу вытянуть значения на

string AuthcodeTXT = AuthCodes.getText();
system.debug('Auth Code Text: '+ AuthCodes.getText());

И он возвращает '0000C'

...