срез SOAP-ответа с JAVA

63
9

Мне нужно получить тело ответа SOAP, но у тела есть ребенок, который является родителем содержимого, в котором я нуждаюсь, и я не знаю, как удержать этого ребенка в теле.

Отклик:

<?xml version="1.0" encoding="UTF-8"?>
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:consultaCEPResponse xmlns:ns2="http://cliente.bean.master.sigep.bsb.correios.com.br/">
<return>
<bairro>Asa Norte</bairro>
<cep>70002900</cep>
<cidade>Brasilia</cidade>
<complemento />
<complemento2 />
<end>SBN Quadra 1 Bloco A</end>
<id>0</id>
<uf>DF</uf>
</return>
</ns2:consultaCEPResponse>
</soap:Body>
</soap:Envelope>

Я хочу "bairro", "cep", "cidade" и т.д.

Код, который я использую, чтобы получить ответ:

SOAPMessage rp = conn.call(msg, urlval);

// I tried this, but didn't work
//QName bodyName = new QName("http://cliente.bean.master.sigep.bsb.correios.com.br/", "consultaCEPResponse", "ns2");

Iterator itr = rp.getSOAPBody().getChildElements(bodyName);
while (itr.hasNext()) {
Node node = (Node) itr.next();
if (node.getNodeType() == Node.ELEMENT_NODE) {
Element ele = (Element) node;
System.out.println("\n" + ele.getNodeName() + " = " + ele.getTextContent());
}
}

спросил(а) 2021-01-19T23:05:19+03:00 2 месяца, 3 недели назад
1
Решение
115

Я бы использовал getElementsByTagName() чтобы получить элемент <return>, а затем просто найти его детей, используя getChildNodes()

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\"><soap:Body><ns2:consultaCEPResponse xmlns:ns2=\"http://cliente.bean.master.sigep.bsb.correios.com.br/\"><return><bairro>Asa Norte</bairro><cep>70002900</cep><cidade>Brasilia</cidade><complemento /><complemento2 /><end>SBN Quadra 1 Bloco A</end><id>0</id><uf>DF</uf></return></ns2:consultaCEPResponse></soap:Body></soap:Envelope>";
SOAPMessage rp = MessageFactory.newInstance().createMessage(null, new ByteArrayInputStream(xml.getBytes()));

NodeList returnNodes = rp.getSOAPBody().getElementsByTagName("return");
if (returnNodes.getLength() == 1) {
Node returnNode = returnNodes.item(0);
NodeList elements = returnNode.getChildNodes();
for (int i = 0; i < elements.getLength(); i++) {
Node node = elements.item(i);
System.out.println(node.getNodeName() + " = " + node.getTextContent());
}
} else {
// handle empty response case
}

Вывод

bairro = Asa Norte
cep = 70002900
cidade = Brasilia
complemento =
complemento2 =
end = SBN Quadra 1 Bloco A
id = 0
uf = DF

ответил(а) 2021-01-19T23:05:19+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема