/** * Handle the <reader/>, <processor/>, or <writer/> that * is defined within the item handler. */ private void handleItemHandlerElement(AbstractBeanDefinition enclosing, String propertyName, String adapterClassName, MutablePropertyValues propertyValues, Element element, ParserContext parserContext) { List<Element> beanElements = DomUtils.getChildElementsByTagName(element, BEAN_ELE); List<Element> refElements = DomUtils.getChildElementsByTagName(element, REF_ELE); if (beanElements.size() + refElements.size() != 1) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> must have exactly one of either a <" + BEAN_ELE + "/> element or a <" + REF_ELE + "/> element.", element); } else if (beanElements.size() == 1) { Element beanElement = beanElements.get(0); BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement( beanElement, enclosing); parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); propertyValues.addPropertyValue(propertyName, beanDefinitionHolder); } else if (refElements.size() == 1) { propertyValues.addPropertyValue(propertyName, parserContext.getDelegate().parsePropertySubElement(refElements.get(0), null)); } handleAdapterMethodAttribute(propertyName, adapterClassName, propertyValues, element); }
handleItemHandler(bd, "reader", "itemReader", ITEM_READER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "processor", "itemProcessor", ITEM_PROCESSOR_ADAPTER_CLASS, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "writer", "itemWriter", ITEM_WRITER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "retry-policy", "retryPolicy", null, false, element, parserContext, propertyValues, underspecified); handleRetryListenersElement(element, propertyValues, parserContext, bd); handleStreamsElement(element, propertyValues, parserContext);
/** * Handle the ItemReader, ItemProcessor, and ItemWriter attributes/elements. */ private void handleItemHandler(AbstractBeanDefinition enclosing, String handlerName, String propertyName, String adapterClassName, boolean required, Element element, ParserContext parserContext, MutablePropertyValues propertyValues, boolean underspecified) { String refName = element.getAttribute(handlerName); List<Element> children = DomUtils.getChildElementsByTagName(element, handlerName); if (children.size() == 1) { if (StringUtils.hasText(refName)) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> element may not have both a '" + handlerName + "' attribute and a <" + handlerName + "/> element.", element); } handleItemHandlerElement(enclosing, propertyName, adapterClassName, propertyValues, children.get(0), parserContext); } else if (children.size() > 1) { parserContext.getReaderContext().error( "The <" + handlerName + "/> element may not appear more than once in a single <" + element.getNodeName() + "/>.", element); } else if (StringUtils.hasText(refName)) { propertyValues.addPropertyValue(propertyName, new RuntimeBeanReference(refName)); } else if (required && !underspecified) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> element has neither a '" + handlerName + "' attribute nor a <" + handlerName + "/> element.", element); } }
handleItemHandler("reader", "itemReader", ITEM_READER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler("processor", "itemProcessor", ITEM_PROCESSOR_ADAPTER_CLASS, false, element, parserContext, propertyValues, underspecified); handleItemHandler("writer", "itemWriter", ITEM_WRITER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler("skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues, underspecified); handleItemHandler("retry-policy", "retryPolicy", null, false, element, parserContext, propertyValues, underspecified); handleExceptionElement(element, parserContext, propertyValues, "skippable-exception-classes", "skippableExceptionClasses"); handleExceptionElement(element, parserContext, propertyValues, "retryable-exception-classes", "retryableExceptionClasses"); handleRetryListenersElement(element, propertyValues, parserContext); handleStreamsElement(element, propertyValues, parserContext);
private void handleRetryListenersElement(Element element, MutablePropertyValues propertyValues, ParserContext parserContext, BeanDefinition enclosing) { Element listenersElement = DomUtils.getChildElementByTagName(element, "retry-listeners"); if (listenersElement != null) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList<BeanMetadataElement> retryListenerBeans = new ManagedList<>(); retryListenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans, enclosing); propertyValues.addPropertyValue("retryListeners", retryListenerBeans); parserContext.popAndRegisterContainingComponent(); } }
chunkElementParser.parse(chunkElements.get(0), bd, parserContext, stepUnderspecified);
private void handleRetryListenersElement(Element element, MutablePropertyValues propertyValues, ParserContext parserContext, BeanDefinition enclosing) { Element listenersElement = DomUtils.getChildElementByTagName(element, "retry-listeners"); if (listenersElement != null) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList<BeanMetadataElement> retryListenerBeans = new ManagedList<BeanMetadataElement>(); retryListenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans, enclosing); propertyValues.addPropertyValue("retryListeners", retryListenerBeans); parserContext.popAndRegisterContainingComponent(); } }
chunkElementParser.parse(chunkElements.get(0), bd, parserContext, stepUnderspecified);
handleItemHandler(bd, "reader", "itemReader", ITEM_READER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "processor", "itemProcessor", ITEM_PROCESSOR_ADAPTER_CLASS, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "writer", "itemWriter", ITEM_WRITER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "retry-policy", "retryPolicy", null, false, element, parserContext, propertyValues, underspecified); handleRetryListenersElement(element, propertyValues, parserContext, bd); handleStreamsElement(element, propertyValues, parserContext);
private void handleRetryListenersElement(Element element, MutablePropertyValues propertyValues, ParserContext parserContext, BeanDefinition enclosing) { Element listenersElement = DomUtils.getChildElementByTagName(element, "retry-listeners"); if (listenersElement != null) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList<BeanMetadataElement> retryListenerBeans = new ManagedList<BeanMetadataElement>(); retryListenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans, enclosing); propertyValues.addPropertyValue("retryListeners", retryListenerBeans); parserContext.popAndRegisterContainingComponent(); } }
/** * Handle the <reader/>, <processor/>, or <writer/> that * is defined within the item handler. */ private void handleItemHandlerElement(AbstractBeanDefinition enclosing, String propertyName, String adapterClassName, MutablePropertyValues propertyValues, Element element, ParserContext parserContext) { List<Element> beanElements = DomUtils.getChildElementsByTagName(element, BEAN_ELE); List<Element> refElements = DomUtils.getChildElementsByTagName(element, REF_ELE); if (beanElements.size() + refElements.size() != 1) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> must have exactly one of either a <" + BEAN_ELE + "/> element or a <" + REF_ELE + "/> element.", element); } else if (beanElements.size() == 1) { Element beanElement = beanElements.get(0); BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement( beanElement, enclosing); parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); propertyValues.addPropertyValue(propertyName, beanDefinitionHolder); } else if (refElements.size() == 1) { propertyValues.addPropertyValue(propertyName, parserContext.getDelegate().parsePropertySubElement(refElements.get(0), null)); } handleAdapterMethodAttribute(propertyName, adapterClassName, propertyValues, element); }
/** * Handle the ItemReader, ItemProcessor, and ItemWriter attributes/elements. */ private void handleItemHandler(AbstractBeanDefinition enclosing, String handlerName, String propertyName, String adapterClassName, boolean required, Element element, ParserContext parserContext, MutablePropertyValues propertyValues, boolean underspecified) { String refName = element.getAttribute(handlerName); List<Element> children = DomUtils.getChildElementsByTagName(element, handlerName); if (children.size() == 1) { if (StringUtils.hasText(refName)) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> element may not have both a '" + handlerName + "' attribute and a <" + handlerName + "/> element.", element); } handleItemHandlerElement(enclosing, propertyName, adapterClassName, propertyValues, children.get(0), parserContext); } else if (children.size() > 1) { parserContext.getReaderContext().error( "The <" + handlerName + "/> element may not appear more than once in a single <" + element.getNodeName() + "/>.", element); } else if (StringUtils.hasText(refName)) { propertyValues.addPropertyValue(propertyName, new RuntimeBeanReference(refName)); } else if (required && !underspecified) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> element has neither a '" + handlerName + "' attribute nor a <" + handlerName + "/> element.", element); } }
chunkElementParser.parse(chunkElements.get(0), bd, parserContext, stepUnderspecified);
handleItemHandler(bd, "reader", "itemReader", ITEM_READER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "processor", "itemProcessor", ITEM_PROCESSOR_ADAPTER_CLASS, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "writer", "itemWriter", ITEM_WRITER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "retry-policy", "retryPolicy", null, false, element, parserContext, propertyValues, underspecified); handleRetryListenersElement(element, propertyValues, parserContext, bd); handleStreamsElement(element, propertyValues, parserContext);
private void handleRetryListenersElement(Element element, MutablePropertyValues propertyValues, ParserContext parserContext, BeanDefinition enclosing) { Element listenersElement = DomUtils.getChildElementByTagName(element, "retry-listeners"); if (listenersElement != null) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList<BeanMetadataElement> retryListenerBeans = new ManagedList<BeanMetadataElement>(); retryListenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans, enclosing); propertyValues.addPropertyValue("retryListeners", retryListenerBeans); parserContext.popAndRegisterContainingComponent(); } }
/** * Handle the <reader/>, <processor/>, or <writer/> that * is defined within the item handler. */ private void handleItemHandlerElement(AbstractBeanDefinition enclosing, String propertyName, String adapterClassName, MutablePropertyValues propertyValues, Element element, ParserContext parserContext) { List<Element> beanElements = DomUtils.getChildElementsByTagName(element, BEAN_ELE); List<Element> refElements = DomUtils.getChildElementsByTagName(element, REF_ELE); if (beanElements.size() + refElements.size() != 1) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> must have exactly one of either a <" + BEAN_ELE + "/> element or a <" + REF_ELE + "/> element.", element); } else if (beanElements.size() == 1) { Element beanElement = beanElements.get(0); BeanDefinitionHolder beanDefinitionHolder = parserContext.getDelegate().parseBeanDefinitionElement( beanElement, enclosing); parserContext.getDelegate().decorateBeanDefinitionIfRequired(beanElement, beanDefinitionHolder); propertyValues.addPropertyValue(propertyName, beanDefinitionHolder); } else if (refElements.size() == 1) { propertyValues.addPropertyValue(propertyName, parserContext.getDelegate().parsePropertySubElement(refElements.get(0), null)); } handleAdapterMethodAttribute(propertyName, adapterClassName, propertyValues, element); }
/** * Handle the ItemReader, ItemProcessor, and ItemWriter attributes/elements. */ private void handleItemHandler(AbstractBeanDefinition enclosing, String handlerName, String propertyName, String adapterClassName, boolean required, Element element, ParserContext parserContext, MutablePropertyValues propertyValues, boolean underspecified) { String refName = element.getAttribute(handlerName); List<Element> children = DomUtils.getChildElementsByTagName(element, handlerName); if (children.size() == 1) { if (StringUtils.hasText(refName)) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> element may not have both a '" + handlerName + "' attribute and a <" + handlerName + "/> element.", element); } handleItemHandlerElement(enclosing, propertyName, adapterClassName, propertyValues, children.get(0), parserContext); } else if (children.size() > 1) { parserContext.getReaderContext().error( "The <" + handlerName + "/> element may not appear more than once in a single <" + element.getNodeName() + "/>.", element); } else if (StringUtils.hasText(refName)) { propertyValues.addPropertyValue(propertyName, new RuntimeBeanReference(refName)); } else if (required && !underspecified) { parserContext.getReaderContext().error( "The <" + element.getNodeName() + "/> element has neither a '" + handlerName + "' attribute nor a <" + handlerName + "/> element.", element); } }
chunkElementParser.parse(chunkElements.get(0), bd, parserContext, stepUnderspecified);
handleItemHandler(bd, "reader", "itemReader", ITEM_READER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "processor", "itemProcessor", ITEM_PROCESSOR_ADAPTER_CLASS, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "writer", "itemWriter", ITEM_WRITER_ADAPTER_CLASS, true, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "skip-policy", "skipPolicy", null, false, element, parserContext, propertyValues, underspecified); handleItemHandler(bd, "retry-policy", "retryPolicy", null, false, element, parserContext, propertyValues, underspecified); handleRetryListenersElement(element, propertyValues, parserContext, bd); handleStreamsElement(element, propertyValues, parserContext);
private void handleRetryListenersElement(Element element, MutablePropertyValues propertyValues, ParserContext parserContext) { Element listenersElement = DomUtils.getChildElementByTagName(element, "retry-listeners"); if (listenersElement != null) { CompositeComponentDefinition compositeDef = new CompositeComponentDefinition(listenersElement.getTagName(), parserContext.extractSource(element)); parserContext.pushContainingComponent(compositeDef); ManagedList retryListenerBeans = new ManagedList(); retryListenerBeans.setMergeEnabled(listenersElement.hasAttribute(MERGE_ATTR) && Boolean.valueOf(listenersElement.getAttribute(MERGE_ATTR))); handleRetryListenerElements(parserContext, listenersElement, retryListenerBeans); propertyValues.addPropertyValue("retryListeners", retryListenerBeans); parserContext.popAndRegisterContainingComponent(); } }