diff --git a/core/src/main/java/io/github/project/openubl/xsender/camel/routes/SunatErrorResponseProcessor.java b/core/src/main/java/io/github/project/openubl/xsender/camel/routes/SunatErrorResponseProcessor.java index bddc5a6f..5329748b 100644 --- a/core/src/main/java/io/github/project/openubl/xsender/camel/routes/SunatErrorResponseProcessor.java +++ b/core/src/main/java/io/github/project/openubl/xsender/camel/routes/SunatErrorResponseProcessor.java @@ -26,8 +26,17 @@ import javax.xml.namespace.QName; import java.util.Collections; +import java.util.regex.Pattern; public class SunatErrorResponseProcessor implements Processor { + private static Pattern pattern = Pattern.compile("-?\\d+(\\.\\d+)?"); + + public boolean isNumeric(String strNum) { + if (strNum == null) { + return false; + } + return pattern.matcher(strNum).matches(); + } @Override public void process(Exchange exchange) throws Exception { @@ -36,10 +45,18 @@ public void process(Exchange exchange) throws Exception { QName qName = fault.getFaultCode(); String localPart = qName.getLocalPart(); - String errorCode = localPart + + int errorCodeInt; + String errorCodeString = localPart .replaceAll("Client.", "") .replaceAll("Server.", ""); - int errorCodeInt = Integer.parseInt(errorCode); + if (isNumeric(errorCodeString)) { + errorCodeInt = Integer.parseInt(errorCodeString); + } else if (isNumeric(message)) { + errorCodeInt = Integer.parseInt(message); + } else { + throw new IllegalStateException("Could not extract sunat error code", fault); + } Metadata metadata = Metadata.builder() .notes(Collections.emptyList()) diff --git a/core/src/test/java/io/github/project/openubl/xsender/camel/CxfTest.java b/core/src/test/java/io/github/project/openubl/xsender/camel/CxfTest.java index 25be31d0..86bca741 100644 --- a/core/src/test/java/io/github/project/openubl/xsender/camel/CxfTest.java +++ b/core/src/test/java/io/github/project/openubl/xsender/camel/CxfTest.java @@ -35,6 +35,7 @@ import org.hamcrest.CoreMatchers; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; import java.io.IOException; @@ -55,7 +56,7 @@ public class CxfTest { CompanyURLs companyURLs = CompanyURLs .builder() .invoice("https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService") - .despatch("https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService") + .despatch("https://e-beta.sunat.gob.pe/ol-ti-itemision-guia-gem-beta/billService") .perceptionRetention("https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService") .build(); @@ -173,6 +174,29 @@ public void billService_sendBill_retention() throws Exception { assertEquals("El Comprobante numero R001-00000001 ha sido aceptado", sunatResponse.getMetadata().getDescription()); } + @Test + public void billService_sendBill_guiaRemision() throws Exception { + InputStream xmlFileIS = Thread + .currentThread() + .getContextClassLoader() + .getResourceAsStream("ubl/20494637074-T001-00007394.xml"); + BillServiceFileAnalyzer fileAnalyzer = new BillServiceXMLFileAnalyzer(xmlFileIS, companyURLs); + + ZipFile zipFile = fileAnalyzer.getZipFile(); + BillServiceDestination destination = fileAnalyzer.getSendFileDestination(); + CamelData camelData = getBillServiceCamelData(zipFile, destination, credentials); + + SunatResponse sunatResponse = camelContext + .createProducerTemplate() + .requestBodyAndHeaders(Constants.XSENDER_BILL_SERVICE_URI, camelData.getBody(), camelData.getHeaders(), SunatResponse.class); + + assertNotNull(sunatResponse); + assertEquals(Status.EXCEPCION, sunatResponse.getStatus()); + assertEquals(1085, sunatResponse.getMetadata().getResponseCode()); // Debe enviar las guias de remisiĆ³n por el nuevo sistema de recepciĆ³n de guias electronicas + } + + // TODO verify when GET STATUS get back to work + @Disabled @Test public void billService_getStatus() throws Exception { InputStream xmlFileIS = Thread diff --git a/core/src/test/resources/ubl/20494637074-T001-00007394.xml b/core/src/test/resources/ubl/20494637074-T001-00007394.xml new file mode 100644 index 00000000..5532336b --- /dev/null +++ b/core/src/test/resources/ubl/20494637074-T001-00007394.xml @@ -0,0 +1,153 @@ + + + + 0foeDunivtTPD7730tmzX+HK7Vo=DAXH8YvHOEMz9rPrQsa3ds3/8WWaEOOab49TwabJmLKl0hlXpenSZwiDZoVCJkQnfCu/W/OWu6s6 +1nwpn3OBXccVPhY2R14sl2LANsPJF97j83ECK/YUH3kq9aGulpbhcCunOVdeZqQYfWD8e7uNUaj3 +Rz3bFj3Pn5S0js8EgIy21P7GLy76gjNYRsAZo2UVDKQw8o8TaUCcKmlIHa8K3pGXiGuEEI8qjV3w +lEhc77Ggq+gpcXQ5HiUE/QoAW/Qvs5jm3PkogMM/NdOulDBgcLB1sTvPrOIsFjx9cEcyzMsQNKUV +xqbJWUONEkvIHrdEBVJMFdjBE9KmEehNBQ8p+Q==MIIE+DCCA+CgAwIBAgIJALURz7AYmJ5+MA0GCSqGSIb3DQEBBQUAMIIBDTEbMBkGCgmSJomT8ixk +ARkWC0xMQU1BLlBFIFNBMQswCQYDVQQGEwJQRTENMAsGA1UECAwETElNQTENMAsGA1UEBwwETElN +QTEYMBYGA1UECgwPVFUgRU1QUkVTQSBTLkEuMUUwQwYDVQQLDDxETkkgOTk5OTk5OSBSVUMgMTA0 +Njc3OTM1NDkgLSBDRVJUSUZJQ0FETyBQQVJBIERFTU9TVFJBQ0nDk04xRDBCBgNVBAMMO05PTUJS +RSBSRVBSRVNFTlRBTlRFIExFR0FMIC0gQ0VSVElGSUNBRE8gUEFSQSBERU1PU1RSQUNJw5NOMRww +GgYJKoZIhvcNAQkBFg1kZW1vQGxsYW1hLnBlMB4XDTE5MTEwODEyNTY1MFoXDTIxMTEwNzEyNTY1 +MFowggENMRswGQYKCZImiZPyLGQBGRYLTExBTUEuUEUgU0ExCzAJBgNVBAYTAlBFMQ0wCwYDVQQI +DARMSU1BMQ0wCwYDVQQHDARMSU1BMRgwFgYDVQQKDA9UVSBFTVBSRVNBIFMuQS4xRTBDBgNVBAsM +PEROSSA5OTk5OTk5IFJVQyAxMDQ2Nzc5MzU0OSAtIENFUlRJRklDQURPIFBBUkEgREVNT1NUUkFD +ScOTTjFEMEIGA1UEAww7Tk9NQlJFIFJFUFJFU0VOVEFOVEUgTEVHQUwgLSBDRVJUSUZJQ0FETyBQ +QVJBIERFTU9TVFJBQ0nDk04xHDAaBgkqhkiG9w0BCQEWDWRlbW9AbGxhbWEucGUwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCuE7cfjyUaRE1w82EDq5N3zTg2czEGRcopOBHwOV1fy9Oa +t/Qmo0YwvFSWpIbUqVF6UdBe8jPsZY7Q2ATQNn14wRQtLtLxgy6PpFkUK50Nv9pqzEfIK+NV90ol +QXgEg88o3Z2+MUEBDPh8j/f89x6m0irPDOX7xKvJcRsmABSaNpLY84TrlF49Egg05XVWLuXC8vMf +RmXWyv6jK06dcAjVhGUpmGBxLm/ld5f+p9GlshB2rFyWhUBBf++g3xCwtPpyFmv+ARltScOzYcPb +zr9fODbtHDwHDLschuGEpg8rZOwVqekyGxNW0LeDGnq6YtvcW5qVrtEELvqcNkL0D73lAgMBAAGj +VzBVMB0GA1UdDgQWBBTe18LHVKkeRrWs3Bxp1ikK50l96jAfBgNVHSMEGDAWgBTe18LHVKkeRrWs +3Bxp1ikK50l96jATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQUFAAOCAQEASBWcP4Ai +qUUZSG2/Z3RU3BgvOVV3if8xYAaZT99n5PsvyBiZ3Gh6VpAW9ezoe25ZNSqGMmGfq+R4mEuiqK4h +6jDJp0fN47IwRhWjttB9dwpxIDEkWW7zPdueGx+BY8EuyfNDWR/C7GPfu6azSHiapzeKC57AAZ8x +o8kDdhXxDy8hTqNGolkqnc6QutW8cYPeonqyhi2THN163lZ3Cx5OV8vGFQ3ou2msF0klY9qXopI9 +i8wQjEeOG6bCvVxdID9ZjTbuGbO9pAN9hH7hZ41XEG/CspSWbFf1/Wbnlfusne9v9NgRj0MM+LAH +M7AO5/7j1XwRq4x+U9TSVPgpoU9l5Q== + + + 2.1 + 1.0 + T001-00007394 + 2022-12-15 + 09 + observacion + + 12345678912 + + + 12345678912 + + + Softgreen S.A.C + + + + + #PROJECT-OPENUBL-SIGN + + + + + 12345678912 + + + 0000 + AV.BUENA VISTA 123 + - + HUAMANGA + AYACUCHO + AYACUCHO + + PE + + + + Softgreen S.A.C + + + + + 12345678912 + + + Softgreen S.A.C + + + + + 1 + 13 + TRASLADO A OBRA + 26.000 + false + + 02 + + 2022-12-15 + + + + 12345678912 + + + Softgreen S.A.C + + + + + BBA-803 + + + + 71988046 + + + + + 080910 + AV. AVIACION + + PE + + + + + 080910 + S/N CENTRO POB. PICHARI + + PE + + + + + 1 + 3 + + 1 + + + ESPATULA DE 3"" + + 3121190200070403 + + + + + 2 + 1 + + 1 + + + TEMPLE PATO BLANCO X 25 KG + + 250811 + + + + \ No newline at end of file diff --git a/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xsender/it/QuarkusXSenderResource.java b/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xsender/it/QuarkusXSenderResource.java index 83aa0823..47147ffd 100644 --- a/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xsender/it/QuarkusXSenderResource.java +++ b/quarkus-extension/integration-tests/src/main/java/io/github/project/openubl/quarkus/xsender/it/QuarkusXSenderResource.java @@ -50,7 +50,7 @@ public class QuarkusXSenderResource { CompanyURLs companyURLs = CompanyURLs .builder() .invoice("https://e-beta.sunat.gob.pe/ol-ti-itcpfegem-beta/billService") - .despatch("https://e-beta.sunat.gob.pe/ol-ti-itemision-otroscpe-gem-beta/billService") + .despatch("https://e-beta.sunat.gob.pe/ol-ti-itemision-guia-gem-beta/billService") .perceptionRetention("https://e-beta.sunat.gob.pe/ol-ti-itemision-guia-gem-beta/billService") .build();