Siemanko! Pisze aplikacje na studia i mam pewien problem z połączeniem z serwerem API GUS. Czy mógłby ktoś zweryfikować czy to co obecnie posiadam jest w jakimś stopniu poprawne i w którym miejscu mam błąd? Serwer zwraca mi błąd 400. Natomiast jak porównuje jakie ma być wysłane żądanie do mojego wysłanego to za bardzo nie mogę zlokalizować problemu.
Z góry dzięki za pomoc
public GusApiService() {
SaajSoapMessageFactory messageFactory = new SaajSoapMessageFactory();
messageFactory.afterPropertiesSet();
this.webServiceTemplate = new WebServiceTemplate(messageFactory);
Jaxb2Marshaller marshaller = new Jaxb2Marshaller();
marshaller.setClassesToBeBound(SoapRequest.class, SoapResponse.class, ObjectFactory.class);
marshaller.setMtomEnabled(true);
this.webServiceTemplate.setMarshaller(marshaller);
this.webServiceTemplate.setUnmarshaller(marshaller);
HttpComponentsMessageSender sender = new HttpComponentsMessageSender();
sender.setConnectionTimeout(5000);
sender.setReadTimeout(10000);
this.webServiceTemplate.setMessageSender(sender);
}
public void login() {
System.out.println("🔄 Logowanie do GUS...");
String requestXml = String.format("""
<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>%s</ns:pKluczUzytkownika>
</ns:Zaloguj>
</soap:Body>
</soap:Envelope>
""", API_KEY);
System.out.println("📤 Wysyłane XML (logowanie):");
System.out.println(requestXml);
try {
SoapResponse response = (SoapResponse) webServiceTemplate.marshalSendAndReceive(
LOGIN_URL,
new SoapRequest(requestXml),
new CustomSoapActionCallback("")
);
System.out.println("✅ Odpowiedź serwera GUS (logowanie): " + response.getResult());
this.sessionId = response.getResult();
if (sessionId == null || sessionId.isEmpty()) {
throw new RuntimeException("❌ Nie udało się pobrać sessionId.");
}
System.out.println("✅ Zalogowano do GUS, sessionId: " + sessionId);
} catch (Exception ex) {
System.err.println("❌ Błąd logowania do GUS: " + ex.getMessage());
throw new RuntimeException("Błąd logowania do GUS.", ex);
}
}