[ https://issues.apache.org/jira/browse/CXF-4903?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Freeman Fang resolved CXF-4903. ------------------------------- Resolution: Not A Problem > jaxws:handlers is not treated as a list in ServerFactoryBeanDefinitionParser > ---------------------------------------------------------------------------- > > Key: CXF-4903 > URL: https://issues.apache.org/jira/browse/CXF-4903 > Project: CXF > Issue Type: Bug > Affects Versions: 2.7.2 > Reporter: kris beaumont > Assignee: Freeman Fang > > I find this in the code: > @Override > protected void mapElement(ParserContext ctx, BeanDefinitionBuilder bean, > Element el, String name) { > if ("properties".equals(name)) { > Map<?, ?> map = ctx.getDelegate().parseMapElement(el, > bean.getBeanDefinition()); > bean.addPropertyValue("properties", map); > } else if ("executor".equals(name)) { > setFirstChildAsProperty(el, ctx, bean, "serviceFactory.executor"); > } else if ("invoker".equals(name)) { > setFirstChildAsProperty(el, ctx, bean, "serviceFactory.invoker"); > } else if ("binding".equals(name)) { > setFirstChildAsProperty(el, ctx, bean, "bindingConfig"); > } else if ("inInterceptors".equals(name) || > "inFaultInterceptors".equals(name) > || "outInterceptors".equals(name) || > "outFaultInterceptors".equals(name) > || "features".equals(name) || "schemaLocations".equals(name)) { > List<?> list = ctx.getDelegate().parseListElement(el, > bean.getBeanDefinition()); > bean.addPropertyValue(name, list); > } else { > setFirstChildAsProperty(el, ctx, bean, name); > } > } > > where I think the list treatment should also be done for the "handlers" > property (that now uses the setFirstChildAsProperty default=> only one > handler from the 'list' is added. > So for this definition: > <!----> > <jaxws:server id="webService" address="/lightWS" > > <jaxws:handlers> > <list> > <!--FIRST get the login data from the cas login ticket > header--> > <bean class="ServiceTicketServerSOAPHandler" /> > <!--SECOND get the username and map it to an applicationCode > to be stored in the threadlocal --> > <bean class="ApplicationCodeSoapHandler" /> > </list> > </jaxws:handlers> > <jaxws:serviceBean> > <ref bean="webServiceImpl" /> > </jaxws:serviceBean> > </jaxws:server> > In the end I only have the first handler and not both, which should be easy > to fix with: > @Override > protected void mapElement(ParserContext ctx, BeanDefinitionBuilder bean, > Element el, String name) { > if ("properties".equals(name)) { > Map<?, ?> map = ctx.getDelegate().parseMapElement(el, > bean.getBeanDefinition()); > bean.addPropertyValue("properties", map); > } else if ("executor".equals(name)) { > setFirstChildAsProperty(el, ctx, bean, "serviceFactory.executor"); > } else if ("invoker".equals(name)) { > setFirstChildAsProperty(el, ctx, bean, "serviceFactory.invoker"); > } else if ("binding".equals(name)) { > setFirstChildAsProperty(el, ctx, bean, "bindingConfig"); > } else if ("inInterceptors".equals(name) || > "inFaultInterceptors".equals(name) > || "outInterceptors".equals(name) || > "outFaultInterceptors".equals(name) > || "features".equals(name) || "schemaLocations".equals(name) > || "handlers".equals(name) //also include the handlers > ) { > List<?> list = ctx.getDelegate().parseListElement(el, > bean.getBeanDefinition()); > bean.addPropertyValue(name, list); > } else { > setFirstChildAsProperty(el, ctx, bean, name); > } > } -- This message is automatically generated by JIRA. If you think it was sent incorrectly, please contact your JIRA administrators For more information on JIRA, see: http://www.atlassian.com/software/jira