Is there a particular reason that PacketParserUtils.getParserFor(InputStream) doesn’t skip the document start element like PacketParserUtils.getParserFor(Reader) does? This has the surprising behavior that the overloads for String/Reader behave different than the one with the InputStream.
IMO getParserFor(InputStream) should just pass the created Reader on the stream on to the next overload.