读书人

webservices xfire上 并发出现NullPoi

发布时间: 2012-09-08 10:48:07 作者: rapoo

webservices xfire下 并发出现NullPointerException 异常!
在使用xfire后,在个别服务器上出现webservices挂掉,显示空指针异常的错误信息,如下:
java.lang.NullPointerException

at org.codehaus.xfire.service.binding.ObjectServiceFactory.isValidMethod(ObjectServiceFactory.java:789)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.initializeOperations(ObjectServiceFactory.java:759)

at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:444)

at org.codehaus.xfire.spring.ServiceBean.afterPropertiesSet(ServiceBean.java:176)


主要原因是由于由于xfire-all.jar包中,org.codehaus.xfire.service.binding.ObjectServiceFactory类中:
private List serviceConfigurations;
this.serviceConfigurations = new ArrayList();
/* */ protected boolean isValidMethod(Method method)

/* */ {

/* 786 */ for (Iterator itr = this.serviceConfigurations.iterator(); itr.hasNext(); )

/* */ {

/* 788 */ ServiceConfiguration c = (ServiceConfiguration)itr.next();

/* 789 */ Boolean b = c.isOperation(method);

/* 790 */ if (b != null) return b.booleanValue();

/* */ }

/* 792 */ return true;

/* */ }

ArrayList不是线程安全的,导致并发取到null,修改方案:
1. 直接使用 java.util.concurrent.CopyOnWriteArrayList
2. 使用Collections.synchronizedList(new ArrayList())
这样的话当对list进行迭代时,仍然应该放在同步块中。
建议使用第一种!

读书人网 >Web前端

热点推荐