From be9dc4f97df99e356b848ddc1c9be10135b98254 Mon Sep 17 00:00:00 2001 From: bearns Date: Thu, 16 Apr 2020 00:31:52 +0300 Subject: [PATCH] Version's list from SOAP webservice with redirect --- pom.xml | 26 ++++++ .../me/bearns/fias/service/FiasUpdater.java | 85 +++++++++++++++++++ .../java/me/bearns/fias/service/Updater.java | 10 +++ src/main/java/me/bearns/fias/webapi/API.java | 18 ++++ src/main/resources/DownloadService.wsdl | 1 + .../db/changelog/db.changelog-master.yaml | 4 + 6 files changed, 144 insertions(+) create mode 100644 src/main/java/me/bearns/fias/service/FiasUpdater.java create mode 100644 src/main/java/me/bearns/fias/service/Updater.java create mode 100644 src/main/java/me/bearns/fias/webapi/API.java create mode 100644 src/main/resources/DownloadService.wsdl create mode 100644 src/main/resources/db/changelog/db.changelog-master.yaml diff --git a/pom.xml b/pom.xml index 7db2210..5037c4f 100644 --- a/pom.xml +++ b/pom.xml @@ -56,6 +56,32 @@ + + org.apache.cxf + cxf-codegen-plugin + 3.3.6 + + + generate-sources + generate-sources + + ${project.build.directory}/generated-sources/cxf + + + + -p + ru.nalog.fias + + ${basedir}/src/main/resources/DownloadService.wsdl + + + + + wsdl2java + + + + org.springframework.boot spring-boot-maven-plugin diff --git a/src/main/java/me/bearns/fias/service/FiasUpdater.java b/src/main/java/me/bearns/fias/service/FiasUpdater.java new file mode 100644 index 0000000..05edd32 --- /dev/null +++ b/src/main/java/me/bearns/fias/service/FiasUpdater.java @@ -0,0 +1,85 @@ +package me.bearns.fias.service; + +import org.springframework.stereotype.Component; +import ru.nalog.fias.ArrayOfDownloadFileInfo; +import ru.nalog.fias.DownloadFileInfo; +import ru.nalog.fias.IDownloadService; +import ru.nalog.fias.IDownloadService_Service; +import sun.net.www.protocol.http.HttpURLConnection; + +import javax.xml.namespace.QName; +import javax.xml.ws.Binding; +import javax.xml.ws.BindingProvider; +import java.net.URL; +import java.util.Map; + +import static javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY; +import static ru.nalog.fias.IDownloadService_Service.BasicHttpBindingIDownloadService; + +@Component +public class FiasUpdater implements Updater { + @Override + public void update() { + + IDownloadService_Service service = new IDownloadService_Service(); + + //QName BasicHttpBindingIDownloadService = new QName("https://fias.nalog.ru/WebServices/Public/DownloadService.asmx/", "BasicHttpBinding_IDownloadService"); + //String wsUrl="http://fias.nalog.ru/WebServices/Public/DownloadService.asmx"; + + //service.addPort(BasicHttpBindingIDownloadService, javax.xml.ws.soap.SOAPBinding.SOAP12HTTP_BINDING, wsUrl); + IDownloadService downloadService = service.getBasicHttpBindingIDownloadService(); + + + //BindingProvider bindingProvider = (BindingProvider) service.getPort(IDownloadService.class); + //Map map = bindingProvider.getRequestContext(); + + //map.put(ENDPOINT_ADDRESS_PROPERTY, "https://fias.nalog.ru/WebServices/Public/DownloadService.asmx"); + + if(downloadService instanceof BindingProvider ) { + + checkRedirect((BindingProvider) downloadService); + } + + + + //HttpURLConnection.setFollowRedirects(true); + //BindingProvider.ENDPOINT_ADDRESS_PROPERTY + + + ArrayOfDownloadFileInfo info = downloadService.getAllDownloadFileInfo(); + + if(info != null){ + for (DownloadFileInfo fileInfo : info.getDownloadFileInfo()) { + System.out.println("id=" + fileInfo.getVersionId()); + System.out.println("text=" + fileInfo.getTextVersion()); + System.out.println("full=" + fileInfo.getFiasCompleteXmlUrl()); + System.out.println("delta" + fileInfo.getFiasDeltaXmlUrl()); + } + + } + + System.out.println("get Ok"); + } + + private static void checkRedirect(final BindingProvider bindingProvider) { + try { + final URL url = new URL((String) bindingProvider.getRequestContext().get(ENDPOINT_ADDRESS_PROPERTY)); + + final HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setInstanceFollowRedirects(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "text/html; charset='UTF-8'"); + connection.setDoOutput(true); + + final int responseCode = connection.getResponseCode(); + + if(responseCode >= 300 && responseCode < 400) { + final String redirectToUrl = connection.getHeaderField("location"); + + bindingProvider.getRequestContext().put(ENDPOINT_ADDRESS_PROPERTY, redirectToUrl); + } + } catch(final Exception e) { + e.printStackTrace(); + } + } +} \ No newline at end of file diff --git a/src/main/java/me/bearns/fias/service/Updater.java b/src/main/java/me/bearns/fias/service/Updater.java new file mode 100644 index 0000000..85c7697 --- /dev/null +++ b/src/main/java/me/bearns/fias/service/Updater.java @@ -0,0 +1,10 @@ +package me.bearns.fias.service; + +public interface Updater { + + + /** + * Run online update for fias database + */ + public void update(); +} diff --git a/src/main/java/me/bearns/fias/webapi/API.java b/src/main/java/me/bearns/fias/webapi/API.java new file mode 100644 index 0000000..4f05dbb --- /dev/null +++ b/src/main/java/me/bearns/fias/webapi/API.java @@ -0,0 +1,18 @@ +package me.bearns.fias.webapi; + +import me.bearns.fias.service.Updater; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class API { + + @Autowired + Updater service; + + @GetMapping("/update") + void update(){ + service.update(); + } +} diff --git a/src/main/resources/DownloadService.wsdl b/src/main/resources/DownloadService.wsdl new file mode 100644 index 0000000..5c9b07b --- /dev/null +++ b/src/main/resources/DownloadService.wsdl @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/main/resources/db/changelog/db.changelog-master.yaml b/src/main/resources/db/changelog/db.changelog-master.yaml new file mode 100644 index 0000000..c98330b --- /dev/null +++ b/src/main/resources/db/changelog/db.changelog-master.yaml @@ -0,0 +1,4 @@ +databaseChangeLog: + - changeSet: + id: 1 + author: alex@bearns.me \ No newline at end of file