[
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