Changeset 3923

Show
Ignore:
Timestamp:
10/22/08 11:50:52 (3 months ago)
Author:
mtld
Message:

bean-ref support for ContextInterceptors?

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/pfixcore/ChangeLog

    r3922 r3923  
     12008-10-22  Martin Leidig  <mleidig@schlund.de> 
     2 
     3        * src/org/pustefixframework/config/contextxmlservice/parser/ContextInterceptorParsingHandler.java: 
     4        Added support for configuring ContextInterceptors as Spring beans in 
     5        spring.xml and referencing them in the configuration using the 
     6        "bean-ref" attribute at the "interceptor" element (instead of "class"). 
     7        * projects/core/schema/context-xml-service-config.xsd: added 
     8        'bean-ref' attribute 
     9 
    1102008-10-20  Martin Leidig  <mleidig@schlund.de> 
    211 
  • trunk/pfixcore/projects/core/schema/context-xml-service-config.xsd

    r3916 r3923  
    350350  <xs:element name="interceptor" type="prop:interceptorType"/> 
    351351  <xs:complexType name="interceptorType"> 
    352         <xs:attribute name="class" type="xs:normalizedString" use="required"/> 
     352        <xs:attribute name="class" type="xs:normalizedString"/> 
     353        <xs:attribute name="bean-ref"/> 
    353354  </xs:complexType> 
    354355   
  • trunk/pfixcore/projects/sample1/txt/pages/main_encoding.xml

    r3873 r3923  
    1818       <td align="center" valign="top" width="100" style="background:#EEEEEE"> 
    1919        <ixsl:value-of select="/formresult/text/alphabet/@description"/>:<br/><br/> 
    20         <ixsl:for-each select="/formresult/text/alphabet/characters/item"> 
     20        <ixsl:for-each select="/formresult/text/alphabet/characters/string"> 
    2121          <span style="font-size:140%"><ixsl:value-of select="."/></span><br/> 
    2222        </ixsl:for-each> 
  • trunk/pfixcore/src/org/pustefixframework/config/contextxmlservice/parser/ContextInterceptorParsingHandler.java

    r3875 r3923  
    4040        
    4141        Element element = (Element)context.getNode(); 
    42         ParsingUtils.checkAttributes(element, new String[] {"class"}, null); 
     42        ParsingUtils.checkAttributes(element, null, new String[] {"class","bean-ref"}); 
    4343         
    4444        ContextXMLServletConfigImpl config = ParsingUtils.getSingleTopObject(ContextXMLServletConfigImpl.class, context);      
    4545         
     46        String beanName; 
     47         
    4648        String className = element.getAttribute("class").trim(); 
    47         Class<?> clazz; 
    48         try { 
    49             clazz = Class.forName(className); 
    50         } catch (ClassNotFoundException e) { 
    51             throw new ParserException("Could not load interceptor class " + className, e); 
     49        String beanRef = element.getAttribute("bean-ref").trim(); 
     50        if(className.length()>0) { 
     51             
     52            Class<?> clazz; 
     53            try { 
     54                clazz = Class.forName(className); 
     55            } catch (ClassNotFoundException e) { 
     56                throw new ParserException("Could not load interceptor class " + className, e); 
     57            } 
     58            if (!ContextInterceptor.class.isAssignableFrom(clazz)) { 
     59                throw new ParserException("Context interceptor " + clazz + " does not implement " + ContextInterceptor.class + " interface!"); 
     60            } 
     61             
     62            String scope = element.getAttribute("scope"); 
     63            if (scope == null || scope.length() == 0) { 
     64                scope = "singleton"; 
     65            } 
     66             
     67            BeanDefinitionRegistry beanRegistry = ParsingUtils.getSingleTopObject(BeanDefinitionRegistry.class, context); 
     68            DefaultBeanNameGenerator beanNameGenerator = new DefaultBeanNameGenerator(); 
     69            BeanDefinitionBuilder beanBuilder; 
     70            BeanDefinitionHolder beanHolder; 
     71            BeanDefinition beanDefinition; 
     72             
     73            beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); 
     74            beanBuilder.setScope(scope); 
     75            beanDefinition = beanBuilder.getBeanDefinition(); 
     76            beanName = beanNameGenerator.generateBeanName(beanDefinition, beanRegistry); 
     77            beanHolder = new BeanDefinitionHolder(beanDefinition, beanName); 
     78            if (!scope.equals("singleton") && !scope.equals("prototype")) { 
     79                beanHolder = ScopedProxyUtils.createScopedProxy(beanHolder, beanRegistry, true); 
     80            } 
     81            beanRegistry.registerBeanDefinition(beanHolder.getBeanName(), beanHolder.getBeanDefinition()); 
     82            if (beanHolder.getAliases() != null) { 
     83                for (String alias : beanHolder.getAliases()) { 
     84                    beanRegistry.registerAlias(beanHolder.getBeanName(), alias); 
     85                } 
     86            } 
     87            if(beanRef.length()>0) { 
     88                throw new ParserException("Setting 'class' and 'bean-ref' attribute at 'interceptor' element isn't allowed."); 
     89            } 
     90        } else if(beanRef.length()>0) { 
     91            beanName = beanRef; 
     92        } else { 
     93            throw new ParserException("No 'class' or 'bean-ref' attribute set at 'interceptor' element."); 
    5294        } 
    53         if (!ContextInterceptor.class.isAssignableFrom(clazz)) { 
    54             throw new ParserException("Context interceptor " + clazz + " does not implement " + ContextInterceptor.class + " interface!"); 
    55         } 
    56          
    57         String scope = element.getAttribute("scope"); 
    58         if (scope == null || scope.length() == 0) { 
    59             scope = "singleton"; 
    60         } 
    61          
    62         BeanDefinitionRegistry beanRegistry = ParsingUtils.getSingleTopObject(BeanDefinitionRegistry.class, context); 
    63         DefaultBeanNameGenerator beanNameGenerator = new DefaultBeanNameGenerator(); 
    64         BeanDefinitionBuilder beanBuilder; 
    65         BeanDefinitionHolder beanHolder; 
    66         String beanName; 
    67         BeanDefinition beanDefinition; 
    68          
    69         beanBuilder = BeanDefinitionBuilder.genericBeanDefinition(clazz); 
    70         beanBuilder.setScope(scope); 
    71         beanDefinition = beanBuilder.getBeanDefinition(); 
    72         beanName = beanNameGenerator.generateBeanName(beanDefinition, beanRegistry); 
    73         beanHolder = new BeanDefinitionHolder(beanDefinition, beanName); 
    74         if (!scope.equals("singleton") && !scope.equals("prototype")) { 
    75             beanHolder = ScopedProxyUtils.createScopedProxy(beanHolder, beanRegistry, true); 
    76         } 
    77         beanRegistry.registerBeanDefinition(beanHolder.getBeanName(), beanHolder.getBeanDefinition()); 
    78         if (beanHolder.getAliases() != null) { 
    79             for (String alias : beanHolder.getAliases()) { 
    80                 beanRegistry.registerAlias(beanHolder.getBeanName(), alias); 
    81             } 
    82         } 
     95        
    8396         
    8497        Element parent = (Element)element.getParentNode(); 
    8598        if (parent.getNodeName().equals("start")) { 
    86             config.getContextConfig().addStartInterceptorBean(beanHolder.getBeanName()); 
     99            config.getContextConfig().addStartInterceptorBean(beanName); 
    87100        } 
    88101        if (parent.getNodeName().equals("end")) { 
    89             config.getContextConfig().addEndInterceptorBean(beanHolder.getBeanName()); 
     102            config.getContextConfig().addEndInterceptorBean(beanName); 
    90103        } 
    91104        if (parent.getNodeName().equals("postrender")) { 
    92             config.getContextConfig().addPostRenderInterceptorBean(beanHolder.getBeanName()); 
     105            config.getContextConfig().addPostRenderInterceptorBean(beanName); 
    93106        } 
    94107