code: @Override
     public Object invoke(Exchange exchange, Object o)
     {
        BindingOperationInfo bop = exchange.getBindingOperationInfo();
        MethodDispatcher md = (MethodDispatcher) exchange.getService().get(MethodDispatcher.class.getName());
        List<Object> params = null;
        if (o instanceof List) {
           params = CastUtils.cast((List<?>) o);
        } else if (o != null) {
           params = new MessageContentsList(o);
        }
        final Object tb = (factory == null) ? targetBean : this.getServiceObject(exchange);
        final Method method = (bop == null) ? null : md.getMethod(bop);
        if (method == null)
        {
           throw Messages.MESSAGES.missingBindingOpeartionAndDispatchedMethod();
        }
        //performance optimization, adjustMethodAndParams currently looks for @UseAsyncMethod (which is expensive) and only performs actions if it's found
        final Method fm = checkForUseAsyncMethod ? adjustMethodAndParams(md.getMethod(bop), exchange, params, tb.getClass()) : method;
        return invoke(exchange, tb, fm, params);
     }
docs: This overrides org.apache.cxf.jaxws.AbstractInvoker in order for using the JBoss AS target bean
  and simplifying the business method matching