From 7aa3e4692b717c5cb9abf9eff2043f7b8fc4c972 Mon Sep 17 00:00:00 2001 From: Terekhin Alexander Date: Fri, 21 Aug 2020 13:38:10 +0300 Subject: [PATCH] Json rest API (untested) --- pom.xml | 26 --- .../me/bearns/fias/domain/FiasVersion.java | 7 + .../fias/service/OnlineVersionImpl.java | 50 ++++++ .../me/bearns/fias/service/SOAPClient.java | 155 ------------------ 4 files changed, 57 insertions(+), 181 deletions(-) create mode 100644 src/main/java/me/bearns/fias/service/OnlineVersionImpl.java delete mode 100644 src/main/java/me/bearns/fias/service/SOAPClient.java diff --git a/pom.xml b/pom.xml index a4edc34..0f5cc95 100644 --- a/pom.xml +++ b/pom.xml @@ -72,32 +72,6 @@ - - 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/domain/FiasVersion.java b/src/main/java/me/bearns/fias/domain/FiasVersion.java index 0082ed0..cc482ad 100644 --- a/src/main/java/me/bearns/fias/domain/FiasVersion.java +++ b/src/main/java/me/bearns/fias/domain/FiasVersion.java @@ -1,5 +1,7 @@ package me.bearns.fias.domain; +import com.fasterxml.jackson.annotation.JsonAlias; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import lombok.ToString; import javax.persistence.Column; @@ -8,6 +10,7 @@ import javax.persistence.Entity; import javax.persistence.Table; @ToString +@JsonIgnoreProperties(ignoreUnknown = true) @Entity @Table(name = "version") public class FiasVersion { @@ -24,15 +27,19 @@ public class FiasVersion { @Id @Column(name = "version_id") + @JsonAlias("VersionId") protected Long versionId; @Column(name = "version_txt") + @JsonAlias("TextVersion") protected String textVersion; @Column(name = "xml_url") + @JsonAlias("FiasCompleteXmlUrl") protected String fiasCompleteXmlUrl; @Column(name = "delta_xml_url") + @JsonAlias("FiasDeltaXmlUrl") protected String fiasDeltaXmlUrl; @Column(name = "regions") diff --git a/src/main/java/me/bearns/fias/service/OnlineVersionImpl.java b/src/main/java/me/bearns/fias/service/OnlineVersionImpl.java new file mode 100644 index 0000000..c890860 --- /dev/null +++ b/src/main/java/me/bearns/fias/service/OnlineVersionImpl.java @@ -0,0 +1,50 @@ +package me.bearns.fias.service; + +import lombok.AllArgsConstructor; +import me.bearns.fias.domain.FiasVersion; +import org.springframework.web.client.RestTemplate; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + +@AllArgsConstructor +public class OnlineVersionImpl implements OnlineVersion{ + + private static final String GET_ALL_FILE_INFO = "http://fias.nalog.ru/WebServices/Public/GetAllDownloadFileInfo"; + private static final String GET_LAST_FILE_INFO = "http://fias.nalog.ru/WebServices/Public/GetLastDownloadFileInfo"; + + RestTemplate client; + + @Override + public long getLastVersionId() { + + final FiasVersion version = client.getForObject(GET_LAST_FILE_INFO, FiasVersion.class); + + if(version != null) return version.getVersionId(); + + return 0; //todo + } + + @Override + public List getVersionsAfter(long version) { + + final FiasVersion[] versions = client.getForObject(GET_ALL_FILE_INFO, FiasVersion[].class); + + if(versions != null) { + return Arrays.stream(versions).filter(v -> v.getVersionId() > version).collect(Collectors.toList()); + } + + return null; //todo + } + + @Override + public List getLastVersion() { + List versions = new ArrayList<>(); + + versions.add(client.getForObject(GET_LAST_FILE_INFO, FiasVersion.class)); + + return versions; //todo + } +} diff --git a/src/main/java/me/bearns/fias/service/SOAPClient.java b/src/main/java/me/bearns/fias/service/SOAPClient.java deleted file mode 100644 index 66e9106..0000000 --- a/src/main/java/me/bearns/fias/service/SOAPClient.java +++ /dev/null @@ -1,155 +0,0 @@ -package me.bearns.fias.service; - -import lombok.extern.slf4j.Slf4j; -import me.bearns.fias.domain.FiasVersion; -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.ws.BindingProvider; -import java.io.File; -import java.io.InputStream; -import java.net.URL; -import java.nio.file.Files; -import java.nio.file.StandardCopyOption; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.stream.Collectors; - -import static javax.xml.ws.BindingProvider.ENDPOINT_ADDRESS_PROPERTY; - -@Slf4j -@Component -public class SOAPClient implements OnlineVersion { - - private final static String RESOURCE_WSDL = "/DownloadService.wsdl"; - - IDownloadService downloadService; - - public SOAPClient() { - - log.info("Init SOAP client"); - - try (InputStream stream = getClass().getResourceAsStream(RESOURCE_WSDL)) { - - final File tempFile = File.createTempFile(RESOURCE_WSDL, "tmp"); - - tempFile.deleteOnExit(); - - if(Files.copy(stream, tempFile.toPath(), StandardCopyOption.REPLACE_EXISTING) > 0) { - - //copy some bytes ok - log.debug("WSDL saved to tmp file, try to init service"); - - //Init soap client - IDownloadService_Service service = new IDownloadService_Service(tempFile.toURI().toURL()); - - downloadService = service.getBasicHttpBindingIDownloadService(); - - log.debug("Service ok, enable redirect hook"); - - setRedirect(downloadService); - - log.info("SOAP client init completed"); - } - - }catch (Exception e) { - log.error("Caught exception while init SOAP client"); - } - } - - @Override - public long getLastVersionId() { - - FiasVersion last = getLast(); - if(last != null) return last.getVersionId(); - - return 0; - } - - @Override - public List getVersionsAfter(long version) { - - final ArrayOfDownloadFileInfo allDownloadFileInfo = downloadService.getAllDownloadFileInfo(); - - if(allDownloadFileInfo != null) { - - final List fileInfos = allDownloadFileInfo.getDownloadFileInfo(); - - if(fileInfos != null) { - return fileInfos.stream() - .filter(f -> f.getVersionId() > version) - .map(f -> new FiasVersion(f.getVersionId(),f.getTextVersion(),f.getFiasCompleteXmlUrl(),f.getFiasDeltaXmlUrl())) - .collect(Collectors.toList()); - } - } - - return null; - } - - @Override - public List getLastVersion() { - - final FiasVersion last = getLast(); - - if(last != null) { - - final ArrayList list = new ArrayList<>(1); - list.add(last); - - return list; - } - - return null; - } - - private FiasVersion getLast() { - - DownloadFileInfo fileInfo = downloadService.getLastDownloadFileInfo(); - - if(fileInfo !=null) { - - //TODO check null in getVersionId() - - return new FiasVersion(fileInfo.getVersionId(), fileInfo.getTextVersion(), fileInfo.getFiasCompleteXmlUrl(), fileInfo.getFiasDeltaXmlUrl()); - } - - return null; - } - - private static void setRedirect(final Object bindingProvider) { - try { - if(bindingProvider instanceof BindingProvider) { - - Map requestContext = ((BindingProvider) bindingProvider).getRequestContext(); - - Object endpoint = requestContext.get(ENDPOINT_ADDRESS_PROPERTY); - - if(endpoint instanceof String) { - - final URL url = new URL((String) endpoint); - - 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 redirect = connection.getHeaderField("location"); - - requestContext.put(ENDPOINT_ADDRESS_PROPERTY, redirect); - } - } - } - } catch(final Exception e) { - log.error("Endpoint redirect not set"); - } - } -}