Skip to content

Commit

Permalink
Merge pull request #75 from lunasoft/feature/storage
Browse files Browse the repository at this point in the history
Feature/storage
  • Loading branch information
marifersw authored Jan 16, 2023
2 parents 623d7fe + fa584ab commit 93653c1
Show file tree
Hide file tree
Showing 18 changed files with 969 additions and 76 deletions.
2 changes: 1 addition & 1 deletion .classpath
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
<attribute name="maven.pomderived" value="true"/>
</attributes>
</classpathentry>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.7">
<attributes>
<attribute name="maven.pomderived" value="true"/>
</attributes>
Expand Down
6 changes: 3 additions & 3 deletions .settings/org.eclipse.jdt.core.prefs
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,9 @@ org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.lambda.genericSignature=do not generate
org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
org.eclipse.jdt.core.compiler.codegen.shareCommonFinallyBlocks=disabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.6
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
Expand Down Expand Up @@ -169,7 +169,7 @@ org.eclipse.jdt.core.compiler.problem.unusedWarningToken=warning
org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast=warning
org.eclipse.jdt.core.compiler.processAnnotations=disabled
org.eclipse.jdt.core.compiler.release=disabled
org.eclipse.jdt.core.compiler.source=1.6
org.eclipse.jdt.core.compiler.source=1.7
org.eclipse.jdt.core.compiler.storeAnnotations=disabled
org.eclipse.jdt.core.compiler.taskCaseSensitive=enabled
org.eclipse.jdt.core.compiler.taskPriorities=NORMAL,HIGH,NORMAL
Expand Down
14 changes: 14 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -918,6 +918,20 @@ System.out.println(response.message);
System.out.println(response.messageDetail);
```

## Recuperar XML por UUID ##
Método para recuperar la información de un XML enviando el UUID de la factura, así como el token de la cuenta en la cual fue timbrada.

```java
SWStorageService storage = new SWStorageService(Utils.tokenSW, Utils.urlApiSW, null, 0);
StorageResponse response = (StorageResponse) storage.getXml(UUID.fromString("c75f87db-e059-4a7c-a922-e4b9c871e8c1"));
System.out.println(response.Status);
System.out.println(response.HttpStatusCode);
System.out.println(response.getData);
//En caso de obtener un error, este puede obtenerse de los campos
System.out.println(response.message);
System.out.println(response.messageDetail);
```

# Servicio PDF #
Servicio para generar PDF de un XML previamente timbrado.
Se permite especificar una de las plantillas genericas o una plantilla personalizada en caso de contar con una.
Expand Down
9 changes: 7 additions & 2 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<project.build.sourceEncoding>ISO-8859-1</project.build.sourceEncoding>
</properties>
<artifactId>SW-JAVA</artifactId>
<version>1.0.8.2</version>
<version>1.0.9.1</version>
<packaging>jar</packaging>
<scm>
<url>https://github.com/lunasoft/sw-sdk-java</url>
Expand Down Expand Up @@ -107,8 +107,8 @@
</execution>
</executions>
<configuration>
<skip>true</skip>
<gpgArguments>
<skip>true</skip>
<arg>--batch</arg>
<arg>--pinentry-mode</arg>
<arg>loopback</arg>
Expand Down Expand Up @@ -151,6 +151,11 @@
</goals>
</execution>
</executions>
<configuration>
<detectOfflineLinks>false</detectOfflineLinks>
<detectJavaApiLink>false</detectJavaApiLink>
<failOnError>false</failOnError>
</configuration>
</plugin>
</plugins>
</build>
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/Services/SWService.java
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ protected SWService(String token, String URI) {

protected SWService(String token, String URI, String ProxyHost, int ProxyPort) {
Token = token;
this.URI = URI;
this.URIAPI = URI;
this.ProxyHost = ProxyHost;
this.ProxyPort = ProxyPort;
this.time = new Date((long)999999999*100000);
Expand Down
51 changes: 51 additions & 0 deletions src/main/java/Services/Storage/SWStorageService.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
package Services.Storage;

import java.io.IOException;
import java.util.UUID;
import Exceptions.AuthException;
import Exceptions.GeneralException;
import Services.SWService;
import Utils.Requests.Storage.StorageOptionsRequest;
import Utils.Requests.Storage.StorageRequest;
import Utils.Responses.IResponse;

public class SWStorageService extends SWService {
/**
* Constructor de la clase.
*
* @param user correo o usuario de SW
* @param password password de SW.
* @param URI url base
* @param URIAPI base de la API
* @param proxyHost ip o dominio de proxy (null si no se utiliza)
* @param proxyPort número de puerto de proxy (cualquier valor si proxy es
* ull)
* @throws AuthException exception en caso de error.
*/
public SWStorageService(String user, String password, String URI, String URIAPI, String proxyHost, int proxyPort)
throws AuthException {
super(user, password, URI, URIAPI, proxyHost, proxyPort);
}

/**
* Constructor de la clase.
*
* @param token token infinito de SW.
* @param URIAPI url base de la API
* @param proxyHost ip o dominio de proxy (null si no se utiliza)
* @param proxyPort número de puerto de proxy (cualquier valor si proxy es
* ull)
*/
public SWStorageService(String token, String URIAPI, String proxyHost, int proxyPort) {
super(token, URIAPI, proxyHost, proxyPort);
}

// Metodo para recuperar información de un XML timbrado con SW
public IResponse getXml(UUID uuid) throws AuthException, GeneralException, IOException {
StorageOptionsRequest settings = new StorageOptionsRequest(getToken(), uuid, getURIAPI(), getProxyHost(),
getProxyPort());
StorageRequest req = new StorageRequest();
req.sendRequest(settings);
return req.sendRequest(settings);
}
}
1 change: 1 addition & 0 deletions src/main/java/Utils/Constants.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ public class Constants {
public static String PENDIENTES_CANCELAR_PATH = "/pendings/";
public static String TAXPAYERS_PATH = "/taxpayers/";
public static String SAVE_CSD = "/certificates/save";
public static String STORAGE_PATH = "/datawarehouse/v1/live/";
public static String DISABLE_SEARCH_CSD = "/certificates/";
public static String LIST_CSD = "/certificates";
public static String REGENERATE_PDF = "/pdf/v1/api/regeneratepdf/";
Expand Down
3 changes: 0 additions & 3 deletions src/main/java/Utils/Requests/Pdf/PdfRequest.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,6 @@

import java.io.IOException;
import java.nio.charset.Charset;
import java.util.UUID;

import org.apache.http.HttpEntity;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
Expand All @@ -17,7 +15,6 @@
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;

import Exceptions.AuthException;
import Exceptions.GeneralException;
import Utils.Helpers.RequestHelper;
Expand Down
18 changes: 18 additions & 0 deletions src/main/java/Utils/Requests/Storage/StorageOptionsRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package Utils.Requests.Storage;

import java.util.UUID;
import Utils.Constants;
import Utils.Requests.IRequest;

public class StorageOptionsRequest extends IRequest {
private UUID uuid;

public StorageOptionsRequest(String token, UUID uuid, String URIAPI, String proxyHost, int proxyPort) {
super(token, URIAPI + Constants.STORAGE_PATH, proxyHost, proxyPort);
this.uuid = uuid;
}

public UUID getUuid() {
return uuid;
}
}
78 changes: 78 additions & 0 deletions src/main/java/Utils/Requests/Storage/StorageRequest.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
package Utils.Requests.Storage;

import java.io.IOException;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONException;
import org.json.JSONObject;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonSyntaxException;
import Exceptions.AuthException;
import Exceptions.GeneralException;
import Utils.Helpers.RequestHelper;
import Utils.Requests.IRequest;
import Utils.Requests.IRequestor;
import Utils.Responses.IResponse;
import Utils.Responses.Storage.StorageData;
import Utils.Responses.Storage.StorageResponse;

public class StorageRequest implements IRequestor {
StorageData dataXml;

public IResponse sendRequest(IRequest request)
throws GeneralException, AuthException, GeneralException, IOException {
try {
CloseableHttpClient client = HttpClients.createDefault();
HttpGet httpget = new HttpGet(request.URI + ((StorageOptionsRequest) request).getUuid());
httpget.setHeader("Authorization", "bearer " + request.Token);
RequestHelper.setTimeOut(request.options, 3500);
RequestHelper.setProxy(request.options, request.proxyHost, request.proxyPort);
httpget.setConfig(request.options.build());
CloseableHttpResponse responseB = client.execute(httpget);
HttpEntity entity = responseB.getEntity();
String responseString = EntityUtils.toString(entity, "UTF-8");
int status = responseB.getStatusLine().getStatusCode();
client.close();
responseB.close();

if (!responseString.isEmpty() && status < 500) {
JSONObject body = new JSONObject(responseString);
if (status == 200) {
dataXml = deserialize(responseString, StorageData.class);
StorageResponse response = new StorageResponse(status, body.getString("status"), "OK", "OK",
dataXml);
if (response.getData() == null || response.getData().getData().getRecords().size() <= 0) {
response.setHttpStatusCode(400);
response.setStatus("error");
response.setMessage("Bad request.");
response.setMessageDetail("El UUID no ha sido encontrado");
}
return response;
} else {
StorageResponse response = new StorageResponse(status, body.getString("status"), "OK", "OK",
dataXml);
return new StorageResponse(status, "error", response.getMessage(), response.getMessageDetail());
}
} else {
return new StorageResponse(status, "error", responseB.getStatusLine().getReasonPhrase(),
responseString);
}
} catch (JSONException e) {
throw new GeneralException(500, e.getMessage());
}

}

public <T> T deserialize(String json, Class<T> contentClass) throws JsonSyntaxException, IOException {
if (json == null || json.isEmpty()) {
throw new IOException("No se obtuvo respuesta para el request hecho.");
}
Gson gson = new GsonBuilder().create();
return gson.fromJson(json, contentClass);
}
}
64 changes: 61 additions & 3 deletions src/main/java/Utils/Responses/IResponse.java
Original file line number Diff line number Diff line change
@@ -1,21 +1,79 @@
package Utils.Responses;

public abstract class IResponse {
public int HttpStatusCode ;
public int HttpStatusCode;
public String Status;
public String message = null;
public String messageDetail = null;

//Status error
// Status error
public IResponse(int httpStatusCode, String status, String message, String messageDetail) {
HttpStatusCode = httpStatusCode;
Status = status;
this.message = message;
this.messageDetail = messageDetail;
}
//Status success general

// Status success general
public IResponse(int httpStatusCode, String status) {
HttpStatusCode = httpStatusCode;
Status = status;
}

/**
* Obtiene el status de la solicitud.
* Solo puede ser "success" o "error".
* En caso de "success" puede consultar el campo "data".
* En caso de "error", consultar "getMessage" y "getMessageDetail".
*
* @return String
*/
public String getStatus() {
return this.Status;
}

public void setStatus(String value) {
this.Status = value;
}

/**
* En caso de requerirlo se puede modificar el Codigo de respuesta Http..
*
* @return int
*/
public void setHttpStatusCode(int value) {
this.HttpStatusCode = value;
}

/**
* Obtiene el mensaje de error obtenido.
* <b>Nota:</b> Este valor generalmente solo existe cunado la solicitud
* termino con status "error".
*
* @return String
*/
public String getMessage() {
return this.message;
}

public void setMessage(String value) {
this.message = value;
}

/**
* Obtiene los detalles acerca del mensaje de error.
* Útil cuando el mensaje de error no es muy claro.
* <b>Nota:</b> Este valor generalmente solo existe cunado la solicitud
* termino con status "error".
* <b>Nota:</b> Puede ser null.
*
* @return String
*/
public String getMessageDetail() {
return this.messageDetail;
}

public void setMessageDetail(String value) {
this.messageDetail = value;
}
}
Loading

0 comments on commit 93653c1

Please sign in to comment.