Commit d621179e by Patryk Czarnik

GetCountryInfo - wersja z pętlą i XPath

parent 390e1af9
package saaj_klient.countries;
import jakarta.xml.soap.*;
import org.w3c.dom.NodeList;
import javax.swing.*;
import javax.xml.namespace.NamespaceContext;
import javax.xml.namespace.QName;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import java.util.Scanner;
public class GetCountryInfo_Interaktywnie {
static final String NS = "http://www.oorsprong.org/websamples.countryinfo";
public static void main(String[] args) {
NamespaceContext nsCtx = new NamespaceContext() {
@Override
public String getNamespaceURI(String prefix) {
if("w".equals(prefix))
return NS;
return null;
}
@Override
public String getPrefix(String namespaceURI) {
if(NS.equals(namespaceURI))
return "w";
return null;
}
@Override
public Iterator<String> getPrefixes(String namespaceURI) {
return List.of("w").iterator();
}
};
try {
MessageFactory mf = MessageFactory.newInstance();
SOAPConnectionFactory scf = SOAPConnectionFactory.newInstance();
XPathFactory xpf = XPathFactory.newInstance();
XPath xpath = xpf.newXPath();
xpath.setNamespaceContext(nsCtx);
Scanner scanner = new Scanner(System.in);
try (SOAPConnection connection = scf.createConnection()) {
while(true) {
System.out.print("Podaj kod kraju: ");
String szukanyKraj = scanner.nextLine();
if(szukanyKraj.isEmpty()) break;
SOAPMessage request = mf.createMessage();
SOAPBody requestBody = request.getSOAPBody();
SOAPBodyElement fullCountryInfo = requestBody.addBodyElement(new QName(NS, "FullCountryInfo"));
SOAPElement parametr = fullCountryInfo.addChildElement(new QName(NS, "sCountryISOCode"));
parametr.setTextContent(szukanyKraj);
System.out.println("Zapytanie:");
request.writeTo(System.out);
System.out.println("\n\nWysyłam...");
SOAPMessage response = connection.call(request, "http://webservices.oorsprong.org/websamples.countryinfo/CountryInfoService.wso");
SOAPBody responseBody = response.getSOAPBody();
System.out.println("Mam odpowiedź:");
response.writeTo(System.out);
System.out.println();
System.out.println("Nazwa kraju: " + xpath.evaluate(".//w:sName", responseBody));
System.out.println("Stolica: " + xpath.evaluate(".//w:sCapitalCity", responseBody));
System.out.println("Waluta: " + xpath.evaluate(".//w:sCurrencyISOCode", responseBody));
System.out.println("Języki:");
NodeList languages = (NodeList) xpath.evaluate(".//w:tLanguage", responseBody, XPathConstants.NODESET);
final int n = languages.getLength();
for (int i = 0; i < n; i++) {
String lang = xpath.evaluate("w:sName", languages.item(i));
System.out.println(" * " + lang);
}
}
}
} catch (SOAPException | IOException | XPathExpressionException e) {
e.printStackTrace();
}
}
private static String getSingleElement(SOAPMessage response, String elementName) throws SOAPException {
NodeList znalezione = response.getSOAPBody().getElementsByTagNameNS(NS, elementName);
String wynik = null;
if(znalezione.getLength() > 0) {
wynik = znalezione.item(0).getTextContent();
}
return wynik;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment