Commit 08d4392b authored by WojciechK's avatar WojciechK

Poprawki w formacie wynikowym JSON

parent 78c3f2bd
......@@ -51,7 +51,11 @@
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.8.8</version>
</dependency>
<!-- JAXB API -->
<dependency>
<groupId>jakarta.xml.bind</groupId>
......@@ -81,6 +85,12 @@
<artifactId>commons-lang3</artifactId>
<version>3.17.0</version>
</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>
<build>
<finalName>gus-rest-server</finalName>
......
......@@ -4,6 +4,12 @@ import com.framework.tools.gus.soap.CompanyInfo;
import com.framework.tools.gus.soap.GusException;
import com.framework.tools.gus.soap.GusSoapClient;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -29,8 +35,18 @@ public class GusController {
@Autowired
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")
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);
nip = validateAndNormalizeNip(nip);
GusClientWithRateLimiter.GusFuture<CompanyInfo> future = gusClientWithRateLimiter.createFuture(nip, key);
......@@ -44,7 +60,7 @@ public class GusController {
try {
// Optional timeout for waiting clients
CompanyInfo result = future.get(60, TimeUnit.SECONDS);
return ResponseEntity.ok(result);
return ResponseEntity.ok(result.toJson());
}
catch(CompletionException ex) {
try {
......
......@@ -2,9 +2,15 @@ package com.framework.tools.gus.soap;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonInclude;
import com.framework.tools.gus.rest.GusController;
import com.google.gson.Gson;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
......@@ -16,30 +22,45 @@ import javax.xml.parsers.DocumentBuilderFactory;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
@ToString
@Data
@JsonInclude(JsonInclude.Include.NON_EMPTY)
public class CompanyInfo {
private static final Logger logger = LoggerFactory.getLogger(CompanyInfo.class);
public String NIP = "";
public String Nazwa = "";
public String Regon = "";
public String KRS = "";
public String Wojewodztwo = "";
public String Powiat = "";
public String Gmina = "";
public String Miejscowosc = "";
public String KodPocztowy = "";
public String Ulica = "";
public String Posesja = "";
public String Lokal = "";
public String Typ = "";
public String SilosID ="";
public String organRejestrowy = "";
public PKDList listaPKD = new PKDList();
public String ErrorCode;
public String ErrorMessagePl;
private String getNormalizedRegon(String regonParam){
......@@ -93,12 +114,18 @@ public class CompanyInfo {
return resPkd;
}
private String getField(Element root, String field){
NodeList list = root.getElementsByTagName(field);
if(list.getLength() > 0){
return list.item(0).getTextContent();
private String getField(Node root, String field){
NodeList list = root.getChildNodes();
for (int i = 0; i < list.getLength(); i++) {
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) {
......@@ -120,7 +147,8 @@ public class CompanyInfo {
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(new InputSource(new java.io.ByteArrayInputStream(repXml.getBytes("utf-8"))));
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.Lokal = getField(root, computeFieldName("adSiedzNumerLokalu"));
this.organRejestrowy = getField(root, computeFieldName("organRejestrowy_Nazwa"));
......@@ -138,6 +166,11 @@ public class CompanyInfo {
return !czyOsobaPrawna();
}
public String toJson() {
Gson gson = new Gson();
return gson.toJson(this);
}
@ToString
@Data
public static class PKD{
......@@ -150,7 +183,7 @@ public class CompanyInfo {
public static class PKDList{
private List<PKD> list;
private boolean dzialalnoscWeterynaryjna;
@JsonIgnore
public boolean isLoaded() {
return list != null;
}
......@@ -206,8 +239,10 @@ public class CompanyInfo {
}
@JsonIgnore
public boolean isError(){
return StringUtils.isNotEmpty(ErrorCode);
}
}
......@@ -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.received=DEBUG
logging.level.org.springframework.ws.transport.http=DEBUG
logging.level.org.apache.http=INFO
\ No newline at end of file
logging.level.org.apache.http=INFO
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