GUS Api

JD
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad rok
  • Postów:1
1

Piszę prostą apkę która komunikuję się z api GUS i po nipie pobiera dane. Używają SOAP którego nie zbyt ogarniam. Udało mi się wygenerować klienta z pliku wsdl, według ich instrukcji. Następnie robię tak jak podają

Kopiuj
UslugaBIRzewnPubl service = new UslugaBIRzewnPubl();
service.setHandlerResolver(new SoapHandlerResolver()); //<- doklejanie SID'a do HTTP HEADER
IUslugaBIRzewnPubl port = service.getE3(new AddressingFeature());
String statusUslugi = "StatusUslugi";
String result = port.getValue(statusUslugi);
// logowanie, jezeli sesja wygasla, badx logowanie pierwszy raz
if ((SoapMessageHandler.sessionCookie.equals("")) || (! result.equals("1"))){
	String sid = port.zaloguj("abcde12345abcde12345");
	SoapMessageHandler.sessionCookie = sid;	
}
// przykład wyszukiwania po NIPie
ObjectFactory objectFactory = new ObjectFactory();
JAXBElement<String> nipParam = objectFactory.createParametryWyszukiwaniaNip("1234567890");
ParametryWyszukiwania parametryWyszukiwania = new ParametryWyszukiwania();
parametryWyszukiwania.setNip(nipParam);
String raport = port.daneSzukaj(parametryWyszukiwania);

raport zwraca mi Stringa w postaci

Kopiuj
<root>
  <dane>
    <Regon>jakis regon</Regon>
    <RegonLink><a href='javascript:danePobierzPelnyRaport("00000000000","DaneRaportFizycznaPubl", 1);'>00000000</a></RegonLink>
    <Nazwa>jakas nazwa firmy</Nazwa>
    <Wojewodztwo>jakies wojew</Wojewodztwo>
    <Powiat>jakis powiat</Powiat>
    <Gmina>jakas gmina</Gmina>
    <Miejscowosc>miejscowosc</Miejscowosc>
    <KodPocztowy>kod [pcz</KodPocztowy>
    <Ulica>jakas uli</Ulica>
    <Typ>F</Typ>
    <SilosID>1</SilosID>
  </dane>
</root>

Chciałbym teraz stworzyć obiekt i wyciągnąć do niego tylko np. regon i nazwę.

edytowany 1x, ostatnio: javDev
IN
  • Rejestracja:około 9 lat
  • Ostatnio:około 5 lat
  • Postów:17
1

Jeśli udało Ci się wygenerować klienta z wsdla to powinieneś mieć również wygenerowaną klasę reprezentującą obiekt responsa. Ogólnie rzecz biorąc musisz zrobić teraz unmarshalowanie.
Poczytaj np. tutaj na ten temat: https://examples.javacodegeeks.com/core-java/xml/bind/jaxb-unmarshal-example/

K9
  • Rejestracja:ponad 6 lat
  • Ostatnio:około 5 lat
  • Postów:1
0

W jaki sposób wygenerowałeś klienta, że masz klasę SoapHandlerResolver? Chyba, że ją napisałeś? Mam problem, ponieważ mam wygenerowane wszystkie klasy api gus, ale znikąd nie mogę zaciągnąć SoapHandlerResolver oraz SoapMessageHandler.

edytowany 1x, ostatnio: kam992
JD
Na tym repo jest przykład
0

na github masz prosty przykład:

0

na github masz przykład na json: https://github.com/KulaKrzysztof/GUS-API---PHP napisane przez pracownika socware

MM
  • Rejestracja:ponad 7 lat
  • Ostatnio:prawie 2 lata
  • Postów:28
0

Przykład rozkminy funkcji "zaloguj"
Wyciągnięcie klucza sesji z zwróconego obiektu wygląda tak:
obj['s:Envelope']['s:Body']['ZalogujResponse']['ZalogujResult']['#text'];
Do konwersji XML na JSON użyte to:
https://davidwalsh.name/convert-xml-json

W Javie można by napisać lub użyć podobną klasę konwersji XML do JSON

Kopiuj
    let xhr = new XMLHttpRequest();
    const proxy = 'https://cors-anywhere.herokuapp.com/';
    const url = 'https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc';
    let sr = '<?xml version="1.0" encoding="UTF-8"?><soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:ns="http://CIS/BIR/PUBL/2014/07"><soap:Header xmlns:wsa="http://www.w3.org/2005/08/addressing"><wsa:To>https://wyszukiwarkaregontest.stat.gov.pl/wsBIR/UslugaBIRzewnPubl.svc</wsa:To><wsa:Action>http://CIS/BIR/PUBL/2014/07/IUslugaBIRzewnPubl/Zaloguj</wsa:Action></soap:Header><soap:Body><ns:Zaloguj><ns:pKluczUzytkownika>abcde12345abcde12345</ns:pKluczUzytkownika></ns:Zaloguj></soap:Body></soap:Envelope>';

    xhr.open('POST', proxy + url, true);

    xhr.onreadystatechange = function() {
        if (xhr.readyState == 4) {
            if (xhr.status == 200) {
				let resp=xhr.response;
				resp = resp.substring(resp.indexOf("<s:Envelope"), (resp.indexOf("</s:Envelope>")) + 13);
				let parser = new DOMParser();
				resp = parser.parseFromString(resp,"text/xml");
				let obj=xmlToJson(resp);
				console.log(obj);
            }
        }
    }

    xhr.setRequestHeader('Content-Type', 'application/soap+xml; charset=utf-8');
    xhr.send(sr);```
edytowany 6x, ostatnio: mmilch

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.