@Override
	protected List<Device> build(InputStream instream) throws BuilderException {
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		factory.setValidating(true);
		factory.setNamespaceAware(true);
		factory.setAttribute(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);

		try {
			DocumentBuilder builder = factory.newDocumentBuilder();

			builder.setErrorHandler(new DOMErrorHandler());

			Document document = builder.parse(instream);

			DOMDeviceAnalyzer analyzer = DOMDeviceAnalyzer.INSTANCE;

			return analyzer.buildList(document.getDocumentElement());

		} catch (ParseException e) {
			throw new BuilderException(e.getMessage(), e.getCause());
		} catch (ParserConfigurationException e) {
			throw new BuilderException(e.getMessage(), e.getCause());
		} catch (SAXException e) {
			throw new BuilderException(e.getMessage(), e.getCause());
		} catch (IOException e) {
			throw new BuilderException(e.getMessage(), e.getCause());
		}
	}