public Object invoke()

in deltaspike/core/impl/src/main/java/org/apache/deltaspike/core/impl/message/MessageBundleInvocationHandler.java [59:127]


    public Object invoke(final Object proxy, final Method method, final Object[] args) throws Throwable
    {
        if (method.getDeclaringClass().equals(Object.class))
        {
            // this sometimes gets invoked directly by the container
            // there is no perfect solution for those methods,
            // so we try to use the best info we have atm.

            if ("hashCode".equals(method.getName()))
            {
                return proxy.getClass().hashCode();
            }

            if ("toString".equals(method.getName()))
            {
                return proxy.getClass().toString();
            }

            if ("equals".equals(method.getName()))
            {
                return proxy.getClass().equals(args[0].getClass());
            }

            return null;
        }

        final MessageTemplate messageTemplate = method.getAnnotation(MessageTemplate.class);

        String messageTemplateValue;

        if (messageTemplate != null)
        {
            messageTemplateValue = messageTemplate.value();
        }
        else
        {
            messageTemplateValue = "{" + method.getName() + "}";
        }

        MessageContext messageContext = resolveMessageContextFromArguments(args);
        List<Serializable> arguments = resolveMessageArguments(args);

        if (messageContext == null)
        {
            messageContext = baseMessageContext.clone();

            MessageContextConfig messageContextConfig =
                method.getDeclaringClass().getAnnotation(MessageContextConfig.class);

            if (messageContextConfig != null)
            {
                applyMessageContextConfig(messageContext, messageContextConfig);
            }
        }

        String messageBundleName = method.getDeclaringClass().getName();

        Message message =  messageContext
                .messageSource(messageBundleName).message()
                .template(messageTemplateValue)
                .argument(arguments.toArray(new Serializable[arguments.size()]));

        if (String.class.isAssignableFrom(method.getReturnType()))
        {
            return message.toString();
        }

        return message;
    }