/** * @param deviceDef * @param maxAge * @param vendorFirmware * @param discoveryUSN * @param discoveryUDN * @return a new {@link RootDevice}, or <code>null</code> */ public static RootDevice build( String myIP, URL deviceDef, String maxAge, String vendorFirmware, String discoveryUSN, String discoveryUDN) { Document xml = XMLUtil.getXML(deviceDef); URL baseURL = null; try { String base = XMLUtil.xpath.evaluate("/root/URLBase", xml); try { if (base != null && base.trim().length() > 0) { baseURL = new URL(base); } } catch (MalformedURLException malformedEx) { // crappy urlbase provided // log.warn( "Error occured during device baseURL " + base // + " parsing, building it from device default location", // malformedEx ); malformedEx.printStackTrace(); } if (baseURL == null) { String URL = deviceDef.getProtocol() + "://" + deviceDef.getHost() + ":" + deviceDef.getPort(); String path = deviceDef.getPath(); if (path != null) { int lastSlash = path.lastIndexOf('/'); if (lastSlash != -1) { URL += path.substring(0, lastSlash); } } try { baseURL = new URL(URL); } catch (MalformedURLException e) { e.printStackTrace(); } } return new RootDevice( myIP, xml, baseURL, maxAge, deviceDef, vendorFirmware, discoveryUSN, discoveryUDN); } catch (XPathExpressionException e) { e.printStackTrace(); } return null; }