Hi Christopher, the problem occurs because it tries to escape HTML chars from the values of the examples table that it does not find (defaulting to null). The reason it does not fail for CONSOLE and TXT is that only HTML and XML reporters escape chars.
Opened issue to improve resilience: http://jira.codehaus.org/browse/JBEHAVE-237 But if could you please forward the scenario you're using we can help you sort out the data issues to get it working properly in the first place. Cheers On 27/01/2010 22:10, Christopher Gardner wrote: > I created my own AbstractScenario class to handle the configuration of > the scenario filenames, pending steps, and reports. If I specify only > CONSOLE and TXT, reports work as expected: The jbehave-reports > directory is generated with the .txt and .stats files. If, however, I > add HTML the builder, I receive an exception: > > java.lang.NullPointerException > at > org.jbehave.scenario.reporters.PrintStreamScenarioReporter$1.transform(PrintStreamScenarioReporter.java:245) > at > org.apache.commons.collections.CollectionUtils.transform(CollectionUtils.java:433) > at > org.jbehave.scenario.reporters.PrintStreamScenarioReporter.escape(PrintStreamScenarioReporter.java:252) > at > org.jbehave.scenario.reporters.PrintStreamScenarioReporter.escapeAll(PrintStreamScenarioReporter.java:230) > at > org.jbehave.scenario.reporters.PrintStreamScenarioReporter.format(PrintStreamScenarioReporter.java:222) > at > org.jbehave.scenario.reporters.PrintStreamScenarioReporter.beforeExamples(PrintStreamScenarioReporter.java:188) > at > org.jbehave.scenario.reporters.DelegatingScenarioReporter.beforeExamples(DelegatingScenarioReporter.java:80) > at > org.jbehave.scenario.ScenarioRunner.runExamplesTableScenario(ScenarioRunner.java:94) > at org.jbehave.scenario.ScenarioRunner.run(ScenarioRunner.java:63) > at org.jbehave.scenario.ScenarioRunner.run(ScenarioRunner.java:48) > at org.jbehave.scenario.ScenarioRunner.run(ScenarioRunner.java:38) > at > org.jbehave.scenario.AbstractScenario.runScenario(AbstractScenario.java:75) > at org.jbehave.scenario.JUnitScenario.runScenario(JUnitScenario.java:54) > at > org.jbehave.scenario.JUnitScenario.testScenario(JUnitScenario.java:84) > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) > at > sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) > at > sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) > at java.lang.reflect.Method.invoke(Method.java:592) > at junit.framework.TestCase.runTest(TestCase.java:168) > at junit.framework.TestCase.runBare(TestCase.java:134) > at junit.framework.TestResult$1.protect(TestResult.java:110) > at junit.framework.TestResult.runProtected(TestResult.java:128) > at junit.framework.TestResult.run(TestResult.java:113) > at junit.framework.TestCase.run(TestCase.java:124) > at junit.framework.TestSuite.runTest(TestSuite.java:232) > at junit.framework.TestSuite.run(TestSuite.java:227) > at > org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:79) > at > org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:46) > at > org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) > at > org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) > > > Here is my AbstractScenario. Subclasses are responsible for providing > their class objects and instantiating CandidateSteps. > > package base; > > import static org.jbehave.scenario.reporters.ScenarioReporterBuilder.Format.*; > import org.jbehave.scenario.*; > import org.jbehave.scenario.errors.*; > import org.jbehave.scenario.parser.*; > import org.jbehave.scenario.reporters.FilePrintStreamFactory; > import org.jbehave.scenario.reporters.ScenarioReporter; > import org.jbehave.scenario.reporters.ScenarioReporterBuilder; > import org.jbehave.scenario.steps.*; > > public abstract class AbstractScenario extends JUnitScenario { > > protected static ScenarioNameResolver converter = new > UnderscoredCamelCaseResolver(".scenario"); > > public AbstractScenario(final Class<? extends RunnableScenario> > scenarioClass, CandidateSteps... candidateSteps) { > super(new PropertyBasedConfiguration() { > @Override > public ScenarioDefiner forDefiningScenarios() { > return new ClasspathScenarioDefiner(converter, new > PatternScenarioParser(keywords())); > } > > @Override > public PendingErrorStrategy forPendingSteps() { > return PendingErrorStrategy.FAILING; > } > > @Override > public ScenarioReporter forReportingScenarios() { > return new ScenarioReporterBuilder(new > FilePrintStreamFactory(scenarioClass, converter)) > .with(CONSOLE) > .with(HTML) > .with(TXT) > .build(); > } > }, candidateSteps); > } > } > > Any suggestions as to what I'm doing wrong? > > Thanks. > > --------------------------------------------------------------------- > To unsubscribe from this list, please visit: > > http://xircles.codehaus.org/manage_email > > > --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email
