Hi David,
>From the exception it looks like you're trying to call addAll method on
>NSArray which is not mutable. Since NSArray is an instance of List interface
>therefore the check at line 532 returns true and therefore addAll get's called
>at link 533 and that's actually raising exception.
Fix: Make sure listClassInContext(context) method is returning mutable object
most likely NSMutableArray.
Farrukh
On 2012-01-25, at 1:21 PM, David Avendasora wrote:
> Hey all,
>
> I'm in over my head again. But at least the "good" news is that I think I'm
> finally inching my way toward the deep end of the pool...
>
> We're suddenly running into the WOBrowser
> "java.lang.UnsupportedOperationException: addAll is not a supported operation
> in com.webobjects.foundation.NSArray" problem as others have run into.
>
> We have a WOComponent that has three WOBrowsers on it. One selects one or
> more "Categories" from all possibilities. The other two manage what related
> objects are related to the selected Categories. One with Available Objects,
> and one with Assigned Objects. Basically, with 3 WOBrowsers we are managing a
> Many-to-Many relationship.
>
> Now, we can easily avoid the error by just making sure that the "selections"
> bindings of the WOBrowsers are not null. Initializing them with
> NSArray.emptyArray() works just fine.
>
> There are two odd things:
> 1) We just started running into this problem and this code has been running
> unchanged for years, and Wonder's last change was 16+ months ago
> 2) There are three WOBrowsers on the Page (2 in one component, 1 in a parent
> component) and only ONE of the WOBrowsers is causing this error.
>
> I believe there is a bug in WO's or WOnder's handling of WOBrowser, but maybe
> (probably) I'm just not fully understanding the implications of multiple
> WOBrowsers in one Page and the Request-Response loop.
>
> 526 if(_selections != null && _selections.isValueSettable()) {
> 526 try {
> 527 Class resultClass = listClassInContext(context);
> 528 Object result = resultClass.newInstance();
> 529 if(result instanceof NSMutableArray) {
> 530 ((NSMutableArray)result).addObjects(selections.toArray());
> 531 } else {
> 532 if(result instanceof List) {
> 533 ((List)result).addAll(selections);
> 534 }
> 535 }
> 536 _selections.setValue(result, context.component());
> 537 } catch(Exception exception) {
>
> If I add the following two lines:
>
> 531 + } else if (result instanceof NSArray) {
> 532 + result = new NSArray(selections.toArray());
>
> Or surround lines 529 - 535 with the following if clause:
>
> 529 + if (selections != null && !selections.isEmpty()) {
> ...
> 537 + }
>
> Then everything works just fine, even if the selections bindings end up null.
>
> That's all very special, but it just covers up the real problem by
> intercepting the bad data before it can cause an error. They don't fix what
> is causing the bad data in the first place.
>
> It appears that for some reason line 527's call to
> EOAssociation#listClassInContext(context) for just ONE of the three
> WOBrowsers returns an instance of NSArray instead of an NSMutableArray. The
> one that gets an NSArray Class is the third WOBrowser on the page, but
> possibly more significantly it's the second with a null "selections" binding.
>
> What I don't get is why would EOAssociation#listClassInContext(context)
> return different Class objects (NSMutableArray for the first, NSArray for the
> second) even when both WOBrowser "selections" bindings are null?
>
> Does anybody have any ideas?
>
> (Clarification for Chuck: I mean ideas that don't directly or indirectly
> involve bourbon and/or hookers)
>
> Dave
>
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/farrukh.ijaz%40fuegodigitalmedia.com
>
> This email sent to [email protected]
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]