Skip to content
61 changes: 49 additions & 12 deletions java/src/main/java/com/genexus/internet/GXRestAPIClient.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,17 +3,16 @@
import java.util.*;
import json.org.json.JSONException;
import json.org.json.JSONObject;
import java.util.HashMap;
import java.util.Iterator;

import java.text.SimpleDateFormat;
import java.math.BigDecimal;
import java.text.ParseException;
import java.util.Date;

import json.org.json.IJsonFormattable;
import json.org.json.JSONArray;
import com.genexus.internet.IGxJSONAble;
import com.genexus.xml.GXXMLSerializable;
import com.genexus.internet.IGxJSONSerializable;
import com.genexus.CommonUtil;
import com.genexus.common.interfaces.SpecificImplementation;
import com.genexus.*;
import com.genexus.diagnostics.core.ILogger;
Expand Down Expand Up @@ -46,10 +45,11 @@ public class GXRestAPIClient {
static final String DATE_FMT = "yyyy-MM-dd";
static final String DATETIME_FMT = "yyyy-MM-dd'T'HH:mm:ss";
static final String DATETIME_FMT_MS = "yyyy-MM-dd'T'HH:mm:ss.SSS";
static final String DATE_NULL = "0000-00-00";
static final String DATETIME_NULL = "0000-00-00T00:00:00";

/* Error constants */

static final int RESPONSE_ERROR_CODE = 2;
static final int RESPONSE_ERROR_CODE = 2;
static final int PARSING_ERROR_CODE = 3;
static final int DESERIALIZING_ERROR_CODE = 4;

Expand Down Expand Up @@ -137,6 +137,10 @@ public void addQueryVar(String varName, short varValue) {
queryVars.put(varName, String.valueOf(varValue));
}

public void addQueryVar(String varName, long varValue) {
queryVars.put(varName, String.valueOf(varValue));
}

public void addQueryVar(String varName, double varValue) {
queryVars.put(varName, Double.toString(varValue));
}
Expand All @@ -162,7 +166,7 @@ public void addQueryVar(String varName, Boolean varValue) {
queryVars.put(varName, varValue.toString());
}

public void addQueryVar(String varName, java.math.BigDecimal varValue) {
public void addQueryVar(String varName, BigDecimal varValue) {
queryVars.put(varName, varValue.toString());
}

Expand Down Expand Up @@ -213,15 +217,23 @@ public void addBodyVar(String varName, Date varValue, boolean hasMilliseconds) {
bodyVars.put( varName, quoteString(df.format(varValue)));
}

public void addBodyVar(String varName, short varValue) {
bodyVars.put( varName, Short.toString(varValue));
}

public void addBodyVar(String varName, int varValue) {
bodyVars.put( varName, Integer.toString(varValue));
}

public void addBodyVar(String varName, long varValue) {
bodyVars.put( varName, Long.toString(varValue));
}

public void addBodyVar(String varName, Boolean varValue) {
bodyVars.put( varName, varValue.toString());
}

public void addBodyVar(String varName, java.math.BigDecimal varValue) {
public void addBodyVar(String varName, BigDecimal varValue) {
bodyVars.put( varName, varValue.toString());
}

Expand All @@ -239,7 +251,11 @@ public String getBodyString(String varName) {

public Date getBodyDate(String varName) {
try {
return new SimpleDateFormat(DATE_FMT).parse(getJsonStr(varName));
String val = getJsonStr(varName);
if (val.startsWith(DATE_NULL))
return CommonUtil.newNullDate();
else
return new SimpleDateFormat(DATE_FMT).parse(val);
}
catch (ParseException e) {
return CommonUtil.newNullDate();
Expand All @@ -248,10 +264,15 @@ public Date getBodyDate(String varName) {

public Date getBodyDateTime(String varName, Boolean hasMilliseconds) {
try{
String val = getJsonStr(varName);
String fmt = DATETIME_FMT;
if (hasMilliseconds)
fmt = DATETIME_FMT_MS;
return new SimpleDateFormat(fmt).parse(getJsonStr(varName));

if (val.startsWith(DATETIME_NULL))
return CommonUtil.newNullDate();
else
return new SimpleDateFormat(fmt).parse(val);
}
catch (ParseException e) {
return CommonUtil.newNullDate();
Expand Down Expand Up @@ -281,10 +302,26 @@ public < T extends IGxJSONSerializable> T getBodyGeospatial(String varName, Clas
}
}

public Double getBodyNum(String varName) {
public Double getBodyDouble(String varName) {
return Double.parseDouble(getJsonStr(varName));
}

public BigDecimal getBodyNum(String varName) {
return new BigDecimal(getJsonStr(varName));
}

public long getBodyLong(String varName) {
long value =0;
try{
value = Long.parseLong(getJsonStr(varName));
}
catch(NumberFormatException ex)
{
value = Double.valueOf(getJsonStr(varName)).longValue();
}
return value;
}

public int getBodyInt(String varName) {
return Integer.parseInt(getJsonStr(varName));
}
Expand Down Expand Up @@ -410,7 +447,7 @@ else if (jsonResponse.length() == 1 && jsonResponse.has(""))
}

public <T extends Object> GXSimpleCollection<T> getBodyCollection(String varName, Class<T> elementClasss) {
GXSimpleCollection coll;
GXSimpleCollection<T> coll;
try {
coll = new GXSimpleCollection<T>();
}
Expand Down