Package com.googlecode.jsonrpc4j.spring

Source Code of com.googlecode.jsonrpc4j.spring.JsonProxyFactoryBean

package com.googlecode.jsonrpc4j.spring;

import java.lang.reflect.Type;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
import org.codehaus.jackson.map.ObjectMapper;
import org.springframework.aop.framework.ProxyFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.BeanFactoryUtils;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.remoting.support.UrlBasedRemoteAccessor;

import com.googlecode.jsonrpc4j.JsonRpcHttpClient;

public class JsonProxyFactoryBean
  extends UrlBasedRemoteAccessor
  implements MethodInterceptor,
  InitializingBean,
  FactoryBean,
  ApplicationContextAware {

  private Object        proxyObject      = null;
  private ObjectMapper    objectMapper    = null;
  private JsonRpcHttpClient  jsonRpcHttpClient  = null;
  private Map<String, String>  extraHttpHeaders  = new HashMap<String, String>();
  private ApplicationContext  applicationContext;

  /**
   * {@inheritDoc}
   */
  @Override
  public void afterPropertiesSet() {
    super.afterPropertiesSet();

    // create proxy
    proxyObject = ProxyFactory.getProxy(getServiceInterface(), this);

    // find the ObjectMapper
    if (objectMapper == null
      && applicationContext != null
      && applicationContext.containsBean("objectMapper")) {
      objectMapper = (ObjectMapper) applicationContext.getBean("objectMapper");
    }
    if (objectMapper == null && applicationContext != null) {
      try {
        objectMapper = (ObjectMapper)BeanFactoryUtils
          .beanOfTypeIncludingAncestors(applicationContext, ObjectMapper.class);
      } catch (Exception e) {
        objectMapper = new ObjectMapper();
      }
    }

    // create JsonRpcHttpClient
    try {
      jsonRpcHttpClient = new JsonRpcHttpClient(objectMapper, new URL(getServiceUrl()), extraHttpHeaders);
    } catch (MalformedURLException mue) {
      throw new RuntimeException(mue);
    }
  }

  /**
   * {@inheritDoc}
   */
  public Object invoke(MethodInvocation invocation)
    throws Throwable {

    // get return type
    Type retType = (invocation.getMethod().getGenericReturnType() != null)
      ? invocation.getMethod().getGenericReturnType()
      : invocation.getMethod().getReturnType();

    // invoke it
    return jsonRpcHttpClient.invoke(
      invocation.getMethod().getName(),
      invocation.getArguments(),
      retType, extraHttpHeaders);
  }

  /**
   * {@inheritDoc}
   */
  public Object getObject()
    throws Exception {
    return proxyObject;
  }

  /**
   * {@inheritDoc}
   */
  public Class<?> getObjectType() {
    return getServiceInterface();
  }

  /**
   * {@inheritDoc}
   */
  public boolean isSingleton() {
    return true;
  }

  /**
   * {@inheritDoc}
   */
  public void setApplicationContext(ApplicationContext applicationContext)
    throws BeansException {
    this.applicationContext = applicationContext;
  }

  /**
   * @param objectMapper the objectMapper to set
   */
  public void setObjectMapper(ObjectMapper objectMapper) {
    this.objectMapper = objectMapper;
  }

  /**
   * @param extraHttpHeaders the extraHttpHeaders to set
   */
  public void setExtraHttpHeaders(Map<String, String> extraHttpHeaders) {
    this.extraHttpHeaders = extraHttpHeaders;
  }

}
TOP

Related Classes of com.googlecode.jsonrpc4j.spring.JsonProxyFactoryBean

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.