2014-12-02 52 views
0

我已經花了幾天的時間在這個現在,並希望得到一些幫助。我在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()); 
} 
+2

您仍然使用原始集合/不使用的任何原因foreach循環?不要告訴我你使用Java 1.4? – fge 2014-12-02 10:14:46

+0

你可以顯示堆棧跟蹤嗎?另外,在底部代碼片段中,您可以通過cgiData進行迭代,但是這是否是相同的HashMap?最後,你確定地圖中沒有空鍵或值嗎? – 2014-12-02 10:23:04

+1

是的,堆棧跟蹤在這裏是必不可少的,以及Iterator片段(cgiData vs hmParam)上更多的上下文。 – geert3 2014-12-02 10:31:58

回答

0

我做了兩件事情,可能已經產生了影響,在試圖調試發生了什麼事情,我需要這些進一步的進口過程;

import java.util.Iterator; 
import java.util.Map; 

雖然我不是遍歷HashMap的,我已經離開了他們在情況下,它可以給我當應用程序投入生產傾銷HashMap中了我的系統審計跟蹤的選擇。在開始工作後的代碼片段的變體中,我能夠得到我需要的任何數據,即使值爲Null,並且toString()也似乎再次可選,因爲它對輸出沒有影響。

String cgiValue = ""; 
cgiValue = hmParam.get("ship_to_lastname").toString(); 
out.println("<br />Lastname: " + cgiValue); 
out.println("<br />Company name: " + hmParam.get("bill_to_company")); 
out.println("<br />First name: " + hmParam.get("ship_to_firstname")); 

我做的第二件事情,而試圖讓代碼工作是我啓用了選項「編譯Java代碼與調試信息」的代理,這可能已經做了一些該項目內的構建方式Domino Developer客戶端。

我想我必須把它歸結爲當Domino Designer編譯代碼時創建的某種內部錯誤。昨天晚上我發生了嚴重的撞車事故,因此我的筆記本電腦需要冷啓動。您還可能發現,如果您不使用KillNotes完全關閉所有任務,則在使用Domino Designer 8.5.x時會發生奇怪的事情