private void loadRichFacesComponents() { richfacesAttributes = new HashMap<Class<?>, List<Attribute>>(); try { ClassLoader cl = Attributes.class.getClassLoader(); Enumeration<URL> fileUrls = cl.getResources("META-INF/faces-config.xml"); URL configFile = null; while (fileUrls.hasMoreElements()) { URL url = fileUrls.nextElement(); if (url.getPath().matches(".*richfaces[^/]+jar.*")) { configFile = url; } } JAXBContext context = JAXBContext.newInstance(FacesConfigHolder.class); FacesConfigHolder facesConfigHolder = (FacesConfigHolder) context.createUnmarshaller().unmarshal(configFile); List<Component> components = facesConfigHolder.getComponents(); List<Behavior> behaviors = facesConfigHolder.getBehaviors(); for (Component c : components) { if (c.getAttributes() == null) { continue; } // remove hidden attributes Iterator<Attribute> i = c.getAttributes().iterator(); while (i.hasNext()) { Attribute a = i.next(); if (a.isHidden() || "id".equals(a.getName()) || "binding".equals(a.getName())) { i.remove(); } } richfacesAttributes.put(c.getComponentClass(), c.getAttributes()); logger.debug("attributes for component " + c.getComponentClass().getName() + " loaded"); } for (Behavior b : behaviors) { if (b.getAttributes() == null) { continue; } // remove hidden attributes Iterator<Attribute> i = b.getAttributes().iterator(); while (i.hasNext()) { Attribute a = i.next(); if (a.isHidden() || "id".equals(a.getName()) || "binding".equals(a.getName())) { i.remove(); } } richfacesAttributes.put(b.getBehaviorClass(), b.getAttributes()); logger.debug("attributes for behavior " + b.getBehaviorClass().getName() + " loaded"); } } catch (IOException ex) { logger.error("Input/output error.", ex); } catch (JAXBException ex) { logger.error("XML reading error.", ex); } }