@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { List<Element> childElements = DomUtils.getChildElementsByTagName(element, "template-loader-path"); if (!childElements.isEmpty()) { List<String> locations = new ArrayList<>(childElements.size()); for (Element childElement : childElements) { locations.add(childElement.getAttribute("location")); } if (locations.isEmpty()) { locations.add("/WEB-INF/"); } builder.addPropertyValue("templateLoaderPaths", StringUtils.toStringArray(locations)); } }
@Nullable private RuntimeBeanReference getAsyncExecutor(Element element) { Element asyncElement = DomUtils.getChildElementByTagName(element, "async-support"); if (asyncElement != null && asyncElement.hasAttribute("task-executor")) { return new RuntimeBeanReference(asyncElement.getAttribute("task-executor")); } return null; }
@Override @Nullable public BeanDefinition parse(Element element, ParserContext parserContext) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(element.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); configureAutoProxyCreator(parserContext, element); List<Element> childElts = DomUtils.getChildElements(element); for (Element elt: childElts) { String localName = parserContext.getDelegate().getLocalName(elt); if (POINTCUT.equals(localName)) { parsePointcut(elt, parserContext); } else if (ADVISOR.equals(localName)) { parseAdvisor(elt, parserContext); } else if (ASPECT.equals(localName)) { parseAspect(elt, parserContext); } } parserContext.popAndRegisterContainingComponent(); return null; }
/** * Utility method that returns the first child element value identified by its name. * @param ele the DOM element to analyze * @param childEleName the child element name to look for * @return the extracted text value, or {@code null} if no child element found */ @Nullable public static String getChildElementValueByTagName(Element ele, String childEleName) { Element child = getChildElementByTagName(ele, childEleName); return (child != null ? getTextValue(child) : null); }
/** * Parse the {@code class} XML elements. */ protected void parseManagedClasses(Element persistenceUnit, SpringPersistenceUnitInfo unitInfo) { List<Element> classes = DomUtils.getChildElementsByTagName(persistenceUnit, MANAGED_CLASS_NAME); for (Element element : classes) { String value = DomUtils.getTextValue(element).trim(); if (StringUtils.hasText(value)) { unitInfo.addManagedClassName(value); } } }
/** * Parse the {@code property} XML elements. */ protected void parseProperties(Element persistenceUnit, SpringPersistenceUnitInfo unitInfo) { Element propRoot = DomUtils.getChildElementByTagName(persistenceUnit, PROPERTIES); if (propRoot == null) { return; } List<Element> properties = DomUtils.getChildElementsByTagName(propRoot, "property"); for (Element property : properties) { String name = property.getAttribute("name"); String value = property.getAttribute("value"); unitInfo.addProperty(name, value); } }
BeanDefinitionBuilder headersWriter = BeanDefinitionBuilder.genericBeanDefinition(HpkpHeaderWriter.class); Element pinsElement = DomUtils.getChildElementByTagName(hpkpElement, PINS_ELEMENT); if (pinsElement != null) { List<Element> pinElements = DomUtils.getChildElements(pinsElement); String hash = pinElement.getAttribute(ATT_ALGORITHM); if (!StringUtils.hasText(hash)) { hash = "sha256"; Node pinValueNode = pinElement.getFirstChild(); if (pinValueNode == null) { context.getReaderContext().warning("Missing value for pin entry.", hpkpElement); continue; String fingerprint = pinElement.getFirstChild().getTextContent(); headersWriter.addPropertyValue("pins", pins); String includeSubDomains = hpkpElement.getAttribute(ATT_INCLUDE_SUBDOMAINS); if (StringUtils.hasText(includeSubDomains)) { headersWriter.addPropertyValue("includeSubDomains", includeSubDomains); String maxAgeSeconds = hpkpElement.getAttribute(ATT_MAX_AGE_SECONDS); if (StringUtils.hasText(maxAgeSeconds)) { headersWriter.addPropertyValue("maxAgeInSeconds", maxAgeSeconds);
@Override @Nullable public BeanDefinition parse(Element element, ParserContext context) { context.pushContainingComponent( new CompositeComponentDefinition(element.getTagName(), context.extractSource(element))); if (element.hasAttribute("path-matcher")) { pathMatcherRef = new RuntimeBeanReference(element.getAttribute("path-matcher")); List<Element> interceptors = DomUtils.getChildElementsByTagName(element, "bean", "ref", "interceptor"); for (Element interceptor : interceptors) { RootBeanDefinition mappedInterceptorDef = new RootBeanDefinition(MappedInterceptor.class); mappedInterceptorDef.setSource(context.extractSource(interceptor)); mappedInterceptorDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); includePatterns = getIncludePatterns(interceptor, "mapping"); excludePatterns = getIncludePatterns(interceptor, "exclude-mapping"); Element beanElem = DomUtils.getChildElementsByTagName(interceptor, "bean", "ref").get(0); interceptorBean = context.getDelegate().parsePropertySubElement(beanElem, null); interceptorBean = context.getDelegate().parsePropertySubElement(interceptor, null);
private ManagedList<AbstractBeanDefinition> parseListeners(Element element, ParserContext parserContext, String stepName) { List<Element> listenersElements = DomUtils.getChildElementsByTagName(element, LISTENERS_ELEMENT); ManagedList<AbstractBeanDefinition> listeners = new ManagedList<>(); if (listenersElements.size() == 1) { Element listenersElement = listenersElements.get(0); CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); listeners.setMergeEnabled(false); List<Element> listenerElements = DomUtils.getChildElementsByTagName(listenersElement, LISTENER_ELEMENT); for (Element listenerElement : listenerElements) { String beanName = listenerElement.getAttribute(REF_ATTRIBUTE); BeanDefinitionBuilder bd = BeanDefinitionBuilder.genericBeanDefinition(listenerType); bd.addPropertyValue("delegate", new RuntimeBeanReference(beanName)); applyListenerScope(beanName, parserContext.getRegistry()); listeners.add(bd.getBeanDefinition()); new PropertyParser(beanName, parserContext, getBatchArtifactType(stepName), stepName).parseProperties(listenerElement); } parserContext.popAndRegisterContainingComponent(); } else if (listenersElements.size() > 1) { parserContext.getReaderContext().error( "The '<listeners/>' element may not appear more than once in a single " + element.getLocalName(), element); } return listeners; }
String overwrite) { Element expressionElement = null; List<Element> subElements = DomUtils.getChildElements(headerElement); if (!subElements.isEmpty()) { Element subElement = subElements.get(0); parserContext.getReaderContext() .error("Only 'bean', 'script' or 'expression' can be defined as a sub-element", element); if (StringUtils.hasText(expression) && expressionElement != null) { parserContext.getReaderContext() .error("The 'expression' attribute and sub-element are mutually exclusive", element); boolean isValue = StringUtils.hasText(value); boolean isRef = StringUtils.hasText(ref); boolean hasMethod = StringUtils.hasText(method); boolean isExpression = StringUtils.hasText(expression) || expressionElement != null; innerComponentDefinition = parserContext.getDelegate() .parseBeanDefinitionElement(beanElement) innerComponentDefinition = parserContext.getDelegate().parseCustomElement(scriptElement); BeanDefinitionBuilder.genericBeanDefinition(StaticHeaderValueMessageProcessor.class) .addConstructorArgValue(headerValue);
@Override protected void parseNested(Element element, ParserContext parserContext, BeanDefinitionBuilder builder, BeanDefinition bd) { bd.setDependsOn(element.getAttribute( RedissonNamespaceParserSupport.REDISSON_REF_ATTRIBUTE)); List<Element> childElements = DomUtils.getChildElements(element); for (Element elt : childElements) { String localName = elt.getLocalName(); if (BeanDefinitionParserDelegate .QUALIFIER_ELEMENT.equals(localName)) { id = elt.getAttribute( BeanDefinitionParserDelegate.BEAN_REF_ATTRIBUTE); } else { parserContext.getDelegate().parseCustomElement(elt, bd); id = elt.getAttribute( RedissonNamespaceParserSupport.ID_ATTRIBUTE); = builder.getRawBeanDefinition() .getConstructorArgumentValues(); if (args.getArgumentCount() > 0) { value.setType(ManagedList.class.getName()); list.add(new RuntimeBeanReference(id)); } else { builder.addConstructorArgReference(id);
@Override protected void postProcess(BeanDefinitionBuilder definitionBuilder, Element element) { Object envValue = DomUtils.getChildElementValueByTagName(element, ENVIRONMENT); if (envValue != null) { // Specific environment settings defined, overriding any shared properties. definitionBuilder.addPropertyValue(JNDI_ENVIRONMENT, envValue); } else { // Check whether there is a reference to shared environment properties... String envRef = element.getAttribute(ENVIRONMENT_REF); if (StringUtils.hasLength(envRef)) { definitionBuilder.addPropertyValue(JNDI_ENVIRONMENT, new RuntimeBeanReference(envRef)); } } String lazyInit = element.getAttribute(LAZY_INIT_ATTRIBUTE); if (StringUtils.hasText(lazyInit) && !DEFAULT_VALUE.equals(lazyInit)) { definitionBuilder.setLazyInit(TRUE_VALUE.equals(lazyInit)); } } }
private void parseAspect(Element aspectElement, ParserContext parserContext) { String aspectId = aspectElement.getAttribute(ID); String aspectName = aspectElement.getAttribute(REF); List<BeanReference> beanReferences = new ArrayList<>(); List<Element> declareParents = DomUtils.getChildElementsByTagName(aspectElement, DECLARE_PARENTS); for (int i = METHOD_INDEX; i < declareParents.size(); i++) { Element declareParentsElement = declareParents.get(i); NodeList nodeList = aspectElement.getChildNodes(); boolean adviceFoundAlready = false; for (int i = 0; i < nodeList.getLength(); i++) { beanReferences.add(new RuntimeBeanReference(aspectName)); parserContext.pushContainingComponent(aspectComponentDefinition); List<Element> pointcuts = DomUtils.getChildElementsByTagName(aspectElement, POINTCUT); for (Element pointcutElement : pointcuts) { parsePointcut(pointcutElement, parserContext); parserContext.popAndRegisterContainingComponent();
private BeanMetadataElement createAccessDeniedHandler(Element element, ParserContext pc) { Element accessDeniedElt = DomUtils.getChildElementByTagName(element, Elements.ACCESS_DENIED_HANDLER); BeanDefinitionBuilder accessDeniedHandler = BeanDefinitionBuilder .rootBeanDefinition(AccessDeniedHandlerImpl.class); if (accessDeniedElt != null) { String errorPage = accessDeniedElt.getAttribute("error-page"); String ref = accessDeniedElt.getAttribute("ref"); if (StringUtils.hasText(errorPage)) { if (StringUtils.hasText(ref)) { pc.getReaderContext() .error("The attribute " + ATT_ACCESS_DENIED_ERROR_PAGE + " cannot be used together with the 'ref' attribute within <" + Elements.ACCESS_DENIED_HANDLER + ">", pc.extractSource(accessDeniedElt)); } accessDeniedHandler.addPropertyValue("errorPage", errorPage); } else if (StringUtils.hasText(ref)) { return new RuntimeBeanReference(ref); } } return accessDeniedHandler.getBeanDefinition(); }
/** * Parse replaced-method sub-elements of the given bean element. */ public void parseReplacedMethodSubElements(Element beanEle, MethodOverrides overrides) { NodeList nl = beanEle.getChildNodes(); for (int i = 0; i < nl.getLength(); i++) { Node node = nl.item(i); if (isCandidateElement(node) && nodeNameEquals(node, REPLACED_METHOD_ELEMENT)) { Element replacedMethodEle = (Element) node; String name = replacedMethodEle.getAttribute(NAME_ATTRIBUTE); String callback = replacedMethodEle.getAttribute(REPLACER_ATTRIBUTE); ReplaceOverride replaceOverride = new ReplaceOverride(name, callback); // Look for arg-type match elements. List<Element> argTypeEles = DomUtils.getChildElementsByTagName(replacedMethodEle, ARG_TYPE_ELEMENT); for (Element argTypeEle : argTypeEles) { String match = argTypeEle.getAttribute(ARG_TYPE_MATCH_ATTRIBUTE); match = (StringUtils.hasText(match) ? match : DomUtils.getTextValue(argTypeEle)); if (StringUtils.hasText(match)) { replaceOverride.addTypeIdentifier(match); } } replaceOverride.setSource(extractSource(replacedMethodEle)); overrides.addOverride(replaceOverride); } } }
@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { List<Element> clientElements = DomUtils.getChildElementsByTagName(element, "client"); ManagedMap<String, BeanMetadataElement> clients = new ManagedMap<String, BeanMetadataElement>(); for (Element clientElement : clientElements) { BeanDefinitionBuilder client = BeanDefinitionBuilder.rootBeanDefinition(BaseClientDetails.class); String clientId = clientElement.getAttribute("client-id"); if (StringUtils.hasText(clientId)) { client.addConstructorArgValue(clientId); parserContext.getReaderContext().error("A client id must be supplied with the definition of a client.", clientElement); String secret = clientElement.getAttribute("secret"); if (StringUtils.hasText(secret)) { client.addPropertyValue("clientSecret", secret); String resourceIds = clientElement.getAttribute("resource-ids"); if (StringUtils.hasText(clientId)) { client.addConstructorArgValue(resourceIds);
void createBasicFilter(BeanReference authManager) { Element basicAuthElt = DomUtils.getChildElementByTagName(httpElt, Elements.BASIC_AUTH); String realm = httpElt.getAttribute(ATT_REALM); if (!StringUtils.hasText(realm)) { realm = DEF_REALM; .rootBeanDefinition(BasicAuthenticationFilter.class); if (StringUtils.hasText(basicAuthElt.getAttribute(ATT_ENTRY_POINT_REF))) { basicEntryPoint = new RuntimeBeanReference( basicAuthElt.getAttribute(ATT_ENTRY_POINT_REF)); RootBeanDefinition entryPoint = new RootBeanDefinition( BasicAuthenticationEntryPoint.class); entryPoint.setSource(pc.extractSource(httpElt)); entryPoint.getPropertyValues().addPropertyValue("realmName", realm); entryPointId = pc.getReaderContext().generateBeanName(entryPoint); pc.registerBeanComponent(new BeanComponentDefinition(entryPoint, entryPointId)); basicEntryPoint = new RuntimeBeanReference(entryPointId); filterBuilder.addConstructorArgValue(authManager); filterBuilder.addConstructorArgValue(basicEntryPoint); basicFilter = filterBuilder.getBeanDefinition();
@Override public BeanDefinition parse(Element element, ParserContext context) { Object source = context.extractSource(element); CompositeComponentDefinition compDefinition = new CompositeComponentDefinition(element.getTagName(), source); context.pushContainingComponent(compDefinition); Element channelElem = DomUtils.getChildElementByTagName(element, "client-inbound-channel"); RuntimeBeanReference inChannel = getMessageChannel("clientInboundChannel", channelElem, context, source); channelElem = DomUtils.getChildElementByTagName(element, "client-outbound-channel"); RuntimeBeanReference outChannel = getMessageChannel("clientOutboundChannel", channelElem, context, source); channelElem = DomUtils.getChildElementByTagName(element, "broker-channel"); RuntimeBeanReference brokerChannel = getMessageChannel("brokerChannel", channelElem, context, source); for (Element endpointElem : DomUtils.getChildElementsByTagName(element, "stomp-endpoint")) { RuntimeBeanReference requestHandler = registerRequestHandler(endpointElem, stompHandler, context, source); String pathAttribute = endpointElem.getAttribute("path"); Assert.hasText(pathAttribute, "Invalid <stomp-endpoint> (no path mapping)"); for (String path : StringUtils.tokenizeToStringArray(pathAttribute, ",")) { path = path.trim(); Assert.hasText(path, () -> "Invalid <stomp-endpoint> path attribute: " + pathAttribute); if (DomUtils.getChildElementByTagName(endpointElem, "sockjs") != null) { path = (path.endsWith("/") ? path + "**" : path + "/**"); context.popAndRegisterContainingComponent(); return null;
void createX509Filter(BeanReference authManager) { Element x509Elt = DomUtils.getChildElementByTagName(httpElt, Elements.X509); RootBeanDefinition filter = null; if (x509Elt != null) { BeanDefinitionBuilder filterBuilder = BeanDefinitionBuilder .rootBeanDefinition(X509AuthenticationFilter.class); filterBuilder.getRawBeanDefinition().setSource(pc.extractSource(x509Elt)); filterBuilder.addPropertyValue("authenticationManager", authManager); String regex = x509Elt.getAttribute("subject-principal-regex"); if (StringUtils.hasText(regex)) { BeanDefinitionBuilder extractor = BeanDefinitionBuilder .rootBeanDefinition(SubjectDnX509PrincipalExtractor.class); extractor.addPropertyValue("subjectDnRegex", regex); filterBuilder.addPropertyValue("principalExtractor", extractor.getBeanDefinition()); } injectAuthenticationDetailsSource(x509Elt, filterBuilder); filter = (RootBeanDefinition) filterBuilder.getBeanDefinition(); createPrauthEntryPoint(x509Elt); createX509Provider(); } x509Filter = filter; }
private void parseHeaderElements(Element element) { List<Element> headerElts = element == null ? Collections.<Element> emptyList() : DomUtils.getChildElementsByTagName(element, GENERIC_HEADER_ELEMENT); for (Element headerElt : headerElts) { String headerFactoryRef = headerElt.getAttribute(ATT_REF); if (StringUtils.hasText(headerFactoryRef)) { headerWriters.add(new RuntimeBeanReference(headerFactoryRef)); } else { BeanDefinitionBuilder builder = BeanDefinitionBuilder .genericBeanDefinition(StaticHeadersWriter.class); builder.addConstructorArgValue(headerElt.getAttribute(ATT_NAME)); builder.addConstructorArgValue(headerElt.getAttribute(ATT_VALUE)); headerWriters.add(builder.getBeanDefinition()); } } }