Let's take in example the following java-bean, which VIOLATES the java beans property names notation
public class GenericItemContainer {
protected boolean isGroup = false;
public void setIsGroup(boolean isGroup) {
this.isGroup = isGroup;
}
public boolean isGroup() {
return isGroup;
}
}
For such java-bean the class org.codehaus.xfire.aegis.type.java5.\AnnotatedTypeInfo performs the following:
protected boolean isAttribute(PropertyDescriptor desc)
{
return desc.getReadMethod().isAnnotationPresent(XmlAttribute.class);
}
and throws NPE, because the desc.getReadMethod() is NULL:
org.codehaus.xfire.XFireRuntimeException: Error initializing parameters for method public java.lang.String uk.ltd.singles.datingengine.remoting.test.TestServiceImpl.echo(java.util.List,java.util.List,java.util.List,java.util.List,java.util.Set,java.lang.Integer,int,java.lang.Boolean,boolean): Couldn't create TypeInfo.. Nested exception is java.lang.NullPointerException: null
java.lang.NullPointerException
at org.codehaus.xfire.aegis.type.java5.AnnotatedTypeInfo.isAttribute(AnnotatedTypeInfo.java:22)
at org.codehaus.xfire.aegis.type.basic.BeanTypeInfo.initialize(BeanTypeInfo.java:52)
at org.codehaus.xfire.aegis.type.java5.AnnotatedTypeInfo.<init>(AnnotatedTypeInfo.java:17)
at org.codehaus.xfire.aegis.type.java5.AnnotatedType.<init>(AnnotatedType.java:15)
at org.codehaus.xfire.aegis.type.java5.Java5TypeCreator.createDefaultType(Java5TypeCreator.java:89)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createTypeForClass(AbstractTypeCreator.java:82)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createType(AbstractTypeCreator.java:238)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createCollectionQName(AbstractTypeCreator.java:174)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createCollectionType(AbstractTypeCreator.java:124)
at org.codehaus.xfire.aegis.type.java5.Java5TypeCreator.createCollectionType(Java5TypeCreator.java:83)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createTypeForClass(AbstractTypeCreator.java:71)
at org.codehaus.xfire.aegis.type.AbstractTypeCreator.createType(AbstractTypeCreator.java:207)
at org.codehaus.xfire.aegis.AegisBindingProvider.getParameterType(AegisBindingProvider.java:184)
at org.codehaus.xfire.aegis.AegisBindingProvider.initializeMessage(AegisBindingProvider.java:128)
at org.codehaus.xfire.aegis.AegisBindingProvider.initialize(AegisBindingProvider.java:96)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:243)
at org.codehaus.xfire.annotations.AnnotationServiceFactory.create(AnnotationServiceFactory.java:117)
at org.codehaus.xfire.service.binding.ObjectServiceFactory.create(ObjectServiceFactory.java:150)
at org.codehaus.xfire.spring.remoting.Jsr181HandlerMapping.initApplicationContext(Jsr181HandlerMapping.java:66)
I guess, it would be better to throw another exception with the corresponding message (for example, "no read method defind in bean bla-bla-bla")