Reader { Reader(final String name, final Type type) { _name = requireNonNull(name); _type = requireNonNull(type); } Reader(final String name, final Type type); abstract T read(final XMLStreamReader xml); Reader<B> map(final Function<? super T, ? extends B> mapper); @Override String toString(); static Reader<String> attr(final String name); static Reader<String> text(); static Reader<T> elem(
		final Function<Object[], T> generator,
		final String name,
		final Reader<?>... children
	); static Reader<T> elem(
		final String name,
		final Reader<? extends T> reader
	); static Reader<List<T>> elems(final Reader<? extends T> reader);  }
@Test(dataProvider = "readerExamples") public void reader( final String xml, final Reader<?> reader, final Object expected ) throws Exception { Assert.assertEquals(fromBytes(xml.getBytes(), reader), expected); }