Найти основную причину "net.sf.json.JSONException: JSON не допускает бесконечные числа"
Я создаю относительно сложную и большую структуру, закодированную в json для отправки в веб-сервис. Я использую обычную Java и Apache Wink для JSON. Большинство запросов выполняются хорошо, но в одном конкретном случае я получаю следующую ошибку:
net.sf.json.JSONException: JSON does not allow non-finite numbers
at net.sf.json.util.JSONUtils.testValidity(JSONUtils.java:586)
at net.sf.json.JSONObject._processValue(JSONObject.java:2786)
at net.sf.json.JSONObject._setInternal(JSONObject.java:2817)
at net.sf.json.JSONObject.setValue(JSONObject.java:1527)
at net.sf.json.JSONObject._fromBean(JSONObject.java:946)
at net.sf.json.JSONObject.fromObject(JSONObject.java:194)
at net.sf.json.JSONArray._processValue(JSONArray.java:2562)
at net.sf.json.JSONArray.processValue(JSONArray.java:2593)
at net.sf.json.JSONArray.addValue(JSONArray.java:2580)
at net.sf.json.JSONArray._fromCollection(JSONArray.java:1084)
at net.sf.json.JSONArray.fromObject(JSONArray.java:147)
at net.sf.json.JSONObject._processValue(JSONObject.java:2768)
at net.sf.json.JSONObject._setInternal(JSONObject.java:2817)
at net.sf.json.JSONObject.setValue(JSONObject.java:1527)
at net.sf.json.JSONObject._fromBean(JSONObject.java:946)
at net.sf.json.JSONObject.fromObject(JSONObject.java:194)
at net.sf.json.JSONArray._processValue(JSONArray.java:2562)
at net.sf.json.JSONArray.processValue(JSONArray.java:2593)
at net.sf.json.JSONArray.addValue(JSONArray.java:2580)
at net.sf.json.JSONArray._fromCollection(JSONArray.java:1084)
at net.sf.json.JSONArray.fromObject(JSONArray.java:147)
at net.sf.json.JSONObject._processValue(JSONObject.java:2768)
at net.sf.json.JSONObject._setInternal(JSONObject.java:2817)
at net.sf.json.JSONObject.setValue(JSONObject.java:1527)
at net.sf.json.JSONObject._fromBean(JSONObject.java:946)
at net.sf.json.JSONObject.fromObject(JSONObject.java:194)
at net.sf.json.JSONObject.fromObject(JSONObject.java:156)
at com.ibm.arc.sdm2pmp.wsclient.WSClient.createStaffingPlan(WSClient.java:693)
at com.ibm.arc.sdm2pmp.wsclient.WSClient.sendToPMP(WSClient.java:174)
at com.ibm.arc.sdm2pmp.Gateway.processCase(Gateway.java:129)
at com.ibm.arc.sdm2pmp.Gateway.main(Gateway.java:283)
Я кодирую всю структуру сразу (около 10 МБ), и у меня возникает проблема с выяснением того, что приводит к этому странному исключению. Я искал в Интернете, но не мог выйти за рамки очевидного. (не отправляйте неконечные числа).
Знаете ли вы, как лучше всего отладить это и что обычно может привести к этому?
Ваша помощь высоко ценится.
Хайко
2 ответа
Вы, вероятно, пытаетесь представить значение, такое как Double.POSITIVE_INFINITY
или другое неконечное число, которое не разрешено согласно спецификации JSON.
В моем аналогичном случае у меня было конечное число, разделенное на ноль, что приводит к бесконечному числу. Проверьте свои расчеты.