[RESOLVIDO]JasperReport: NullPointerException quando a List é vazia

meu relatório tem um subrelatório cuja tag é como segue:
`

	<reportElement x="0" y="0" width="555" height="19" uuid="269d6c0f-24e4-4c18-a75c-91934eb15092"/>
			<dataSourceExpression><![CDATA[new net.sf.jasperreports.engine.data.JRBeanCollectionDataSource($F{listSubReport})]]></dataSourceExpression>
			<subreportExpression><![CDATA[$P{SUBREPORT_FILE_PATH}]]></subreportExpression>
		</subreport>`

O campo listSubReport aponta para uma List.

Quando a List está vazia, o Jasper dispara NullPointerException e o relatório não é gerado. IndexOutOfBoundsException também esta no Stack trace (conforme abaixo):

Caused by: java.lang.NullPointerException
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:167)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:939)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:871)
at net.sf.jasperreports.engine.fill.JRFillSubreport.fillSubreport(JRFillSubreport.java:656)
at net.sf.jasperreports.engine.fill.JRSubreportRunnable.run(JRSubreportRunnable.java:59)
at net.sf.jasperreports.engine.fill.AbstractThreadSubreportRunner.run(AbstractThreadSubreportRunner.java:203)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
... 1 more
Warning:   Servlet.service() for servlet Faces Servlet threw exception 
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.rangeCheck(ArrayList.java:653)
at java.util.ArrayList.get(ArrayList.java:429)
at javax.faces.component.AttachedObjectListHolder.restoreState(AttachedObjectListHolder.java:166)
at javax.faces.component.UIComponentBase.restoreState(UIComponentBase.java:1612)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy$2.visit(FaceletPartialStateManagementStrategy.java:379)
at com.sun.faces.component.visit.FullVisitContext.invokeVisitCallback(FullVisitContext.java:151)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1689)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at javax.faces.component.UIComponent.visitTree(UIComponent.java:1700)
at com.sun.faces.application.view.FaceletPartialStateManagementStrategy.restoreView(FaceletPartialStateManagementStrategy.java:366)
at com.sun.faces.application.StateManagerImpl.restoreView(StateManagerImpl.java:138)
at com.sun.faces.application.view.ViewHandlingStrategy.restoreView(ViewHandlingStrategy.java:123)
at com.sun.faces.application.view.FaceletViewHandlingStrategy.restoreView(FaceletViewHandlingStrategy.java:591)
at com.sun.faces.application.view.MultiViewHandler.restoreView(MultiViewHandler.java:151)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at org.omnifaces.viewhandler.RestorableViewHandler.restoreView(RestorableViewHandler.java:66)
at javax.faces.application.ViewHandlerWrapper.restoreView(ViewHandlerWrapper.java:353)
at com.sun.faces.lifecycle.RestoreViewPhase.execute(RestoreViewPhase.java:199)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.RestoreViewPhase.doPhase(RestoreViewPhase.java:123)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:658)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1682)
at org.apache.catalina.core.ApplicationDispatcher.doInvoke(ApplicationDispatcher.java:875)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:739)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:575)
at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:546)
at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:428)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:378)` 

Como faço para evitar esse erro?

Se eu bem me lembro, existe uma opção para setar, nas propriedades do relatório “When no data”, deve resolver.

valeu

o subrelatorio tem uma propriedade chamada Print When Expression vazia por default, nela eu coloquei

($F{listSubReport} != null && !$F{listSubReport}.isEmpty())

ou seja só imprime se a list for diferente de null e não vazia

deu certo!

darlan_machado, a propósito vc sabe como faço pra dividir os itens da banda detail em 2 colunas pra ocupar menos espaço vertical na folha?

Você precisa redistribuir os fields de acordo com o que necessita.
A banda detail vai se expandir de acordo com a quantidade de dados a serem exibidos, porém, de forma a atender como os fields foram dispostos.
Você pode colocá-los um abaixo do outro, mas, também pode colocá-los lado a lado.

minha banda detail só tem um field (geralmente um String curta)

Eu nunca usei, mas, existe o componente table para o jasper. Com certeza ele resolve a questão das colunas.

fuçando aqui, achei as propriedades column count e print order do relatório. Coloquei os valores 2 e horizontal respectivamente. Deu certo!