diff --git a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java index 3d7ff098c..358800933 100644 --- a/java/src/main/java/com/genexus/internet/GXRestAPIClient.java +++ b/java/src/main/java/com/genexus/internet/GXRestAPIClient.java @@ -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; @@ -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; @@ -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)); } @@ -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()); } @@ -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()); } @@ -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(); @@ -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(); @@ -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)); } @@ -410,7 +447,7 @@ else if (jsonResponse.length() == 1 && jsonResponse.has("")) } public GXSimpleCollection getBodyCollection(String varName, Class elementClasss) { - GXSimpleCollection coll; + GXSimpleCollection coll; try { coll = new GXSimpleCollection(); }