我已經花了幾天的時間在這個現在,並希望得到一些幫助。我在Lotus Domino 8.5.3中有一個Java代理,它由我的Lotusscript驗證代理中的cgi:POST激活,該驗證代理正在檢查客戶是否填寫了帳單和遞送地址表單。這是將傳入數據解析爲HashMap的代碼,其中字段名稱映射到它們各自的值。java.lang.NullPointerException試圖從哈希映射中獲取特定值
HashMap hmParam = new HashMap(); //Our Hashmap for request_content data
//Grab transaction parameters from form that called agent (CGI: request_content)
if (contentDecoded != null) {
String[] arrParam = contentDecoded.split("&");
for(int i=0; i < arrParam.length; i++) {
int n = arrParam[i].indexOf("=");
String paramName = arrParam[i].substring(0, n);
String paramValue = arrParam[i].substring(n + 1, arrParam[i].length());
hmParam.put(paramName, paramValue); //Old HashMap
if (paramName.equalsIgnoreCase("transaction_id")) {
transactionID = paramValue;
description = "Order " + transactionID + " from Fareham Wine Cellar";
//System.out.println("OrderID = " + transactionID);
}
if (paramName.equalsIgnoreCase("amount")) {
orderTotal = paramValue;
}
if (paramName.equalsIgnoreCase("deliveryCharge")) {
shipping = paramValue;
}
}
}
上面的代碼塊可以追溯到一年多來我購物車的原始集成到巴克萊EPDQ支付網關。在那個代理人中,我恢復了特定的價值,然後建立一個表格,然後在這樣的代理商中提交給EPDQ CPI;
out.print("<input type=\"hidden\" name=\"shipping\" value=\"");
out.println(hmParam.get("shipping") + "\">");
我想在這裏做完全相同的事情,除了當我嘗試代理崩潰與空指針異常。我可以用下面的代碼片段順利地遍歷hashMap,所以我知道數據存在,但我不明白爲什麼我不能使用myHashMap.Get(key)以我想要的順序獲取每個字段值html表單。另一個應用程序中的原始代理程序仍在使用中,因此發生了什麼?數據也基本不變字符串字段名映射到字符串值。
Iterator it = cgiData.entrySet().iterator();
while (it.hasNext()) {
Map.Entry pairs = (Map.Entry)it.next();
out.println("<br />" + pairs.getKey() + " = " + pairs.getValue());
//System.out.println(pairs.getKey() + " = " + pairs.getValue());
}
您仍然使用原始集合/不使用的任何原因foreach循環?不要告訴我你使用Java 1.4? – fge 2014-12-02 10:14:46
你可以顯示堆棧跟蹤嗎?另外,在底部代碼片段中,您可以通過cgiData進行迭代,但是這是否是相同的HashMap?最後,你確定地圖中沒有空鍵或值嗎? – 2014-12-02 10:23:04
是的,堆棧跟蹤在這裏是必不可少的,以及Iterator片段(cgiData vs hmParam)上更多的上下文。 – geert3 2014-12-02 10:31:58