我試圖通過運行java版本1.5的Websphere Platform 6.1在Windows XP機器(版本5.1構建2600 Service Pack 3)本地測試時調試正常工作的應用程序。無法解釋的ArrayStoreException - 代碼或配置問題
該應用程序在部署到運行java版本1.5.0_24的UNIX服務器(SunOS,版本5.10)時拋出ArrayStoreException。
我傾向於這是一個環境配置問題,但(除了它在本地工作)我似乎無法證實它是一個配置問題。
下面是添加到代碼來解決日誌消息。正如在日誌中指出的,代碼試圖將配置文件對象添加到配置文件。我不明白爲什麼這不起作用。
CollectionUtility.searchMapmsg = ZZZZZ夾縫ArrayStoreException信息ZZZZZ
CollectionUtility.searchMap | MSG = ZZZZZ無法列表項添加到類型[Lcom.process.im.profile.impl.Profile的陣列; ZZZZZ
CollectionUtility.searchMap | msg = ZZZZZ List [0]是com.process.im.profile.impl.Profile類,toString()= com.process.im.profile.impl.Profile mId = 4,mLongName = ccounting ZZZZZ
下面是java代碼所產生的錯誤
public static Object[] searchMap(Map m, Object[] keys, Object[] a)
{
if (keys != null && a != null)
{
List<Object> l = new ArrayList<Object>(keys.length);
searchMap(m, keys, l, true, null);
try
{
a = l.toArray(a);
}
catch (ArrayStoreException eArrayStore)
{
Log.warning("CollectionUtility.searchMap", "ZZZZZ Caught ArrayStoreException ZZZZZ", 0);
if(l==null)
{
Log.warning("CollectionUtility.searchMap", "ZZZZZ Core CollectionUtility ZZZZZ null list.", 0);
}
else
{
for(int i=0; i<l.size(); i++)
{
Object bug = l.get(i);
if(bug==null)
{
Log.warning("CollectionUtility.searchMap", "ZZZZZ List[" + i + "] is null ZZZZZ", 0);
}
else
{
if (a!=null && !a.getClass().getName().equals(bug.getClass().getName()))
{
Log.warning("CollectionUtility.searchMap", "ZZZZZ Unable to add list item to Array of type " + a.getClass().getName() + " ZZZZZ", 0);
Log.warning("CollectionUtility.searchMap", "ZZZZZ List[" + i + "] is class " + bug.getClass().getName() + ", toString()=" + bug.toString() + " ZZZZZ", 0);
}
}
}
}
throw eArrayStore;
}
}
return a;
}
我知道我可能失去了一些東西簡單,但我不知道接下來要檢查什麼。如果您有任何想法,請告訴我。任何和所有的幫助,不勝感激。謝謝!
1.更改方法參數值(a = l.toArray(a);)不是一個好主意。 2.你介意發佈searchMap(m,keys,l,true,null)代碼嗎? – aviad
我不瞭解你,但是......在閱讀了這段代碼幾次之後,我認爲答案非常明顯,我甚至無法看到它......讓我問你:參數「a」包含任何空值?另外,我非常確定這個'a.getClass()。getName()。equals(bug.getClass()。getName())'總是返回'false',因爲'Object'與'Object []'。 –
非常感謝您回覆我!非常感謝。我同意將列表中的一個元素與一個數組類型進行比較將永遠不會相等,因此檢查null將足以顯示日誌。我仍然不知道爲什麼會拋出ArrayStoreException,但我確實發現這個代碼不會在我們所有的UNIX服務器上造成問題。它僅在使用負載平衡服務器的UNIX環境中顯示。我會看看我能否找到更多。請讓我知道你是否遇到過這樣的事情。 – Laura