commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Glenn Goldenberg" <ggoldenb...@Initiatesystems.com>
Subject [betwixt] NullPointerException in 0.7RC1
Date Fri, 24 Jun 2005 19:10:49 GMT
I am testing out the new 0.7RC1 release of Betwixt and found the following issue when trying
to write a bean to XML.  The name property on the bean is left empty and both the attributesForPrimitives
and mapIDs flags are set to true for the BeanWriter.  Here is the exception (test case included
below):

java.lang.NullPointerException
	at org.apache.commons.betwixt.io.AbstractBeanWriter$ElementAttributes.getURI(AbstractBeanWriter.java:1299)
	at org.apache.commons.betwixt.io.AbstractBeanWriter$IDElementAttributes.getURI(AbstractBeanWriter.java:1460)
	at org.apache.commons.betwixt.io.AbstractBeanWriter.addNamespaceDeclarations(AbstractBeanWriter.java:759)
	at org.apache.commons.betwixt.io.AbstractBeanWriter.writeElement(AbstractBeanWriter.java:813)
	at org.apache.commons.betwixt.io.AbstractBeanWriter.writeBean(AbstractBeanWriter.java:362)
	at org.apache.commons.betwixt.io.AbstractBeanWriter.writeBean(AbstractBeanWriter.java:243)
	at org.apache.commons.betwixt.io.AbstractBeanWriter.write(AbstractBeanWriter.java:174)
	at random.PlainBean.main(PlainBean.java:32)

The NullPointerException occurs because the value of attributes[index] happens to be null
and the getURI() method does not check for this condition.  After doing a little debugging,
it looks like a null is getting in this array because the default ValueSuppressionStrategy
filters out empty property (as in this test) in the AbstractBeanWriter$ElementAttributes.init()
method, but the attributes array is initialized before the filtering so it contains null entries
for every filtered attribute.

The actual bean graph I am trying to persist to XML does have cyclic references so that is
why I need to set mapIDs to true.  I tried setting attributesForPrimitives to false and then
the test works. I also tested this with the 0.6 release and it seems to work.

Thanks,
glenn 


---------------------------------
package random;

import java.io.StringWriter;
import org.apache.commons.betwixt.io.BeanWriter;

public class PlainBean {
	private String name = null;

	public PlainBean() {
	}

	public String getName() {
		return name;
	}
	
	public void setName(String name) {
		this.name = name;
	}
	
	public static void main(String[] args) {
		PlainBean bean = new PlainBean();
		// do not set name property
		
    		StringWriter sw = new StringWriter();
  
		BeanWriter beanWriter = new BeanWriter(sw);
		beanWriter.getXMLIntrospector().getConfiguration().setAttributesForPrimitives(true);
		beanWriter.getBindingConfiguration().setMapIDs(true);
		beanWriter.enablePrettyPrint();

		try {
			beanWriter.write("bean", bean);
		} catch (Exception e) {
			e.printStackTrace();
			// NullPointerException at AbstractBeanWriter.java:1299
		}
	}
}

---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message