On Wed, May 6, 2009 at 1:50 AM, Glen Daniels <g...@thoughtcraft.com> wrote:

> Hi Keith!
>
> keith chapman wrote:
> > Due to a design issue in the Axis2 API we have implemented the
> > getServices() method as follows,
> >
> > public HashMap<String, AxisService> getServices() {
> >         HashMap<String, AxisService> hashMap = new HashMap<String,
> > AxisService>(this.allServices.size());
> >         String key;
> >         for (Iterator<String> iter =
> > this.allServices.keySet().iterator(); iter.hasNext();){
> >             key = iter.next();
> >             hashMap.put(key, this.allServices.get(key));
> >         }
> >         return hashMap;
> >     }
> >
> > In my view this is highly inefficient, especially if you have plenty of
> > services in the system. Wouldn't it be better to fix the API and return
> > a Map instead of a HashMap? If we did that we could simple return
> > allServices instead of returning a copy of it.
>
> You don't want to return an actual reference to a mutable object that backs
> a
> significant data model - otherwise people could just get that Map and
> (mistakenly or maliciously) randomly add and delete services.


Agreed. But now that we've been doing it people may have code that expect it
to be there. So we need a mechanism for returning this map.


>
> However, your point about the HashMap in the API is entirely right - we
> should make it a Map (which shouldn't break anyone already using it in it's
> more specific form).  Also, I'm not sure why we're not just returning
> allServices.clone()... NIH? :)


I was wondering the same. So your in agreement for changing the API and
returning a Map. Cool.

Thanks,
Keith.


>
>
> > If we are making this change I propose that we fix this for modules,
> > transports as well.
>
> Sure.
>
> --Glen
>



-- 
Keith Chapman
Senior Software Engineer
WSO2 Inc.
Oxygenating the Web Service Platform.
http://wso2.org/

blog: http://www.keith-chapman.org

Reply via email to