Commit 0f52c5d6 by GulnazS

Update forward request send

parent 3db07299
...@@ -64,4 +64,7 @@ dependencies { ...@@ -64,4 +64,7 @@ dependencies {
implementation group: 'org.apache.cxf', name: 'cxf-core', version: '3.3.6' implementation group: 'org.apache.cxf', name: 'cxf-core', version: '3.3.6'
implementation group: 'org.apache.cxf', name: 'cxf-rt-frontend-jaxws', version: '3.3.6' implementation group: 'org.apache.cxf', name: 'cxf-rt-frontend-jaxws', version: '3.3.6'
implementation group: 'org.apache.cxf', name: 'cxf-rt-transports-http', version: '3.3.6' implementation group: 'org.apache.cxf', name: 'cxf-rt-transports-http', version: '3.3.6'
// https://mvnrepository.com/artifact/org.apache.commons/commons-text
implementation("org.apache.commons:commons-text:1.14.0")
} }
\ No newline at end of file
package kz.arta.nca_iiscon.controller; package kz.arta.nca_iiscon.controller;
import com.fasterxml.jackson.databind.ObjectMapper;
import kz.arta.nca_iiscon.data.forward.ForwardApplication; import kz.arta.nca_iiscon.data.forward.ForwardApplication;
import kz.arta.nca_iiscon.data.search.SearchOrderByReferenceNumberRequest; import kz.arta.nca_iiscon.data.search.SearchOrderByReferenceNumberRequest;
import kz.arta.nca_iiscon.service.ForwardApplicationNcaService; import kz.arta.nca_iiscon.service.ForwardApplicationNcaService;
import kz.arta.nca_iiscon.service.NcaIISConService; import kz.arta.nca_iiscon.service.NcaIISConService;
import kz.arta.nca_iiscon.service.RestService;
import kz.arta.nca_iiscon.util.XmlToJsonUtil; import kz.arta.nca_iiscon.util.XmlToJsonUtil;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -21,21 +23,19 @@ public class NcaIISConController { ...@@ -21,21 +23,19 @@ public class NcaIISConController {
private final ForwardApplicationNcaService forwardService; private final ForwardApplicationNcaService forwardService;
private final ObjectMapper objectMapper = new ObjectMapper();
private final RestService restService;
@PostMapping(value = "/iiscon", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = "/iiscon", produces = MediaType.APPLICATION_JSON_VALUE)
public @ResponseBody Object getSearchOrderByReferenceNumber(@RequestBody SearchOrderByReferenceNumberRequest request public @ResponseBody Object getSearchOrderByReferenceNumber(@RequestBody SearchOrderByReferenceNumberRequest request
) throws Exception { ) throws Exception {
log.info("Received request with referenceNumber: {}", request.getReferenceNumber()); log.info("Received request with referenceNumber: {}", request.getReferenceNumber());
// Отправляем запрос и получаем ответ // Отправляем запрос и получаем ответ
Object response = service.sendRequest(request); Object response = service.sendRequest(request);
log.info("SHEP Response {}", response);
// Извлекаем data и конвертируем в JSON return XmlToJsonUtil.extractDataAsJson(response, true);
String jsonResponse = XmlToJsonUtil.extractDataAsJson(response);
log.info("Converted response to JSON");
return jsonResponse;
} }
@PostMapping(value = "/forward", produces = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = "/forward", produces = MediaType.APPLICATION_JSON_VALUE)
...@@ -44,10 +44,11 @@ public class NcaIISConController { ...@@ -44,10 +44,11 @@ public class NcaIISConController {
) throws Exception { ) throws Exception {
// Отправляем запрос и получаем ответ // Отправляем запрос и получаем ответ
Object response = forwardService.sendRequest(request); // Object response = forwardService.sendRequest(request);
Object response = forwardService.sendRequestByTemplate(request);
// Извлекаем data и конвертируем в JSON // Извлекаем data и конвертируем в JSON
String jsonResponse = XmlToJsonUtil.extractDataAsJson(response); String jsonResponse = XmlToJsonUtil.extractDataAsJson(response, false);
log.info("Converted response to JSON"); log.info("Converted response to JSON");
......
...@@ -5,7 +5,7 @@ import lombok.Data; ...@@ -5,7 +5,7 @@ import lombok.Data;
import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.*;
@Data @Data
@XmlRootElement(name = "changeApplicationStatus", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlRootElement(name = "changeApplicationStatus")
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"applicationId", "callOrigin", "applicationStatus", "statusDate"}) @XmlType(propOrder = {"applicationId", "callOrigin", "applicationStatus", "statusDate"})
public class ChangeApplicationStatus { public class ChangeApplicationStatus {
......
...@@ -4,20 +4,20 @@ import lombok.Data; ...@@ -4,20 +4,20 @@ import lombok.Data;
import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.*;
@Data @Data
@XmlRootElement(name = "ForwardApplication", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlRootElement(name = "ForwardApplication")
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"applicationId", "registerApplication", "updateApplication", "statusHistory"}) @XmlType(propOrder = {"applicationId", "registerApplication", "updateApplication", "statusHistory"})
public class ForwardApplication { public class ForwardApplication {
@XmlElement(name = "applicationId", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement(name = "applicationId")
private String applicationId; private String applicationId;
@XmlElement(name = "registerApplication", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement(name = "registerApplication")
private RegisterApplication registerApplication; private RegisterApplication registerApplication;
@XmlElement(name = "updateApplication", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement(name = "updateApplication")
private UpdateApplication updateApplication; private UpdateApplication updateApplication;
@XmlElement(name = "statusHistory", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement(name = "statusHistory")
private StatusHistory statusHistory; private StatusHistory statusHistory;
} }
\ No newline at end of file
...@@ -5,7 +5,7 @@ import lombok.Data; ...@@ -5,7 +5,7 @@ import lombok.Data;
import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.*;
@Data @Data
@XmlRootElement(name = "registerApplication", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlRootElement(name = "registerApplication")
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"applicationId", "applicationRegistrationData"}) @XmlType(propOrder = {"applicationId", "applicationRegistrationData"})
public class RegisterApplication { public class RegisterApplication {
......
...@@ -5,8 +5,9 @@ import javax.xml.bind.annotation.*; ...@@ -5,8 +5,9 @@ import javax.xml.bind.annotation.*;
import java.util.List; import java.util.List;
@Data @Data
@XmlRootElement(name = "statusHistory", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlRootElement(name = "statusHistory")
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType()
public class StatusHistory { public class StatusHistory {
@XmlElement(name = "changeApplicationStatus") @XmlElement(name = "changeApplicationStatus")
......
...@@ -5,7 +5,7 @@ import lombok.Data; ...@@ -5,7 +5,7 @@ import lombok.Data;
import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.*;
@Data @Data
@XmlRootElement(name = "updateApplication", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlRootElement(name = "updateApplication")
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"applicationId", "callOrigin", "applicationData"}) @XmlType(propOrder = {"applicationId", "callOrigin", "applicationData"})
public class UpdateApplication { public class UpdateApplication {
......
...@@ -7,6 +7,6 @@ import javax.xml.bind.annotation.*; ...@@ -7,6 +7,6 @@ import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
public class Applicant { public class Applicant {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Person person; private Person person;
} }
\ No newline at end of file
...@@ -8,9 +8,9 @@ import javax.xml.bind.annotation.*; ...@@ -8,9 +8,9 @@ import javax.xml.bind.annotation.*;
@XmlType(propOrder = {"dom", "corpus"}) @XmlType(propOrder = {"dom", "corpus"})
public class Building { public class Building {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String dom; private String dom;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String corpus; private String corpus;
} }
\ No newline at end of file
...@@ -8,15 +8,15 @@ import javax.xml.bind.annotation.*; ...@@ -8,15 +8,15 @@ import javax.xml.bind.annotation.*;
@XmlType(propOrder = {"contactType", "contactData", "contactPrefix", "isForNotification"}) @XmlType(propOrder = {"contactType", "contactData", "contactPrefix", "isForNotification"})
public class Contact { public class Contact {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String contactType; private String contactType;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String contactData; private String contactData;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String contactPrefix; private String contactPrefix;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Boolean isForNotification; private Boolean isForNotification;
} }
\ No newline at end of file
...@@ -8,6 +8,6 @@ import java.util.List; ...@@ -8,6 +8,6 @@ import java.util.List;
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
public class Contacts { public class Contacts {
@XmlElement(name = "contact", namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement(name = "contact")
private List<Contact> contact; private List<Contact> contact;
} }
\ No newline at end of file
...@@ -8,24 +8,24 @@ import javax.xml.bind.annotation.*; ...@@ -8,24 +8,24 @@ import javax.xml.bind.annotation.*;
@XmlType(propOrder = {"docType", "docSer", "docNum", "docDate", "docSource", "expirationDate", "docName"}) @XmlType(propOrder = {"docType", "docSer", "docNum", "docDate", "docSource", "expirationDate", "docName"})
public class IdentityDocument { public class IdentityDocument {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String docType; private String docType;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String docSer; private String docSer;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String docNum; private String docNum;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String docDate; private String docDate;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String docSource; private String docSource;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String expirationDate; private String expirationDate;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String docName; private String docName;
} }
...@@ -8,24 +8,24 @@ import javax.xml.bind.annotation.*; ...@@ -8,24 +8,24 @@ import javax.xml.bind.annotation.*;
@XmlType(propOrder = {"areaCode", "districtCode", "countryName", "cityName", "streetName", "building", "apartment"}) @XmlType(propOrder = {"areaCode", "districtCode", "countryName", "cityName", "streetName", "building", "apartment"})
public class Location { public class Location {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String areaCode; private String areaCode;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String districtCode; private String districtCode;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String countryName; private String countryName;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String cityName; private String cityName;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String streetName; private String streetName;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Building building; private Building building;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String apartment; private String apartment;
} }
\ No newline at end of file
...@@ -10,42 +10,42 @@ import javax.xml.bind.annotation.*; ...@@ -10,42 +10,42 @@ import javax.xml.bind.annotation.*;
"placeOfBirth", "gender", "isForeigner", "citizenship"}) "placeOfBirth", "gender", "isForeigner", "citizenship"})
public class Person { public class Person {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String iin; private String iin;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String lastName; private String lastName;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String firstName; private String firstName;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String middleName; private String middleName;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Location legalLocation; private Location legalLocation;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Location actualLocation; private Location actualLocation;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Contacts contacts; private Contacts contacts;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private IdentityDocument identityDocument; private IdentityDocument identityDocument;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String dateOfBirth; private String dateOfBirth;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String placeOfBirth; private String placeOfBirth;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String gender; private String gender;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private Boolean isForeigner; private Boolean isForeigner;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String citizenship; private String citizenship;
} }
...@@ -5,9 +5,9 @@ import javax.xml.bind.annotation.*; ...@@ -5,9 +5,9 @@ import javax.xml.bind.annotation.*;
@Data @Data
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "confirmOrder", propOrder = {"digiSign"}, namespace = "http://pki.gov.kz/api/ws/iiscon/wsdl") @XmlType(name = "confirmOrder", propOrder = {"digiSign"})
public class ConfirmOrder { public class ConfirmOrder {
@XmlElement(namespace = "http://pki.gov.kz/api/ws/iiscon/wsdl") @XmlElement()
private String digiSign; private String digiSign;
} }
...@@ -10,6 +10,6 @@ public class Data { ...@@ -10,6 +10,6 @@ public class Data {
@XmlElement @XmlElement
private String digiSign; private String digiSign;
@XmlElement(name = "confirmOrder", namespace = "http://pki.gov.kz/api/ws/iiscon/wsdl") @XmlElement(name = "confirmOrder")
private ConfirmOrder confirmOrder; private ConfirmOrder confirmOrder;
} }
package kz.arta.nca_iiscon.data.forward.document; package kz.arta.nca_iiscon.data.forward.document;
import kz.arta.nca_iiscon.data.forward.applicant.Applicant;
import lombok.Data; import lombok.Data;
import javax.xml.bind.annotation.*; import javax.xml.bind.annotation.*;
@Data @Data
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"documentId", "docTypeCode", "copyType", "docName"}) @XmlType(propOrder = {"documentId", "docTypeCode", "copyType", "docName", "documentBinary", "applicant"})
public class Document { public class Document {
@XmlElement @XmlElement
...@@ -19,4 +20,11 @@ public class Document { ...@@ -19,4 +20,11 @@ public class Document {
@XmlElement @XmlElement
private String docName; private String docName;
@XmlElement
private DocumentBinary documentBinary;
@XmlElement
private Applicant applicant;
} }
\ No newline at end of file
package kz.arta.nca_iiscon.data.forward.document;
import lombok.Data;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@Data
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = {"docUrl", "docMimeType", "docSignature"})
public class DocumentBinary {
@XmlElement
private String docUrl;
@XmlElement
private String docMimeType;
@XmlElement
private String docSignature;
}
...@@ -7,6 +7,6 @@ import javax.xml.bind.annotation.*; ...@@ -7,6 +7,6 @@ import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD) @XmlAccessorType(XmlAccessType.FIELD)
public class ApplicationStatus { public class ApplicationStatus {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private ExecutionStatus executionStatus; private ExecutionStatus executionStatus;
} }
\ No newline at end of file
...@@ -8,12 +8,12 @@ import javax.xml.bind.annotation.*; ...@@ -8,12 +8,12 @@ import javax.xml.bind.annotation.*;
@XmlType(propOrder = {"appState", "statusInfo", "statusInfoKz"}) @XmlType(propOrder = {"appState", "statusInfo", "statusInfoKz"})
public class ExecutionStatus { public class ExecutionStatus {
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String appState; private String appState;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String statusInfo; private String statusInfo;
@XmlElement(namespace = "http://schemas.letograf.kz/iiscon/bus/v1") @XmlElement
private String statusInfoKz; private String statusInfoKz;
} }
\ No newline at end of file
...@@ -3,7 +3,9 @@ package kz.arta.nca_iiscon.service; ...@@ -3,7 +3,9 @@ package kz.arta.nca_iiscon.service;
import kz.arta.nca_iiscon.data.forward.ForwardApplication; import kz.arta.nca_iiscon.data.forward.ForwardApplication;
import kz.arta.nca_iiscon.data.search.SearchOrderByReferenceNumberRequest; import kz.arta.nca_iiscon.data.search.SearchOrderByReferenceNumberRequest;
import kz.arta.nca_iiscon.shep.*; import kz.arta.nca_iiscon.shep.*;
import kz.arta.nca_iiscon.util.XmlTemplateBuilder;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -13,10 +15,7 @@ import javax.xml.namespace.QName; ...@@ -13,10 +15,7 @@ import javax.xml.namespace.QName;
import javax.xml.ws.BindingProvider; import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler; import javax.xml.ws.handler.Handler;
import java.io.StringWriter; import java.io.StringWriter;
import java.util.ArrayList; import java.util.*;
import java.util.Date;
import java.util.List;
import java.util.UUID;
@Slf4j @Slf4j
@Service @Service
...@@ -29,6 +28,11 @@ public class ForwardApplicationNcaService { ...@@ -29,6 +28,11 @@ public class ForwardApplicationNcaService {
private String serviceIdSHEP; private String serviceIdSHEP;
@Value("${service_url}") @Value("${service_url}")
private String urlSHEP; private String urlSHEP;
@Value("${service_url}")
private String keyFile;
@Autowired
private RestService restService;
public Object sendRequest(ForwardApplication request) throws Exception { public Object sendRequest(ForwardApplication request) throws Exception {
...@@ -57,6 +61,27 @@ public class ForwardApplicationNcaService { ...@@ -57,6 +61,27 @@ public class ForwardApplicationNcaService {
} }
} }
public String sendRequestByTemplate(ForwardApplication forwardApplication) throws Exception {
String request;
//generate id
try {
request = XmlTemplateBuilder.buildXMLForward(forwardApplication, serviceIdSHEP, senderIdSHEP, senderPassSHEP);
log.info("Request: {}\n", request);
String response = restService.getPostWithsSoapHeaders(urlSHEP, request);
log.info("Response: {}\n", response);
return response;
// return request;
} catch (Exception e) {
log.error("Ошибка: {}", e.getMessage(), e);
e.printStackTrace();
return e.getMessage();
}
}
private SyncSendMessageRequest prepareShepRequest(ForwardApplication request) private SyncSendMessageRequest prepareShepRequest(ForwardApplication request)
throws DatatypeConfigurationException { throws DatatypeConfigurationException {
SyncSendMessageRequest shepRequest = new SyncSendMessageRequest(); SyncSendMessageRequest shepRequest = new SyncSendMessageRequest();
...@@ -114,7 +139,7 @@ public class ForwardApplicationNcaService { ...@@ -114,7 +139,7 @@ public class ForwardApplicationNcaService {
Marshaller marshaller = jaxbContext.createMarshaller(); Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(request, sw); marshaller.marshal(request, sw);
log.info("SHEP SearchOrderByReferenceNumberRequest: {}", sw.toString()); log.info("SHEP REQUEST: {}", sw.toString());
} catch (JAXBException e) { } catch (JAXBException e) {
log.warn("Failed to log request", e); log.warn("Failed to log request", e);
} }
......
...@@ -44,7 +44,7 @@ public class NcaIISConService { ...@@ -44,7 +44,7 @@ public class NcaIISConService {
// Send the request and process response // Send the request and process response
SyncSendMessageResponse response = port.sendMessage(shepRequest); SyncSendMessageResponse response = port.sendMessage(shepRequest);
log.info("Received SHEP response: {}", response); // log.info("Received SHEP response: {}", response);
return response; return response;
} catch (SendMessageSendMessageFaultMsg e) { } catch (SendMessageSendMessageFaultMsg e) {
String errorResponse = handleFaultMessage(e.getFaultInfo()); String errorResponse = handleFaultMessage(e.getFaultInfo());
......
package kz.arta.nca_iiscon.service;
import org.springframework.boot.web.client.RestTemplateBuilder;
import org.springframework.http.*;
import org.springframework.stereotype.Service;
import org.springframework.web.client.HttpServerErrorException;
import org.springframework.web.client.RestTemplate;
import java.util.Collections;
@Service
public class RestService {
private final RestTemplate restTemplate;
public RestService(RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
public String getPostWithsSoapHeaders(String url, String xml) {
HttpHeaders headers = new HttpHeaders();
headers.setAccept(Collections.singletonList(MediaType.TEXT_XML));
headers.setContentType(MediaType.TEXT_XML);
headers.set("SOAPAction", "");
HttpEntity request = new HttpEntity<>(xml,headers);
ResponseEntity<String> response;
try {
response = this.restTemplate.exchange(url, HttpMethod.POST, request, String.class);
return response.getBody();
} catch (HttpServerErrorException e){
return e.getResponseBodyAsString();
} catch (Exception e){
return e.getMessage();
}
}
}
package kz.arta.nca_iiscon.util;
import com.sun.xml.bind.marshaller.NamespacePrefixMapper;
public class CustomNamespacePrefixMapper extends NamespacePrefixMapper {
private static final String IISCON_NAMESPACE = "http://schemas.letograf.kz/iiscon/bus/v1";
private static final String PKI_NAMESPACE = "http://pki.gov.kz/api/ws/iiscon/wsdl";
private static final String XSI_NAMESPACE = "http://www.w3.org/2001/XMLSchema-instance";
@Override
public String getPreferredPrefix(String namespaceUri, String suggestion, boolean requirePrefix) {
if (IISCON_NAMESPACE.equals(namespaceUri)) {
return "s01";
}
if (XSI_NAMESPACE.equals(namespaceUri)) {
return "xsi";
}
if (PKI_NAMESPACE.equals(namespaceUri)) {
return ""; // default namespace for confirmOrder
}
return suggestion;
}
@Override
public String[] getPreDeclaredNamespaceUris() {
return new String[] { IISCON_NAMESPACE, XSI_NAMESPACE };
}
}
package kz.arta.nca_iiscon.util;
import kz.arta.nca_iiscon.data.forward.*;
import kz.arta.nca_iiscon.data.forward.applicant.*;
import kz.arta.nca_iiscon.data.forward.application.*;
import kz.arta.nca_iiscon.data.forward.document.Document;
import kz.arta.nca_iiscon.data.forward.payment.Payment;
import kz.arta.nca_iiscon.data.forward.registration.ApplicationRegistrationData;
import kz.arta.nca_iiscon.data.forward.status.ExecutionStatus;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.text.StringSubstitutor;
import java.io.IOException;
import java.io.InputStream;
import java.time.OffsetDateTime;
import java.time.format.DateTimeFormatter;
import java.util.*;
@Slf4j
public class XmlTemplateBuilder {
static ApplicationIdGenerator gen = new ApplicationIdGenerator();
public static String buildXMLForward(ForwardApplication request, String serviceId, String login, String password) throws IOException {
Random random = new Random();
String template = loadTemplate("/templates/nonresident.xml");
String documentTemplate = loadTemplate("/templates/document.xml");
String messageID = UUID.randomUUID().toString();
OffsetDateTime messageDate = OffsetDateTime.now(TimeZone.getDefault().toZoneId());
String forwardDate = messageDate.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
String applicationId = request.getApplicationId();
ApplicationRegistrationData applicationRegistrationData = request.getRegisterApplication().getApplicationRegistrationData();
Employee employee = applicationRegistrationData.getRegisterEmployee();
String employeeLastName = employee.getLastName();
String employeeFirstName = employee.getFirstName();
String employeeMiddleName = employee.getMiddleName();
String employeePosition = employee.getPosition();
String employeeIin =employee.getIin();
UpdateApplication updateApplication = request.getUpdateApplication();
ApplicationData applicationData = updateApplication.getApplicationData();
Person applicant = applicationData.getApplicant().getPerson();
Contact contact = new Contact();
if (applicant.getContacts() != null && applicant.getContacts().getContact() != null && !applicant.getContacts().getContact().isEmpty() && applicant.getContacts().getContact().get(0) != null) {
contact = applicant.getContacts().getContact().get(0);
}
IdentityDocument identityDocument = applicant.getIdentityDocument();
String personIin = applicant.getIin();
//DOCUMENTS
StringBuilder documentArray = new StringBuilder();
List<Document> documents = applicationData.getDocuments().getDocument();
for(Document doc : documents){
Map<String, String> values = new HashMap<>();
values.put("documentId", doc.getDocumentId());
values.put("docTypeCode", doc.getDocTypeCode());
values.put("copyType", doc.getCopyType());
values.put("docName", doc.getDocName());
values.put("personIin", personIin);
values.put("forwardDate", forwardDate);
StringSubstitutor substitutor = new StringSubstitutor(values);
documentArray.append(substitutor.replace(documentTemplate));
}
String digiSign = applicationData.getData().getDigiSign();
ConfirmOrder confirmOrder = applicationData.getData().getConfirmOrder();
String personLastName = applicant.getLastName();
String personFirstName = applicant.getFirstName();
String personMiddleName = applicant.getMiddleName();
String contactType = contact.getContactType().toUpperCase();;
String contactData = contact.getContactData();
Boolean isForNotification = contact.getIsForNotification();
String identityDocumentDocType = identityDocument.getDocType();
String identityDocumentDocSource = identityDocument.getDocSource();
String identityDocumentDocName = identityDocument.getDocName();
String dateOfBirth = applicant.getDateOfBirth();
String placeOfBirth = applicant.getPlaceOfBirth();
String gender = applicant.getGender();
Boolean isForeigner = applicant.getIsForeigner();
String citizenship = applicant.getCitizenship();
OffsetDateTime deadlineDateTime = messageDate.plusDays(3);
String deadline = deadlineDateTime.format(DateTimeFormatter.ISO_OFFSET_DATE_TIME);
int paymentId = 1_000_000 + random.nextInt(9_000_000);
String language = (applicationData.getLanguage() == null || applicationData.getLanguage().isEmpty())
? "RUS"
: applicationData.getLanguage();
String confirmOrderDigiSign = confirmOrder.getDigiSign();//this
String subServiceTypeCode = applicationData.getSubServiceTypeCode();
Map<String, String> values = new HashMap<>();
values.put("messageId", messageID);
values.put("serviceId", serviceId);
values.put("forwardDate", forwardDate);
values.put("senderId", login);
values.put("password", password);
values.put("applicationId", applicationId);
values.put("employeeLastName", employeeLastName);
values.put("employeeFirstName", employeeFirstName);
values.put("employeeMiddleName", employeeMiddleName);
values.put("employeePosition", employeePosition);
values.put("employeeIin", employeeIin);
// Applicant Person
values.put("personIin", personIin);
values.put("personLastName", personLastName);
values.put("personFirstName", personFirstName);
values.put("personMiddleName", personMiddleName);
// Contact
values.put("contactType", contactType);
values.put("contactData", contactData);
values.put("isForNotification", String.valueOf(isForNotification));
// Identity Document
values.put("identityDocumentDocType", identityDocumentDocType);
values.put("identityDocumentDocSource", identityDocumentDocSource);
values.put("identityDocumentDocName", identityDocumentDocName);
values.put("dateOfBirth", dateOfBirth);
values.put("placeOfBirth", placeOfBirth);
values.put("gender", gender);
values.put("isForeigner", String.valueOf(isForeigner));
values.put("citizenship", citizenship);
values.put("deadline", deadline);
values.put("paymentId", String.valueOf(paymentId));
values.put("language", language);
values.put("document", documentArray.toString());
values.put("dataDigiSign", escapeXml(digiSign));
values.put("confirmOrderDigiSign", escapeXml(confirmOrderDigiSign));
values.put("subServiceTypeCode", subServiceTypeCode); //ПОКА ОСТАВЛЮ ЖДУ
StringSubstitutor substitutor = new StringSubstitutor(values);
return substitutor.replace(template);
}
private static String loadTemplate(String templatePath) throws IOException {
try (InputStream is = XmlTemplateBuilder.class.getResourceAsStream(templatePath)) {
if (is == null) {
throw new IOException("Шаблон не найден");
}
try (Scanner scanner = new Scanner(is, "UTF-8")) {
scanner.useDelimiter("\\A");
return scanner.hasNext() ? scanner.next() : "";
}
}
}
/**
* Экранирует XML символы в строке
*/
private static String escapeXml(String input) {
if (input == null) {
return null;
}
return input.replace("&", "&amp;")
.replace("<", "&lt;")
.replace(">", "&gt;")
.replace("\"", "&quot;")
.replace("'", "&apos;");
}
}
<document>
<documentId>${documentId}</documentId>
<docTypeCode>${docTypeCode}</docTypeCode>
<copyType>${copyType}</copyType>
<docName>${docName}</docName>
<docDate>${forwardDate}</docDate>
<applicant>
<person>
<iin>${personIin}</iin>
</person>
</applicant>
</document>
\ No newline at end of file
<!--my-->
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<order >
<certificateRequests>
<csr>-----BEGIN CERTIFICATE
REQUEST-----MIICLDCCAZQCAQAwgYcxJjAkBgNVBAMMHdCk0JjQm9Ce0JfQntCkINCi0JDQotCs0K/QndCQMRcwFQYDVQQEDA7QpNCY0JvQntCX0J7QpDEYMBYGA1UEBRMPSUlOODMwNDA0MDAwMjM4MQswCQYDVQQGEwJLWjEdMBsGA1UEKgwU0JLQmNCi0JDQm9Cs0JXQktCd0JAwgawwIwYJKoMOAwoBAQICMBYGCiqDDgMKAQECAgEGCCqDDgMKAQMDA4GEAASBgGnTlks1sg/RHS52qedybPdFkDcFDhrj188+RO4jtqHmonulWd7RbwWe8jinafR7FTe8fByJqedZ93/46MhCl4JmZQoR35JUlukh5qL2TXN4VlQ2OS2rdE2PjtyCEoixbsv8vgpJQHfkNPwrcWEpQKLWrhQ53fWyp0kWPjs9YtlloFYwVAYJKoZIhvcNAQkOMUcwRTBDBgYqgw4DAwUEOTA3Bggqgw4DAwUBAQwrQzpcVXNlcnNcbGFcRGVza3RvcFzQmNCY0KHQptCe0J1cdGVzdFx0ZXN0NjAOBgoqgw4DCgEBAgMCBQADgYEAdBtTkoU+QApAi9qtjkZ11ub27NXuLHhnId9kHNyCCQlJabGJGj+kzoEU7z+lGRqvcKX2XOabyxLIHPKAvlEHL39+1ylewO6bzhIQrU/CSd2rqDJZOgO0kxsKWFzkY7qsj5Z4r9CsvIAJUQKj4GEHSpGYjis13W7maC7ajiO599s=-----END
CERTIFICATE REQUEST-----
</csr>
<requestTemplateName>individ_sign_ng</requestTemplateName>
<subjectDN>
<rdns>
<rdnName>C</rdnName>
<value>KZ</value>
</rdns>
<rdns>
<rdnName>SERIALNUMBER</rdnName>
<value>IIN830404000238</value>
</rdns>
<rdns>
<rdnName>SURNAME</rdnName>
<value>ФИЛОЗОФ</value>
</rdns>
<rdns>
<rdnName>CN</rdnName>
<value>ФИЛОЗОФ ТАТЬЯНА</value>
</rdns>
<rdns>
<rdnName>G</rdnName>
<value>ВИТАЛЬЕВНА</value>
</rdns>
</subjectDN>
<publicKey>
04818069d3964b35b20fd11d2e76a9e7726cf7459037050e1ae3d7cf3e44ee23b6a1e6a27ba559ded16f059ef238a769f47b1537bc7c1c89a9e759f77ff8e8c842978266650a11df925496e921e6a2f64d7378565436392dab744d8f8edc821288b16ecbfcbe0a494077e434fc2b71612940a2d6ae1439ddf5b2a749163e3b3d62d965
</publicKey>
</certificateRequests>
<referenceNumber>14993427151112</referenceNumber>
<orderType>ORDER_TYPE_ONLINE</orderType>
<storageCode>PKCS12</storageCode>
<digitalDoc>false</digitalDoc>
<applicationType>scan</applicationType>
<ds:Signature xmlns:ds="http://www.w3.org/2000/09/xmldsig#" Id="1">
<ds:SignedInfo>
<ds:CanonicalizationMethod Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315"/>
<ds:SignatureMethod
Algorithm="urn:ietf:params:xml:ns:pkigovkz:xmlsec:algorithms:gostr34102015-gostr34112015-512"/>
<ds:Reference URI="">
<ds:Transforms>
<ds:Transform Algorithm="http://www.w3.org/2000/09/xmldsig#enveloped-signature"/>
<ds:Transform Algorithm="http://www.w3.org/TR/2001/REC-xml-c14n-20010315#WithComments"/>
</ds:Transforms>
<ds:DigestMethod Algorithm="urn:ietf:params:xml:ns:pkigovkz:xmlsec:algorithms:gostr34112015-512"/>
<ds:DigestValue>
t6IpRUQr+C6qkEwwHBA2+pK4WmeiM6RMgXA7TsUyO3wv2SK6I+TNeUHGnXaLNa40OHmji+vfxFVoxWHvuRRAOg==
</ds:DigestValue>
</ds:Reference>
</ds:SignedInfo>
<ds:SignatureValue>
7GtBBzqauxr4sFPHQkXOdTG8hcP6ZsJuzNEbalM4Z8iTmg7pZyZdZih0j+anyblDNpeN5Cr0S/F4M2JbWF7MFt6A7sItDfpL4rScNVt5bHxHUsGTPWK4Q0W79k3y45GvrWbWOSVQkrzOeLdfweYKw142SgucC+lU0XrfGMFOFEQ=
</ds:SignatureValue>
<ds:KeyInfo>
<ds:X509Data>
<ds:X509Certificate>
MIIEdjCCA96gAwIBAgIUZ1EuxhyjCN/oIBRlt5ITK5RpGiswDgYKKoMOAwoBAQIDAgUAMF0xTjBMBgNVBAMMRdKw0JvQotCi0KvSmiDQmtCj05jQm9CQ0J3QlNCr0KDQo9Co0Ksg0J7QoNCi0JDQm9Cr0pogKEdPU1QpIFRFU1QgMjAyMjELMAkGA1UEBhMCS1owHhcNMjUxMDI5MDM1MjI3WhcNMjYxMDI5MDM1MjI3WjCBrTEeMBwGA1UEAwwV0KLQldCh0KLQntCSINCi0JXQodCiMRUwEwYDVQQEDAzQotCV0KHQotCe0JIxGDAWBgNVBAUTD0lJTjEyMzQ1Njc4OTAxMTELMAkGA1UEBhMCS1oxGDAWBgNVBAoMD9CQ0J4gItCi0JXQodCiIjEYMBYGA1UECwwPQklOMTIzNDU2Nzg5MDIxMRkwFwYDVQQqDBDQotCV0KHQotCe0JLQmNCnMIGsMCMGCSqDDgMKAQECAjAWBgoqgw4DCgEBAgIBBggqgw4DCgEDAwOBhAAEgYAUC1c5kmlAGUiXCWQzEi7psOWNCMOTLV2ZuSOGuiDjx6A4nAYh/QECUKkzfzhqJk3/CFCyTwZ3GSv8h0Bq8zeEFwZBRLRISnOXp+VCoFXulgFBo1J3cFE31hlRMid382+2DqrjE4qDOpePgcd59r3fcW6brvxIRjpscxPcPcPKj6OCAdEwggHNMCgGA1UdJQQhMB8GCCsGAQUFBwMEBggqgw4DAwQBAgYJKoMOAwMEAQIFMDgGA1UdIAQxMC8wLQYGKoMOAwMCMCMwIQYIKwYBBQUHAgEWFWh0dHA6Ly9wa2kuZ292Lmt6L2NwczB3BggrBgEFBQcBAQRrMGkwKAYIKwYBBQUHMAGGHGh0dHA6Ly90ZXN0LnBraS5nb3Yua3ovb2NzcC8wPQYIKwYBBQUHMAKGMWh0dHA6Ly90ZXN0LnBraS5nb3Yua3ovY2VydC9uY2FfZ29zdDIwMjJfdGVzdC5jZXIwQQYDVR0fBDowODA2oDSgMoYwaHR0cDovL3Rlc3QucGtpLmdvdi5rei9jcmwvbmNhX2dvc3QyMDIyX3Rlc3QuY3JsMEMGA1UdLgQ8MDowOKA2oDSGMmh0dHA6Ly90ZXN0LnBraS5nb3Yua3ovY3JsL25jYV9nb3N0MjAyMl9kX3Rlc3QuY3JsMA4GA1UdDwEB/wQEAwIDyDAdBgNVHQ4EFgQUZ1EuxhyjCN/oIBRlt5ITK5RpGiswHwYDVR0jBBgwFoAU+tJLG6OgyWH+HKhQPmqiu0UNuKMwFgYGKoMOAwMFBAwwCgYIKoMOAwMFAQEwDgYKKoMOAwoBAQIDAgUAA4GBAJocEMkkNEEazl0GuwgD7sDJmJ6YdlMkIAffrV0SJ17uTpkuaFy9QX165Dxhusc5WSKkcMIj7HO2PlMVijWBxRP0yeL/E0ygs9Es+QGV/4WeiT9kWNXCT1HkROmpAILnuoxjs3fPWqGsrnzvj/Kwl2heabyGJ968kAk6DvY8psjU
</ds:X509Certificate>
</ds:X509Data>
</ds:KeyInfo>
</ds:Signature>
</order>
\ 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