while (parserContext.getRegistry().containsBeanDefinition(id)) { id = generatedBeanName + (counter++); if (parserContext.getRegistry().containsBeanDefinition(id)) { throw new IllegalStateException("Duplicate spring bean id " + id); parserContext.getRegistry().registerBeanDefinition(id, beanDefinition); beanDefinition.getPropertyValues().addPropertyValue("id", id); Object value = property.getValue(); if (value instanceof ProtocolConfig && id.equals(((ProtocolConfig) value).getName())) { definition.getPropertyValues().addPropertyValue("protocol", new RuntimeBeanReference(id)); int len = attributes.getLength(); for (int i = 0; i < len; i++) { Node node = attributes.item(i); String name = node.getLocalName(); if (!props.contains(name)) { if (parameters == null) { parameters = new ManagedMap(); String value = node.getNodeValue(); parameters.put(name, new TypedStringValue(value, String.class));
String defaultKeyType = mapEle.getAttribute(KEY_TYPE_ATTRIBUTE); String defaultValueType = mapEle.getAttribute(VALUE_TYPE_ATTRIBUTE); List<Element> entryEles = DomUtils.getChildElementsByTagName(mapEle, ENTRY_ELEMENT); ManagedMap<Object, Object> map = new ManagedMap<>(entryEles.size()); map.setSource(extractSource(mapEle)); map.setKeyTypeName(defaultKeyType); map.setValueTypeName(defaultValueType); map.setMergeEnabled(parseMergeAttribute(mapEle)); NodeList entrySubNodes = entryEle.getChildNodes(); Element keyEle = null; Element valueEle = null; String refName = entryEle.getAttribute(KEY_REF_ATTRIBUTE); if (!StringUtils.hasText(refName)) { error("<entry> element contains empty 'key-ref' attribute", entryEle); RuntimeBeanReference ref = new RuntimeBeanReference(refName); ref.setSource(extractSource(entryEle)); key = ref; String valueType = entryEle.getAttribute(VALUE_TYPE_ATTRIBUTE); if (!StringUtils.hasText(valueType)) { valueType = defaultValueType; map.put(key, value);
ParserContext parserContext, String tokenServicesRef, String serializerRef) { .rootBeanDefinition(AuthorizationEndpoint.class); if (!StringUtils.hasText(oAuth2RequestFactoryRef)) { oAuth2RequestFactoryRef = "oAuth2AuthorizationRequestManager"; parserContext.getRegistry().registerBeanDefinition(oAuth2RequestFactoryRef, tokenGranters.add(new RuntimeBeanReference(customGranterRef)); ManagedMap<String, TypedStringValue> mappings = new ManagedMap<String, TypedStringValue>(); mappings.put("/oauth/token", new TypedStringValue(tokenEndpointUrl, String.class)); mappings.put("/oauth/authorize", new TypedStringValue(authorizationEndpointUrl, String.class)); mappings.put("/oauth/confirm_access", new TypedStringValue(approvalPage, String.class)); mappings.put("/oauth/check_token", new TypedStringValue(checkTokenUrl, String.class)); if (!mappings.isEmpty()) {
private Map<String, Properties> getProperties(String keyName, Properties properties) { ManagedMap<String, Properties> stepProperties = new ManagedMap<>(); stepProperties.setMergeEnabled(true); stepProperties.put(keyName, properties); return stepProperties; }
@SuppressWarnings("unchecked") private static ManagedMap parseParameters(NodeList nodeList, RootBeanDefinition beanDefinition) { if (nodeList != null && nodeList.getLength() > 0) { ManagedMap parameters = null; for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); if (node instanceof Element) { if ("parameter".equals(node.getNodeName()) || "parameter".equals(node.getLocalName())) { if (parameters == null) { parameters = new ManagedMap(); } String key = ((Element) node).getAttribute("key"); String value = ((Element) node).getAttribute("value"); boolean hide = "true".equals(((Element) node).getAttribute("hide")); if (hide) { key = Constants.HIDE_KEY_PREFIX + key; } parameters.put(key, new TypedStringValue(value, String.class)); } } } return parameters; } return null; }
@Test public void mergeSunnyDay() { ManagedMap parent = new ManagedMap(); parent.put("one", "one"); parent.put("two", "two"); ManagedMap child = new ManagedMap(); child.put("three", "three"); child.setMergeEnabled(true); Map mergedMap = (Map) child.merge(parent); assertEquals("merge() obviously did not work.", 3, mergedMap.size()); }
public void handleJobTracker(Node node) { BeanDefinitionBuilder jobTrackerConfigBuilder = createBeanBuilder(JobTrackerConfig.class); Node attName = node.getAttributes().getNamedItem("name"); String name = getTextContent(attName); fillAttributeValues(node, jobTrackerConfigBuilder); jobTrackerManagedMap.put(name, jobTrackerConfigBuilder.getBeanDefinition()); }
@SuppressWarnings("unchecked") protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { // parse attributes (but replace the value assignment with references) NamedNodeMap attributes = element.getAttributes(); for (int x = 0; x < attributes.getLength(); x++) { Attr attribute = (Attr) attributes.item(x); if (isEligibleAttribute(attribute, parserContext)) { String propertyName = extractPropertyName(attribute.getLocalName()); Assert.state(StringUtils.hasText(propertyName), "Illegal property name returned from 'extractPropertyName(String)': cannot be null or empty."); builder.addPropertyReference(propertyName, attribute.getValue()); } } String phase = element.getAttribute("phase"); if (StringUtils.hasText(phase)) { builder.addPropertyValue("phase", phase); } postProcess(builder, element); // parse nested listeners List<Element> listDefs = DomUtils.getChildElementsByTagName(element, "listener"); if (!listDefs.isEmpty()) { ManagedMap<BeanDefinition, Collection<? extends BeanDefinition>> listeners = new ManagedMap<>(listDefs.size()); for (Element listElement : listDefs) { Object[] listenerDefinition = parseListener(listElement); listeners.put((BeanDefinition) listenerDefinition[0], (Collection<? extends BeanDefinition>) listenerDefinition[1]); } builder.addPropertyValue("messageListeners", listeners); } }
private RootBeanDefinition parseAttributeSource(Element attrEle, ParserContext parserContext) { List<Element> methods = DomUtils.getChildElementsByTagName(attrEle, METHOD_ELEMENT); ManagedMap<TypedStringValue, RuleBasedTransactionAttribute> transactionAttributeMap = new ManagedMap<>(methods.size()); transactionAttributeMap.setSource(parserContext.extractSource(attrEle)); String name = methodEle.getAttribute(METHOD_NAME_ATTRIBUTE); TypedStringValue nameHolder = new TypedStringValue(name); nameHolder.setSource(parserContext.extractSource(methodEle)); String propagation = methodEle.getAttribute(PROPAGATION_ATTRIBUTE); String isolation = methodEle.getAttribute(ISOLATION_ATTRIBUTE); String timeout = methodEle.getAttribute(TIMEOUT_ATTRIBUTE); String readOnly = methodEle.getAttribute(READ_ONLY_ATTRIBUTE); if (StringUtils.hasText(propagation)) { attribute.setPropagationBehaviorName(RuleBasedTransactionAttribute.PREFIX_PROPAGATION + propagation); if (StringUtils.hasText(isolation)) { attribute.setIsolationLevelName(RuleBasedTransactionAttribute.PREFIX_ISOLATION + isolation); if (StringUtils.hasText(timeout)) { try { attribute.setTimeout(Integer.parseInt(timeout)); parserContext.getReaderContext().error("Timeout must be an integer value: [" + timeout + "]", methodEle); transactionAttributeMap.put(nameHolder, attribute);
builder.addConstructorArgValue(expressionString); builder.addConstructorArgReference(expressionRef); if (StringUtils.hasText(converter)) { builder.addConstructorArgReference(converter); IntegrationNamespaceUtils.setValueIfAttributeDefined(builder, headerElement, "header-type"); String headerName = headerElement.getAttribute("name"); headers.put(headerName, builder.getBeanDefinition());
protected BeanDefinition createInterceptorDefinition(Node node) { Element interceptMethodsElt = (Element) node; BeanDefinitionBuilder interceptor = BeanDefinitionBuilder .rootBeanDefinition(MethodSecurityInterceptor.class); interceptor.setAutowireMode(RootBeanDefinition.AUTOWIRE_BY_TYPE); String accessManagerId = interceptMethodsElt.getAttribute(ATT_ACCESS_MGR); if (!StringUtils.hasText(accessManagerId)) { accessManagerId = BeanIds.METHOD_ACCESS_MANAGER; interceptor.addPropertyValue("accessDecisionManager", new RuntimeBeanReference( accessManagerId)); interceptor.addPropertyValue("authenticationManager", new RuntimeBeanReference( BeanIds.AUTHENTICATION_MANAGER)); String parentBeanClass = ((Element) node.getParentNode()).getAttribute("class"); List<Element> methods = DomUtils.getChildElementsByTagName(interceptMethodsElt, Elements.PROTECT); Map<String, BeanDefinition> mappings = new ManagedMap<>(); attributeBuilder.setFactoryMethod("createListFromCommaDelimitedString"); attributeBuilder.addConstructorArgValue(protectmethodElt .getAttribute(ATT_ACCESS));
propertyValues, underspecified); String commitInterval = element.getAttribute(COMMIT_INTERVAL_ATTR); if (StringUtils.hasText(commitInterval)) { if (commitInterval.startsWith("#")) { parserContext.getReaderContext().error( ManagedMap<TypedStringValue, Boolean> skippableExceptions = new ExceptionElementParser().parse(element, parserContext, "skippable-exception-classes"); if (StringUtils.hasText(skipLimit)) { if (skippableExceptions == null) { skippableExceptions = new ManagedMap<>(); skippableExceptions.setMergeEnabled(true); List<Element> exceptionClassElements = DomUtils.getChildElementsByTagName(element, "skippable-exception-classes"); skippableExceptions.setMergeEnabled(exceptionClassElements.get(0).hasAttribute(MERGE_ATTR) retryableExceptions = new ManagedMap<>(); retryableExceptions.setMergeEnabled(true); List<Element> exceptionClassElements = DomUtils.getChildElementsByTagName(element, "retryable-exception-classes"); retryableExceptions.setMergeEnabled(exceptionClassElements.get(0).hasAttribute(MERGE_ATTR)
public static BeanDefinition createSecurityMetadataSource(Element element, ParserContext pc) { List<Element> filterPatterns = DomUtils.getChildElementsByTagName(element, "url"); String patternType = element.getAttribute("path-type"); if (!StringUtils.hasText(patternType)) { patternType = "ant"; ManagedMap<BeanDefinition, BeanDefinition> invocationDefinitionMap = new ManagedMap<BeanDefinition, BeanDefinition>(); String path = filterPattern.getAttribute("pattern"); if (!StringUtils.hasText(path)) { pc.getReaderContext().error("pattern attribute cannot be empty or null", filterPattern); String method = filterPattern.getAttribute("httpMethod"); if (!StringUtils.hasText(method)) { method = null; invocationDefinitionMap.put(matcher, BeanDefinitionBuilder.rootBeanDefinition(Collections.class).setFactoryMethod("emptyList").getBeanDefinition()); attributeBuilder.setFactoryMethod("createListFromCommaDelimitedString"); if (invocationDefinitionMap.containsKey(matcher)) { pc.getReaderContext().warning("Duplicate URL defined: " + path + ". The original attribute values will be overwritten", pc.extractSource(filterPattern)); invocationDefinitionMap.put(matcher, attributeBuilder.getBeanDefinition());
boolean addAuthenticatedAll, ParserContext parserContext) { ManagedMap<BeanMetadataElement, BeanDefinition> filterInvocationDefinitionMap = new ManagedMap<>(); String access = urlElt.getAttribute(ATT_ACCESS); if (!StringUtils.hasText(access)) { continue; String path = urlElt.getAttribute(ATT_PATTERN); String matcherRef = urlElt.getAttribute(ATT_REQUEST_MATCHER_REF); boolean hasMatcherRef = StringUtils.hasText(matcherRef); if (!hasMatcherRef && !StringUtils.hasText(path)) { parserContext.getReaderContext().error( "path attribute cannot be empty or null", urlElt); attributeBuilder.addConstructorArgValue(new String[] { access }); attributeBuilder.setFactoryMethod("createList"); if (filterInvocationDefinitionMap.containsKey(matcher)) { logger.warn("Duplicate URL defined: " + path + ". The original attribute values will be overwritten"); filterInvocationDefinitionMap.put(matcher, if (addAuthenticatedAll && filterInvocationDefinitionMap.isEmpty()) { filterInvocationDefinitionMap.put(matcher,
@Override @Nullable public BeanDefinition parse(Element element, ParserContext parserContext) { Object source = parserContext.extractSource(element); String defaultServletName = element.getAttribute("default-servlet-name"); RootBeanDefinition defaultServletHandlerDef = new RootBeanDefinition(DefaultServletHttpRequestHandler.class); defaultServletHandlerDef.setSource(source); defaultServletHandlerDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); if (StringUtils.hasText(defaultServletName)) { defaultServletHandlerDef.getPropertyValues().add("defaultServletName", defaultServletName); } String defaultServletHandlerName = parserContext.getReaderContext().generateBeanName(defaultServletHandlerDef); parserContext.getRegistry().registerBeanDefinition(defaultServletHandlerName, defaultServletHandlerDef); parserContext.registerComponent(new BeanComponentDefinition(defaultServletHandlerDef, defaultServletHandlerName)); Map<String, String> urlMap = new ManagedMap<>(); urlMap.put("/**", defaultServletHandlerName); RootBeanDefinition handlerMappingDef = new RootBeanDefinition(SimpleUrlHandlerMapping.class); handlerMappingDef.setSource(source); handlerMappingDef.setRole(BeanDefinition.ROLE_INFRASTRUCTURE); handlerMappingDef.getPropertyValues().add("urlMap", urlMap); String handlerMappingBeanName = parserContext.getReaderContext().generateBeanName(handlerMappingDef); parserContext.getRegistry().registerBeanDefinition(handlerMappingBeanName, handlerMappingDef); parserContext.registerComponent(new BeanComponentDefinition(handlerMappingDef, handlerMappingBeanName)); // Ensure BeanNameUrlHandlerMapping (SPR-8289) and default HandlerAdapters are not "turned off" MvcNamespaceUtils.registerDefaultComponents(parserContext, source); return null; }
@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); client.addPropertyValue("autoApproveScopes", clientElement.getAttribute("autoapprove")); clients.put(clientId, client.getBeanDefinition());
private static void parseElementDescriptorAttributes(Element element, BeanDefinitionBuilder builder) { ManagedMap<String, String> managedAttributes = new ManagedMap<>(); NamedNodeMap attributes = element.getAttributes(); for (int i = 0; i < attributes.getLength(); i++) { String name = attributes.item(i).getLocalName(); managedAttributes.put(name, element.getAttribute(name)); } builder.addConstructorArgValue(managedAttributes); }
/** * Parses all variable definitions and adds those to the bean definition * builder as property value. * @param builder the target bean definition builder. * @param element the source element. */ private void parseMatcherDefinitions(BeanDefinitionBuilder builder, Element element) { ManagedMap<String, Object> matchers = new ManagedMap<String, Object>(); for (Element matcher : DomUtils.getChildElementsByTagName(element, "matcher")) { if (matcher.hasAttribute("ref")) { matchers.put(matcher.getAttribute("name"), new RuntimeBeanReference(matcher.getAttribute("ref"))); } else { matchers.put(matcher.getAttribute("name"), BeanDefinitionBuilder.rootBeanDefinition(matcher.getAttribute("class")).getBeanDefinition()); } } if (!matchers.isEmpty()) { builder.addPropertyValue("members", matchers); } } }
@Override protected void doParse(Element element, ParserContext parserContext, BeanDefinitionBuilder builder) { List<Element> consumerElements = DomUtils.getChildElementsByTagName(element, "consumer"); ManagedMap<String, BeanMetadataElement> consumers = new ManagedMap<String, BeanMetadataElement>(); for (Object item : consumerElements) { .genericBeanDefinition(ConsumerDetailsFactoryBean.class); Element consumerElement = (Element) item; String key = consumerElement.getAttribute("key"); if (StringUtils.hasText(key)) { consumer.addPropertyValue("consumerKey", key); parserContext.getReaderContext().error( "A consumer key must be supplied with the definition of a consumer.", consumerElement); String secret = consumerElement.getAttribute("secret"); if (StringUtils.hasText(secret)) { consumer.addPropertyValue("secret", secret); String typeOfSecret = consumerElement.getAttribute("typeOfSecret"); consumer.addPropertyValue("typeOfSecret", typeOfSecret); parserContext.getReaderContext().error( "A consumer secret must be supplied with the definition of a consumer.", consumerElement); String name = consumerElement.getAttribute("name"); if (StringUtils.hasText(name)) { consumer.addPropertyValue("consumerName", name); consumers.put(key, consumer.getBeanDefinition());
void createOpenIDLoginFilter(BeanReference sessionStrategy, BeanReference authManager) { Element openIDLoginElt = DomUtils.getChildElementByTagName(httpElt, Elements.OPENID_LOGIN); RootBeanDefinition openIDFilter = null; openIDLoginPage = parser.getLoginPage(); List<Element> attrExElts = DomUtils.getChildElementsByTagName(openIDLoginElt, Elements.OPENID_ATTRIBUTE_EXCHANGE); .rootBeanDefinition(OPEN_ID_CONSUMER_CLASS); BeanDefinitionBuilder axFactory = BeanDefinitionBuilder .rootBeanDefinition(OPEN_ID_ATTRIBUTE_FACTORY_CLASS); ManagedMap<String, ManagedList<BeanDefinition>> axMap = new ManagedMap<String, ManagedList<BeanDefinition>>(); String identifierMatch = attrExElt.getAttribute("identifier-match"); axMap.put(identifierMatch, parseOpenIDAttributes(attrExElt)); axFactory.addConstructorArgValue(axMap); consumerBldr.addConstructorArgValue(axFactory.getBeanDefinition()); authManager); openIDFilterId = pc.getReaderContext().generateBeanName(openIDFilter); pc.registerBeanComponent(new BeanComponentDefinition(openIDFilter, openIDFilterId)); injectRememberMeServicesRef(openIDFilter, rememberMeServicesId);