Commit 08d4392b authored by WojciechK's avatar WojciechK

Poprawki w formacie wynikowym JSON

parent 78c3f2bd
...@@ -51,7 +51,11 @@ ...@@ -51,7 +51,11 @@
<artifactId>spring-boot-devtools</artifactId> <artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope> <scope>runtime</scope>
</dependency> </dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.8</version>
</dependency>
<!-- JAXB API --> <!-- JAXB API -->
<dependency> <dependency>
<groupId>jakarta.xml.bind</groupId> <groupId>jakarta.xml.bind</groupId>
...@@ -81,6 +85,12 @@ ...@@ -81,6 +85,12 @@
<artifactId>commons-lang3</artifactId> <artifactId>commons-lang3</artifactId>
<version>3.17.0</version> <version>3.17.0</version>
</dependency> </dependency>
<!-- https://mvnrepository.com/artifact/com.google.code.gson/gson -->
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.13.1</version>
</dependency>
</dependencies> </dependencies>
<build> <build>
<finalName>gus-rest-server</finalName> <finalName>gus-rest-server</finalName>
......
...@@ -4,6 +4,12 @@ import com.framework.tools.gus.soap.CompanyInfo; ...@@ -4,6 +4,12 @@ import com.framework.tools.gus.soap.CompanyInfo;
import com.framework.tools.gus.soap.GusException; import com.framework.tools.gus.soap.GusException;
import com.framework.tools.gus.soap.GusSoapClient; import com.framework.tools.gus.soap.GusSoapClient;
import com.framework.tools.gus.ws.*; import com.framework.tools.gus.ws.*;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Content;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.responses.ApiResponse;
import io.swagger.v3.oas.annotations.responses.ApiResponses;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
...@@ -29,8 +35,18 @@ public class GusController { ...@@ -29,8 +35,18 @@ public class GusController {
@Autowired @Autowired
private SoapClientConfig.ConnectionConfig connectionConfig; private SoapClientConfig.ConnectionConfig connectionConfig;
@Operation(summary = "Get company info by NIP. Returns address and PKD list.")
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "Found the company",
content = { @Content(mediaType = "application/json",
schema = @Schema(implementation = CompanyInfo.class)) }),
@ApiResponse(responseCode = "429", description = "Too many requests",
content = @Content),
@ApiResponse(responseCode = "500", description = "Internal server error",
content = @Content) })
@GetMapping(path="/gus", produces="application/json") @GetMapping(path="/gus", produces="application/json")
public ResponseEntity<CompanyInfo> getCompanyInfo(@RequestParam String nip, @RequestParam(required = false) String key) { public ResponseEntity<String> getCompanyInfo(@RequestParam String nip,
@RequestParam(required = false) @Parameter(description = "API key for REGON service. For production you need to obtain it from REGON support. For test purposes use 'test' as a key. Production key can also be configured as environment variable GUS_KEY which makes this parameter optional") String key) {
key = configureClientAndGetKey(key); key = configureClientAndGetKey(key);
nip = validateAndNormalizeNip(nip); nip = validateAndNormalizeNip(nip);
GusClientWithRateLimiter.GusFuture<CompanyInfo> future = gusClientWithRateLimiter.createFuture(nip, key); GusClientWithRateLimiter.GusFuture<CompanyInfo> future = gusClientWithRateLimiter.createFuture(nip, key);
...@@ -44,7 +60,7 @@ public class GusController { ...@@ -44,7 +60,7 @@ public class GusController {
try { try {
// Optional timeout for waiting clients // Optional timeout for waiting clients
CompanyInfo result = future.get(60, TimeUnit.SECONDS); CompanyInfo result = future.get(60, TimeUnit.SECONDS);
return ResponseEntity.ok(result); return ResponseEntity.ok(result.toJson());
} }
catch(CompletionException ex) { catch(CompletionException ex) {
try { try {
......
...@@ -2,9 +2,15 @@ package com.framework.tools.gus.soap; ...@@ -2,9 +2,15 @@ package com.framework.tools.gus.soap;
import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude; import com.fasterxml.jackson.annotation.JsonInclude;
import com.framework.tools.gus.rest.GusController;
import com.google.gson.Gson;
import lombok.Data; import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString; import lombok.ToString;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document; import org.w3c.dom.Document;
import org.w3c.dom.Element; import org.w3c.dom.Element;
import org.w3c.dom.Node; import org.w3c.dom.Node;
...@@ -16,30 +22,45 @@ import javax.xml.parsers.DocumentBuilderFactory; ...@@ -16,30 +22,45 @@ import javax.xml.parsers.DocumentBuilderFactory;
import java.lang.reflect.Field; import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ToString
@Data @Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class CompanyInfo { public class CompanyInfo {
private static final Logger logger = LoggerFactory.getLogger(CompanyInfo.class);
public String NIP = ""; public String NIP = "";
public String Nazwa = ""; public String Nazwa = "";
public String Regon = ""; public String Regon = "";
public String KRS = ""; public String KRS = "";
public String Wojewodztwo = ""; public String Wojewodztwo = "";
public String Powiat = ""; public String Powiat = "";
public String Gmina = ""; public String Gmina = "";
public String Miejscowosc = ""; public String Miejscowosc = "";
public String KodPocztowy = ""; public String KodPocztowy = "";
public String Ulica = ""; public String Ulica = "";
public String Posesja = ""; public String Posesja = "";
public String Lokal = ""; public String Lokal = "";
public String Typ = ""; public String Typ = "";
public String SilosID =""; public String SilosID ="";
public String organRejestrowy = ""; public String organRejestrowy = "";
public PKDList listaPKD = new PKDList(); public PKDList listaPKD = new PKDList();
public String ErrorCode; public String ErrorCode;
public String ErrorMessagePl; public String ErrorMessagePl;
private String getNormalizedRegon(String regonParam){ private String getNormalizedRegon(String regonParam){
...@@ -93,12 +114,18 @@ public class CompanyInfo { ...@@ -93,12 +114,18 @@ public class CompanyInfo {
return resPkd; return resPkd;
} }
private String getField(Element root, String field){ private String getField(Node root, String field){
NodeList list = root.getElementsByTagName(field); NodeList list = root.getChildNodes();
if(list.getLength() > 0){ for (int i = 0; i < list.getLength(); i++) {
return list.item(0).getTextContent(); Node n = list.item(i);
if (n.getNodeType() == Node.ELEMENT_NODE) {
String name = n.getNodeName();
if(field.equalsIgnoreCase(name)) {
return n.getTextContent();
}
}
} }
return ""; return null;
} }
private String getFieldPrefix(String type) { private String getFieldPrefix(String type) {
...@@ -120,7 +147,8 @@ public class CompanyInfo { ...@@ -120,7 +147,8 @@ public class CompanyInfo {
DocumentBuilder builder = factory.newDocumentBuilder(); DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new java.io.ByteArrayInputStream(repXml.getBytes("utf-8")))); Document doc = builder.parse(new InputSource(new java.io.ByteArrayInputStream(repXml.getBytes("utf-8"))));
Element root = doc.getDocumentElement(); Element root = doc.getDocumentElement();
this.KRS = getField(root, computeFieldName("numerWrejestrzeEwidencji")); Node dane = root.getElementsByTagName("dane").item(0);
this.KRS = getField(dane, computeFieldName("numerWrejestrzeEwidencji"));
this.Posesja = getField(root, computeFieldName("adSiedzNumerNieruchomosci")); this.Posesja = getField(root, computeFieldName("adSiedzNumerNieruchomosci"));
this.Lokal = getField(root, computeFieldName("adSiedzNumerLokalu")); this.Lokal = getField(root, computeFieldName("adSiedzNumerLokalu"));
this.organRejestrowy = getField(root, computeFieldName("organRejestrowy_Nazwa")); this.organRejestrowy = getField(root, computeFieldName("organRejestrowy_Nazwa"));
...@@ -138,6 +166,11 @@ public class CompanyInfo { ...@@ -138,6 +166,11 @@ public class CompanyInfo {
return !czyOsobaPrawna(); return !czyOsobaPrawna();
} }
public String toJson() {
Gson gson = new Gson();
return gson.toJson(this);
}
@ToString @ToString
@Data @Data
public static class PKD{ public static class PKD{
...@@ -150,7 +183,7 @@ public class CompanyInfo { ...@@ -150,7 +183,7 @@ public class CompanyInfo {
public static class PKDList{ public static class PKDList{
private List<PKD> list; private List<PKD> list;
private boolean dzialalnoscWeterynaryjna; private boolean dzialalnoscWeterynaryjna;
@JsonIgnore
public boolean isLoaded() { public boolean isLoaded() {
return list != null; return list != null;
} }
...@@ -206,8 +239,10 @@ public class CompanyInfo { ...@@ -206,8 +239,10 @@ public class CompanyInfo {
} }
@JsonIgnore
public boolean isError(){ public boolean isError(){
return StringUtils.isNotEmpty(ErrorCode); return StringUtils.isNotEmpty(ErrorCode);
} }
} }
...@@ -3,4 +3,6 @@ spring.application.name=gus-rest-server ...@@ -3,4 +3,6 @@ spring.application.name=gus-rest-server
logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG logging.level.org.springframework.ws.client.MessageTracing.sent=DEBUG
logging.level.org.springframework.ws.client.MessageTracing.received=DEBUG logging.level.org.springframework.ws.client.MessageTracing.received=DEBUG
logging.level.org.springframework.ws.transport.http=DEBUG logging.level.org.springframework.ws.transport.http=DEBUG
logging.level.org.apache.http=INFO logging.level.org.apache.http=INFO
\ No newline at end of file
springdoc.api-docs.path=/api-docs
\ No newline at end of file
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