You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by ant elder <an...@gmail.com> on 2006/04/21 14:10:49 UTC

Re: svn commit: r395861 - in /incubator/tuscany/java/sca/bindings/binding.jsonrpc: ./ src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/ src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/impl/ src/main/java/org/apache/tuscany/binding/

Note that this moves up to the 1.0 release of JSON-RPC-Java so if you
usually do mvn -o you'll need to drop the -o  to get the new jar

On 4/21/06, antelder@apache.org <an...@apache.org> wrote:
>
> Author: antelder
> Date: Fri Apr 21 04:45:36 2006
> New Revision: 395861
>
> URL: http://svn.apache.org/viewcvs?rev=395861&view=rev
> Log:
> Start tidying up the jsonrpc binding
>
> Added:
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/org/apache/tuscany/binding/jsonrpc/handler/jsonrpc.js
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/handler/
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServletTestCase.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/MockConfigUtils.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletRequest.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletResponse.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpSession.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletConfig.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletContext.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockBinding.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockCompositeContextImpl.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockEntryPointContext.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockScopeContext.java
> Removed:
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/JSONRPCAssemblyFactory.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/impl/JSONRPCAssemblyFactoryImpl.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/impl/JSONRPCBindingImpl.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/config/JSONRPCEntryPointRuntimeConfiguration.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/model/sca-
> binding-jsonrpc.xsd
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/org/apache/tuscany/binding/jsonrpc/handler/sca.js
> Modified:
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/pom.xml
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/JSONRPCBinding.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointConfigurationBuilder.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServlet.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/ScriptGetterServlet.java
>
>     incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/loader/JSONRPCBindingLoader.java
>
> Modified: incubator/tuscany/java/sca/bindings/binding.jsonrpc/pom.xml
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/pom.xml?rev=395861&r1=395860&r2=395861&view=diff
>
> ==============================================================================
> --- incubator/tuscany/java/sca/bindings/binding.jsonrpc/pom.xml (original)
> +++ incubator/tuscany/java/sca/bindings/binding.jsonrpc/pom.xml Fri Apr 21
> 04:45:36 2006
> @@ -49,7 +49,7 @@
>          <dependency>
>              <groupId>metaparadigm</groupId>
>              <artifactId>jsonrpc</artifactId>
> -            <version>SNAPSHOT</version>
> +            <version>1.0</version>
>              <scope>provided</scope>
>          </dependency>
>
>
> Modified:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/JSONRPCBinding.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/JSONRPCBinding.java?rev=395861&r1=395860&r2=395861&view=diff
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/JSONRPCBinding.java
> (original)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/assembly/JSONRPCBinding.java
> Fri Apr 21 04:45:36 2006
> @@ -16,11 +16,14 @@
>   */
> package org.apache.tuscany.binding.jsonrpc.assembly;
>
> -import org.apache.tuscany.model.assembly.Binding;
> +import org.apache.tuscany.model.assembly.impl.BindingImpl;
>
> /**
> - * Represents a JSON binding.
> + * An Binding implementation for JSON-RPC.
>   */
> -public interface JSONRPCBinding extends Binding {
> +public class JSONRPCBinding extends BindingImpl {
> +
> +    public JSONRPCBinding() {
> +    }
>
> }
>
> Modified:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointConfigurationBuilder.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointConfigurationBuilder.java?rev=395861&r1=395860&r2=395861&view=diff
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointConfigurationBuilder.java
> (original)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/builder/JSONRPCEntryPointConfigurationBuilder.java
> Fri Apr 21 04:45:36 2006
> @@ -13,33 +13,32 @@
>   */
> package org.apache.tuscany.binding.jsonrpc.builder;
>
> +import java.lang.reflect.Method;
> +import java.util.HashMap;
> +import java.util.Map;
> +import java.util.Set;
> +
> import org.apache.tuscany.binding.jsonrpc.assembly.JSONRPCBinding;
> -import
> org.apache.tuscany.binding.jsonrpc.config.JSONRPCEntryPointRuntimeConfiguration
> ;
> import org.apache.tuscany.core.builder.BuilderException;
> import org.apache.tuscany.core.builder.ContextFactoryBuilder;
> import org.apache.tuscany.core.builder.ContextFactoryBuilderRegistry;
> import org.apache.tuscany.core.builder.impl.EntryPointContextFactory;
> import org.apache.tuscany.core.config.JavaIntrospectionHelper;
> import org.apache.tuscany.core.context.QualifiedName;
> +import org.apache.tuscany.core.message.MessageFactory;
> +import org.apache.tuscany.core.system.annotation.Autowire;
> import org.apache.tuscany.core.wire.ProxyFactoryFactory;
> import org.apache.tuscany.core.wire.SourceInvocationConfiguration;
> -import org.apache.tuscany.core.wire.WireSourceConfiguration;
> import org.apache.tuscany.core.wire.SourceWireFactory;
> -import org.apache.tuscany.core.message.MessageFactory;
> -import org.apache.tuscany.core.system.annotation.Autowire;
> +import org.apache.tuscany.core.wire.WireSourceConfiguration;
> import org.apache.tuscany.model.assembly.AssemblyObject;
> -import org.apache.tuscany.model.assembly.Service;
> +import org.apache.tuscany.model.assembly.ConfiguredService;
> import org.apache.tuscany.model.assembly.EntryPoint;
> +import org.apache.tuscany.model.assembly.Service;
> import org.apache.tuscany.model.assembly.ServiceContract;
> -import org.apache.tuscany.model.assembly.ConfiguredService;
> import org.osoa.sca.annotations.Init;
> import org.osoa.sca.annotations.Scope;
>
> -import java.lang.reflect.Method;
> -import java.util.HashMap;
> -import java.util.Map;
> -import java.util.Set;
> -
> /**
>   * Creates a <code>RuntimeConfigurationBuilder</code> for an entry point
> configured with the {@link JSONRPCBinding}
>   *
> @@ -87,8 +86,8 @@
>      }
>
>      /**
> -     * Sets a builder responsible for creating source-side and
> target-side wire chains for a reference. The reference builder may be
> -     * hierarchical, containing other child reference builders that
> operate on specific metadata used to construct and wire chain.
> +     * Sets a builder responsible for creating source-side and
> target-side wire chains for a reference. The reference builder may be
> hierarchical,
> +     * containing other child reference builders that operate on specific
> metadata used to construct and wire chain.
>       *
>       * @see org.apache.tuscany.core.builder.impl.HierarchicalBuilder
>       */
> @@ -96,7 +95,7 @@
>          policyBuilder = builder;
>      }
>
> -       public void build(AssemblyObject object) throws BuilderException {
> +    public void build(AssemblyObject object) throws BuilderException {
>          if (!(object instanceof EntryPoint)) {
>              return;
>          }
> @@ -105,8 +104,7 @@
>              return;
>          }
>
> -        EntryPointContextFactory config = new
> JSONRPCEntryPointRuntimeConfiguration(entryPoint.getName(),
> entryPoint.getConfiguredService()
> -                .getPort().getName(), messageFactory);
> +        EntryPointContextFactory config = new EntryPointContextFactory(
> entryPoint.getName(), messageFactory){};
>
>          ConfiguredService configuredService =
> entryPoint.getConfiguredService();
>          Service service = configuredService.getPort();
> @@ -118,9 +116,10 @@
>              SourceInvocationConfiguration iConfig = new
> SourceInvocationConfiguration(method);
>              iConfigMap.put(method, iConfig);
>          }
> -        QualifiedName qName = new QualifiedName(
> entryPoint.getConfiguredReference
> ().getTargetConfiguredServices().get(0).getPart().getName()
> -                + '/' + service.getName());
> -        WireSourceConfiguration wireConfiguration = new
> WireSourceConfiguration(qName, iConfigMap, serviceContract.getInterface().getClassLoader(),
> messageFactory);
> +        QualifiedName qName = new QualifiedName(
> entryPoint.getConfiguredReference().getTargetConfiguredServices().get(0).getPart().getName()
> + '/'
> +                + service.getName());
> +        WireSourceConfiguration wireConfiguration = new
> WireSourceConfiguration(qName, iConfigMap, serviceContract.getInterface
> ().getClassLoader(),
> +                messageFactory);
>          proxyFactory.setBusinessInterface(serviceContract.getInterface
> ());
>          proxyFactory.setConfiguration(wireConfiguration);
>          config.addSourceProxyFactory(service.getName(), proxyFactory);
> @@ -130,9 +129,9 @@
>              policyBuilder.build(configuredService);
>          }
>          // add tail interceptor
> -        //for (InvocationConfiguration iConfig : iConfigMap.values()) {
> -        //    iConfig.addInterceptor(new InvokerInterceptor());
> -        //}
> +        // for (InvocationConfiguration iConfig : iConfigMap.values()) {
> +        // iConfig.addInterceptor(new InvokerInterceptor());
> +        // }
>          entryPoint.setContextFactory(config);
>      }
>
>
> Modified:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServlet.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServlet.java?rev=395861&r1=395860&r2=395861&view=diff
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServlet.java
> (original)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServlet.java
> Fri Apr 21 04:45:36 2006
> @@ -18,16 +18,11 @@
> package org.apache.tuscany.binding.jsonrpc.handler;
>
> import java.io.IOException;
> -import java.lang.reflect.InvocationHandler;
> -import java.lang.reflect.Method;
> -import java.lang.reflect.Proxy;
> import java.util.HashMap;
> -import java.util.Iterator;
> import java.util.Map;
>
> import javax.servlet.ServletConfig;
> import javax.servlet.ServletContext;
> -import javax.servlet.ServletException;
> import javax.servlet.http.HttpServletRequest;
> import javax.servlet.http.HttpServletResponse;
> import javax.servlet.http.HttpSession;
> @@ -35,6 +30,7 @@
> import org.apache.tuscany.binding.jsonrpc.assembly.JSONRPCBinding;
> import org.apache.tuscany.core.context.CompositeContext;
> import org.apache.tuscany.core.context.EntryPointContext;
> +import org.apache.tuscany.core.webapp.TuscanyServletListener;
> import org.apache.tuscany.model.assembly.Binding;
> import org.apache.tuscany.model.assembly.EntryPoint;
> import org.apache.tuscany.model.assembly.Module;
> @@ -43,40 +39,58 @@
> import com.metaparadigm.jsonrpc.JSONRPCServlet;
>
> /**
> - * @version $Rev: 383148 $ $Date: 2006-03-04 08:07:17 -0800 (Sat, 04 Mar
> 2006) $
> + *
> + *
>   */
> public class JSONRPCEntryPointServlet extends JSONRPCServlet {
> -
>      private static final long serialVersionUID = 1L;
>
> -    private static final String ENTRYPOINT_CONFIG =
> JSONRPCEntryPointServlet.class.getName() + ".EntryPoints";
> +    private transient Map<String, Object> entryPointProxys;
>
> +    /*
> +     * (non-Javadoc)
> +     *
> +     * @see com.metaparadigm.jsonrpc.JSONRPCServlet#service(
> javax.servlet.http.HttpServletRequest,
> javax.servlet.http.HttpServletResponse)
> +     */
> +    @Override
>      public void service(HttpServletRequest request, HttpServletResponse
> response) throws IOException, ClassCastException {
>
> +        /*
> +         * Create a new bridge for every request to aviod all the
> problems with JSON-RPC-Java storing the bridge in the session
> +         */
>          HttpSession session = request.getSession();
> -        JSONRPCBridge json_bridge = (JSONRPCBridge) session.getAttribute
> ("JSONRPCBridge");
> -        if (json_bridge == null) {
> -            json_bridge = createJSONRPCBridge(session.getServletContext
> ());
> -            session.setAttribute("JSONRPCBridge", json_bridge);
> +        try {
> +            session.setAttribute("JSONRPCBridge", createJSONRPCBridge());
> +
> +            super.service(request, response);
> +
> +        } finally {
> +            session.removeAttribute("JSONRPCBridge");
>          }
> -        super.service(request, response);
>      }
>
> -    private JSONRPCBridge createJSONRPCBridge(ServletContext
> servletContext) {
> +    /**
> +     * Creates a JSON-RPC-Java Bridge with the objects registered for all
> the JSON-RPC entryPoint proxys
> +     */
> +    protected JSONRPCBridge createJSONRPCBridge() {
>
>          JSONRPCBridge json_bridge = new JSONRPCBridge();
>
> -        Map<String, Object> entryPoints = (Map<String, Object>)
> servletContext.getAttribute(ENTRYPOINT_CONFIG);
> -        for (Iterator i = entryPoints.keySet().iterator(); i.hasNext();)
> {
> -            String entryPointName = (String) i.next();
> -            Object target = entryPoints.get(entryPointName);
> -            json_bridge.registerObject(entryPointName, target);
> +        for (String entryPointName : entryPointProxys.keySet()) {
> +            Object entryPointProxy = entryPointProxys.get
> (entryPointName);
> +            json_bridge.registerObject(entryPointName, entryPointProxy);
>          }
>
>          return json_bridge;
>      }
>
> -    public void init(ServletConfig config) throws ServletException {
> +    /*
> +     * (non-Javadoc)
> +     *
> +     * @see com.metaparadigm.jsonrpc.JSONRPCServlet#init(
> javax.servlet.ServletConfig)
> +     */
> +    @Override
> +    public void init(ServletConfig config) {
>          super.init(config);
>          ClassLoader tccl = Thread.currentThread
> ().getContextClassLoader();
>          ClassLoader mycl = getClass().getClassLoader();
> @@ -85,7 +99,7 @@
>                  Thread.currentThread().setContextClassLoader(mycl);
>              }
>
> -            initTuscany(config);
> +            initEntryPointProxys(config);
>
>          } finally {
>              if (tccl != mycl) {
> @@ -94,28 +108,34 @@
>          }
>      }
>
> -    private void initTuscany(ServletConfig config) {
> +    /**
> +     * Initializes the entryPointProxys Map to contain the proxy objects
> for all the JSON-RPC entryPoints available in the SCA runtime
> +     *
> +     * @param config
> +     */
> +    @SuppressWarnings("deprecation")
> +    protected void initEntryPointProxys(ServletConfig config) {
>
>          ServletContext servletContext = config.getServletContext();
> -        CompositeContext moduleContext = (CompositeContext)
> servletContext.getAttribute("
> org.apache.tuscany.core.webapp.ModuleComponentContext");
> +        CompositeContext moduleContext = (CompositeContext)
> servletContext.getAttribute(TuscanyServletListener.MODULE_COMPONENT_NAME);
>          Module module = (Module) moduleContext.getComposite();
>
> -        Map<String, Object> entryPoints = new HashMap<String, Object>();
> +        this.entryPointProxys = new HashMap<String, Object>();
> +
>          for (EntryPoint entryPoint : module.getEntryPoints()) {
>              if (hasJSONRPCBinding(entryPoint)) {
>                  String entryPointName = entryPoint.getName();
> -                Object proxy = createProxy(moduleContext, entryPoint,
> entryPointName);
> -                entryPoints.put(entryPointName, proxy);
> +                EntryPointContext entryPointContext = (EntryPointContext)
> moduleContext.getContext(entryPointName);
> +                Object entryPointProxy = entryPointContext.getInstance
> (null);
> +                entryPointProxys.put(entryPointName, entryPointProxy);
>              }
>          }
> -
> -        servletContext.setAttribute(ENTRYPOINT_CONFIG, entryPoints);
>      }
>
>      /**
>       * Tests if the EntryPoint has a JSONRPCBinding
>       */
> -    private boolean hasJSONRPCBinding(EntryPoint entryPoint) {
> +    protected boolean hasJSONRPCBinding(EntryPoint entryPoint) {
>          for (Binding binding : entryPoint.getBindings()) {
>              if (binding instanceof JSONRPCBinding) {
>                  return true;
> @@ -124,22 +144,11 @@
>          return false;
>      }
>
> -    private Object createProxy(CompositeContext moduleContext, EntryPoint
> entryPoint, String entryPointName) {
> -        final EntryPointContext entryPointContext = (EntryPointContext)
> moduleContext.getContext(entryPointName);
> -        InvocationHandler ih = new InvocationHandler() {
> -            public Object invoke(Object o, Method method, Object[] args)
> throws Throwable {
> -                Object target = entryPointContext.getHandler();
> -                if (target instanceof InvocationHandler) {
> -                    return ((InvocationHandler) target).invoke(this,
> method, args);
> -                } else {
> -                    return method.invoke(target, args);
> -                }
> -            }
> -        };
> -        Class iFace = entryPoint.getConfiguredReference
> ().getPort().getServiceContract().getInterface();
> -        ClassLoader cl = iFace.getClassLoader();
> -        Object proxy = Proxy.newProxyInstance(cl, new Class[] { iFace },
> ih);
> -        return proxy;
> +    /**
> +     * Get the Map of entryPoint proxys
> +     */
> +    protected Map<String, Object> getEntryPointProxys() {
> +        return entryPointProxys;
>      }
>
> }
>
> Modified:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/ScriptGetterServlet.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/ScriptGetterServlet.java?rev=395861&r1=395860&r2=395861&view=diff
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/ScriptGetterServlet.java
> (original)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/handler/ScriptGetterServlet.java
> Fri Apr 21 04:45:36 2006
> @@ -1,5 +1,6 @@
> package org.apache.tuscany.binding.jsonrpc.handler;
>
> +import java.io.ByteArrayInputStream;
> import java.io.IOException;
> import java.io.InputStream;
> import java.net.URL;
> @@ -12,10 +13,18 @@
> public class ScriptGetterServlet extends HttpServlet {
>
>      private static final long serialVersionUID = 1L;
> +
> +    private static final String SCA_INIT_JS = "SCA = new
> JSONRpcClient(\"SCA/jsonrpc\");";
>
>      public void doGet(HttpServletRequest request, HttpServletResponse
> response) throws IOException {
> -        URL url = getClass().getResource("sca.js");
> +        URL url = getClass().getResource("jsonrpc.js");
>          InputStream is = url.openStream();
> +        writeToStream(response, is);
> +
> +        writeToStream(response, new
> ByteArrayInputStream(SCA_INIT_JS.getBytes()));
> +    }
> +
> +    private void writeToStream(HttpServletResponse response, InputStream
> is) throws IOException {
>          ServletOutputStream os = response.getOutputStream();
>          int i;
>          while ((i = is.read()) != -1) {
>
> Modified:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/loader/JSONRPCBindingLoader.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/loader/JSONRPCBindingLoader.java?rev=395861&r1=395860&r2=395861&view=diff
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/loader/JSONRPCBindingLoader.java
> (original)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/java/org/apache/tuscany/binding/jsonrpc/loader/JSONRPCBindingLoader.java
> Fri Apr 21 04:45:36 2006
> @@ -17,30 +17,26 @@
> package org.apache.tuscany.binding.jsonrpc.loader;
>
> import javax.xml.namespace.QName;
> -import javax.xml.stream.XMLStreamReader;
> import javax.xml.stream.XMLStreamException;
> +import javax.xml.stream.XMLStreamReader;
>
> -import org.osoa.sca.annotations.Scope;
> -import org.osoa.sca.annotations.Init;
> -import org.osoa.sca.annotations.Destroy;
> -
> +import org.apache.tuscany.binding.jsonrpc.assembly.JSONRPCBinding;
> +import org.apache.tuscany.common.resource.ResourceLoader;
> +import org.apache.tuscany.core.config.ConfigurationLoadException;
> import org.apache.tuscany.core.loader.StAXElementLoader;
> import org.apache.tuscany.core.loader.StAXLoaderRegistry;
> import org.apache.tuscany.core.system.annotation.Autowire;
> -import org.apache.tuscany.core.config.ConfigurationLoadException;
> -import org.apache.tuscany.common.resource.ResourceLoader;
> -import org.apache.tuscany.binding.jsonrpc.assembly.JSONRPCBinding;
> -import org.apache.tuscany.binding.jsonrpc.assembly.JSONRPCAssemblyFactory
> ;
> -import
> org.apache.tuscany.binding.jsonrpc.assembly.impl.JSONRPCAssemblyFactoryImpl
> ;
> +import org.osoa.sca.annotations.Destroy;
> +import org.osoa.sca.annotations.Init;
> +import org.osoa.sca.annotations.Scope;
>
> /**
>   * @version $Rev$ $Date$
>   */
> @Scope("MODULE")
> public class JSONRPCBindingLoader implements
> StAXElementLoader<JSONRPCBinding> {
> -    public static final QName BINDING_ISONRPC = new QName("
> http://org.apache.tuscany/xmlns/jsonrpc/0.9", "binding.jsonrpc");
>
> -    private static final JSONRPCAssemblyFactory jsonFactory = new
> JSONRPCAssemblyFactoryImpl();
> +    public static final QName BINDING_JSONRPC = new QName("
> http://org.apache.tuscany/xmlns/jsonrpc/0.9", "binding.jsonrpc");
>
>      protected StAXLoaderRegistry registry;
>
> @@ -51,16 +47,16 @@
>
>      @Init(eager = true)
>      public void start() {
> -        registry.registerLoader(BINDING_ISONRPC, this);
> +        registry.registerLoader(BINDING_JSONRPC, this);
>      }
>
>      @Destroy
>      public void stop() {
> -        registry.unregisterLoader(BINDING_ISONRPC, this);
> +        registry.unregisterLoader(BINDING_JSONRPC, this);
>      }
>
>      public JSONRPCBinding load(XMLStreamReader reader, ResourceLoader
> resourceLoader) throws XMLStreamException, ConfigurationLoadException {
> -        JSONRPCBinding binding = jsonFactory.createJSONRPCBinding();
> +        JSONRPCBinding binding = new JSONRPCBinding();
>          binding.setURI(reader.getAttributeValue(null, "uri"));
>          return binding;
>      }
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/org/apache/tuscany/binding/jsonrpc/handler/jsonrpc.js
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/org/apache/tuscany/binding/jsonrpc/handler/jsonrpc.js?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/org/apache/tuscany/binding/jsonrpc/handler/jsonrpc.js
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/main/resources/org/apache/tuscany/binding/jsonrpc/handler/jsonrpc.js
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,484 @@
> +/*
> + * JSON-RPC JavaScript client
> + *
> + * $Id: jsonrpc.js,v 1.36.2.3 2006/03/08 15:09:37 mclark Exp $
> + *
> + * Copyright (c) 2003-2004 Jan-Klaas Kollhof
> + * Copyright (c) 2005 Michael Clark, Metaparadigm Pte Ltd
> + *
> + * This code is based on Jan-Klaas' JavaScript o lait library (jsolait).
> + *
> + * Licensed under the Apache License, Version 2.0 (the "License");
> + * you may not use this file except in compliance with the License.
> + * You may obtain a copy of the License at
> + *
> + *    http://www.apache.org/licenses/LICENSE-2.0
> + *
> + * Unless required by applicable law or agreed to in writing, software
> + * distributed under the License is distributed on an "AS IS" BASIS,
> + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + * See the License for the specific language governing permissions and
> + * limitations under the License.
> + *
> + */
> +
> +
> +/* escape a character */
> +
> +escapeJSONChar =
> +function escapeJSONChar(c)
> +{
> +    if(c == "\"" || c == "\\") return "\\" + c;
> +    else if (c == "\b") return "\\b";
> +    else if (c == "\f") return "\\f";
> +    else if (c == "\n") return "\\n";
> +    else if (c == "\r") return "\\r";
> +    else if (c == "\t") return "\\t";
> +    var hex = c.charCodeAt(0).toString(16);
> +    if(hex.length == 1) return "\\u000" + hex;
> +    else if(hex.length == 2) return "\\u00" + hex;
> +    else if(hex.length == 3) return "\\u0" + hex;
> +    else return "\\u" + hex;
> +};
> +
> +
> +/* encode a string into JSON format */
> +
> +escapeJSONString =
> +function escapeJSONString(s)
> +{
> +    /* The following should suffice but Safari's regex is b0rken
> +       (doesn't support callback substitutions)
> +       return "\"" + s.replace(/([^\u0020-\u007f]|[\\\"])/g,
> +       escapeJSONChar) + "\"";
> +    */
> +
> +    /* Rather inefficient way to do it */
> +    var parts = s.split("");
> +    for(var i=0; i < parts.length; i++) {
> +       var c =parts[i];
> +       if(c == '"' ||
> +          c == '\\' ||
> +          c.charCodeAt(0) < 32 ||
> +          c.charCodeAt(0) >= 128)
> +           parts[i] = escapeJSONChar(parts[i]);
> +    }
> +    return "\"" + parts.join("") + "\"";
> +};
> +
> +
> +/* Marshall objects to JSON format */
> +
> +toJSON = function toJSON(o)
> +{
> +    if(o == null) {
> +       return "null";
> +    } else if(o.constructor == String) {
> +       return escapeJSONString(o);
> +    } else if(o.constructor == Number) {
> +       return o.toString();
> +    } else if(o.constructor == Boolean) {
> +       return o.toString();
> +    } else if(o.constructor == Date) {
> +       return '{javaClass: "java.util.Date", time: ' + o.valueOf() +'}';
> +    } else if(o.constructor == Array) {
> +       var v = [];
> +       for(var i = 0; i < o.length; i++) v.push(toJSON(o[i]));
> +       return "[" + v.join(", ") + "]";
> +    } else {
> +       var v = [];
> +       for(attr in o) {
> +           if(o[attr] == null) v.push("\"" + attr + "\": null");
> +           else if(typeof o[attr] == "function"); /* skip */
> +           else v.push(escapeJSONString(attr) + ": " + toJSON(o[attr]));
> +       }
> +       return "{" + v.join(", ") + "}";
> +    }
> +};
> +
> +
> +/* JSONRpcClient constructor */
> +
> +JSONRpcClient =
> +function JSONRpcClient_ctor(serverURL, user, pass, objectID)
> +{
> +    this.serverURL = serverURL;
> +    this.user = user;
> +    this.pass = pass;
> +    this.objectID = objectID;
> +
> +    /* Add standard methods */
> +    if(this.objectID) {
> +       this._addMethods(["listMethods"]);
> +       var req = this._makeRequest("listMethods", []);
> +    } else {
> +       this._addMethods(["system.listMethods"]);
> +       var req = this._makeRequest("system.listMethods", []);
> +    }
> +    var m = this._sendRequest(req);
> +    this._addMethods(m);
> +};
> +
> +
> +/* JSONRpcCLient.Exception */
> +
> +JSONRpcClient.Exception =
> +function JSONRpcClient_Exception_ctor(code, message, javaStack)
> +{
> +    this.code = code;
> +    var name;
> +    if(javaStack) {
> +       this.javaStack = javaStack;
> +       var m = javaStack.match(/^([^:]*)/);
> +       if(m) name = m[0];
> +    }
> +    if(name) this.name = name;
> +    else this.name = "JSONRpcClientException";
> +    this.message = message;
> +};
> +
> +JSONRpcClient.Exception.CODE_REMOTE_EXCEPTION = 490;
> +JSONRpcClient.Exception.CODE_ERR_CLIENT = 550;
> +JSONRpcClient.Exception.CODE_ERR_PARSE = 590;
> +JSONRpcClient.Exception.CODE_ERR_NOMETHOD = 591;
> +JSONRpcClient.Exception.CODE_ERR_UNMARSHALL = 592;
> +JSONRpcClient.Exception.CODE_ERR_MARSHALL = 593;
> +
> +JSONRpcClient.Exception.prototype = new Error();
> +
> +JSONRpcClient.Exception.prototype.toString =
> +function JSONRpcClient_Exception_toString(code, msg)
> +{
> +    return this.name + ": " + this.message;
> +};
> +
> +
> +/* Default top level exception handler */
> +
> +JSONRpcClient.default_ex_handler =
> +function JSONRpcClient_default_ex_handler(e) { alert(e); };
> +
> +
> +/* Client settable variables */
> +
> +JSONRpcClient.toplevel_ex_handler = JSONRpcClient.default_ex_handler;
> +JSONRpcClient.profile_async = false;
> +JSONRpcClient.max_req_active = 1;
> +JSONRpcClient.requestId = 1;
> +
> +
> +/* JSONRpcClient implementation */
> +
> +JSONRpcClient.prototype._createMethod =
> +function JSONRpcClient_createMethod(methodName)
> +{
> +    var fn=function()
> +    {
> +       var args = [];
> +       var callback = null;
> +       for(var i=0;i<arguments.length;i++) args.push(arguments[i]);
> +       if(typeof args[0] == "function") callback = args.shift();
> +       var req = fn.client._makeRequest.call(fn.client, fn.methodName,
> +                                             args, callback);
> +       if(callback == null) {
> +           return fn.client._sendRequest.call(fn.client, req);
> +       } else {
> +           JSONRpcClient.async_requests.push(req);
> +           JSONRpcClient.kick_async();
> +           return req.requestId;
> +       }
> +    };
> +    fn.client = this;
> +    fn.methodName = methodName;
> +    return fn;
> +};
> +
> +JSONRpcClient.prototype._addMethods =
> +function JSONRpcClient_addMethods(methodNames)
> +{
> +    for(var i=0; i<methodNames.length; i++) {
> +       var obj = this;
> +       var names = methodNames[i].split(".");
> +       for(var n=0; n<names.length-1; n++) {
> +           var name = names[n];
> +           if(obj[name]) {
> +               obj = obj[name];
> +           } else {
> +               obj[name]  = new Object();
> +               obj = obj[name];
> +           }
> +       }
> +       var name = names[names.length-1];
> +       if(!obj[name]) {
> +           var method = this._createMethod(methodNames[i]);
> +           obj[name] = method;
> +       }
> +    }
> +};
> +
> +JSONRpcClient._getCharsetFromHeaders =
> +function JSONRpcClient_getCharsetFromHeaders(http)
> +{
> +    try {
> +       var contentType = http.getResponseHeader("Content-type");
> +       var parts = contentType.split(/\s*;\s*/);
> +       for(var i =0; i < parts.length; i++) {
> +           if(parts[i].substring(0, 8) == "charset=")
> +               return parts[i].substring(8, parts[i].length);
> +       }
> +    } catch (e) {}
> +    return "UTF-8"; /* default */
> +};
> +
> +/* Async queue globals */
> +JSONRpcClient.async_requests = [];
> +JSONRpcClient.async_inflight = {};
> +JSONRpcClient.async_responses = [];
> +JSONRpcClient.async_timeout = null;
> +JSONRpcClient.num_req_active = 0;
> +
> +JSONRpcClient._async_handler =
> +function JSONRpcClient_async_handler()
> +{
> +    JSONRpcClient.async_timeout = null;
> +
> +    while(JSONRpcClient.async_responses.length > 0) {
> +       var res = JSONRpcClient.async_responses.shift();
> +       if(res.canceled) continue;
> +       if(res.profile) res.profile.dispatch = new Date();
> +       try {
> +           res.cb(res.result, res.ex, res.profile);
> +       } catch(e) {
> +           JSONRpcClient.toplevel_ex_handler(e);
> +       }
> +    }
> +
> +    while(JSONRpcClient.async_requests.length > 0 &&
> +         JSONRpcClient.num_req_active < JSONRpcClient.max_req_active) {
> +       var req = JSONRpcClient.async_requests.shift();
> +       if(req.canceled) continue;
> +       req.client._sendRequest.call(req.client, req);
> +    }
> +};
> +
> +JSONRpcClient.kick_async =
> +function JSONRpcClient_kick_async()
> +{
> +    if(JSONRpcClient.async_timeout == null)
> +       JSONRpcClient.async_timeout =
> +           setTimeout(JSONRpcClient._async_handler, 0);
> +};
> +
> +JSONRpcClient.cancelRequest =
> +function JSONRpcClient_cancelRequest(requestId)
> +{
> +    /* If it is in flight then mark it as canceled in the inflight map
> +       and the XMLHttpRequest callback will discard the reply. */
> +    if(JSONRpcClient.async_inflight[requestId]) {
> +       JSONRpcClient.async_inflight[requestId].canceled = true;
> +       return true;
> +    }
> +
> +    /* If its not in flight yet then we can just mark it as canceled in
> +       the the request queue and it will get discarded before being sent.
> */
> +    for(var i in JSONRpcClient.async_requests) {
> +       if(JSONRpcClient.async_requests[i].requestId == requestId) {
> +           JSONRpcClient.async_requests[i].canceled = true;
> +           return true;
> +       }
> +    }
> +
> +    /* It may have returned from the network and be waiting for its
> callback
> +       to be dispatched, so mark it as canceled in the response queue
> +       and the response will get discarded before calling the callback.
> */
> +    for(var i in JSONRpcClient.async_responses) {
> +       if(JSONRpcClient.async_responses[i].requestId == requestId) {
> +           JSONRpcClient.async_responses[i].canceled = true;
> +           return true;
> +       }
> +    }
> +
> +    return false;
> +};
> +
> +JSONRpcClient.prototype._makeRequest =
> +function JSONRpcClient_makeRequest(methodName, args, cb)
> +{
> +    var req = {};
> +    req.client = this;
> +    req.requestId = JSONRpcClient.requestId++;
> +
> +    var obj = {};
> +    obj.id = req.requestId;
> +    if (this.objectID)
> +       obj.method = ".obj#" + this.objectID + "." + methodName;
> +    else
> +       obj.method = methodName;
> +    obj.params = args;
> +
> +    if (cb) req.cb = cb;
> +    if (JSONRpcClient.profile_async)
> +       req.profile = { "submit": new Date() };
> +    req.data = toJSON(obj);
> +
> +    return req;
> +};
> +
> +JSONRpcClient.prototype._sendRequest =
> +function JSONRpcClient_sendRequest(req)
> +{
> +    if(req.profile) req.profile.start = new Date();
> +
> +    /* Get free http object from the pool */
> +    var http = JSONRpcClient.poolGetHTTPRequest();
> +    JSONRpcClient.num_req_active++;
> +
> +    /* Send the request */
> +    if (typeof(this.user) == "undefined") {
> +       http.open("POST", this.serverURL, (req.cb != null));
> +    } else {
> +       http.open("POST", this.serverURL, (req.cb != null), this.user,
> this.pass);
> +    }
> +
> +    /* setRequestHeader is missing in Opera 8 Beta */
> +    try { http.setRequestHeader("Content-type", "text/plain"); } catch(e)
> {}
> +
> +    /* Construct call back if we have one */
> +    if(req.cb) {
> +       var self = this;
> +       http.onreadystatechange = function() {
> +           if(http.readyState == 4) {
> +               http.onreadystatechange = function () {};
> +               var res = { "cb": req.cb, "result": null, "ex": null};
> +               if (req.profile) {
> +                   res.profile = req.profile;
> +                   res.profile.end = new Date();
> +               }
> +               try { res.result = self._handleResponse(http); }
> +               catch(e) { res.ex = e; }
> +               if(!JSONRpcClient.async_inflight[req.requestId].canceled)
> +                   JSONRpcClient.async_responses.push(res);
> +               delete JSONRpcClient.async_inflight[req.requestId];
> +               JSONRpcClient.kick_async();
> +           }
> +       };
> +    } else {
> +       http.onreadystatechange = function() {};
> +    }
> +
> +    JSONRpcClient.async_inflight[req.requestId] = req;
> +
> +    try {
> +       http.send(req.data);
> +    } catch(e) {
> +       JSONRpcClient.poolReturnHTTPRequest(http);
> +       JSONRpcClient.num_req_active--;
> +       throw new JSONRpcClient.Exception
> +           (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection
> failed");
> +    }
> +
> +    if(!req.cb) return this._handleResponse(http);
> +};
> +
> +JSONRpcClient.prototype._handleResponse =
> +function JSONRpcClient_handleResponse(http)
> +{
> +    /* Get the charset */
> +    if(!this.charset) {
> +       this.charset = JSONRpcClient._getCharsetFromHeaders(http);
> +    }
> +
> +    /* Get request results */
> +    var status, statusText, data;
> +    try {
> +       status = http.status;
> +       statusText = http.statusText;
> +       data = http.responseText;
> +    } catch(e) {
> +       JSONRpcClient.poolReturnHTTPRequest(http);
> +       JSONRpcClient.num_req_active--;
> +       JSONRpcClient.kick_async();
> +       throw new JSONRpcClient.Exception
> +           (JSONRpcClient.Exception.CODE_ERR_CLIENT, "Connection
> failed");
> +    }
> +
> +    /* Return http object to the pool; */
> +    JSONRpcClient.poolReturnHTTPRequest(http);
> +    JSONRpcClient.num_req_active--;
> +
> +    /* Unmarshall the response */
> +    if(status != 200) {
> +       throw new JSONRpcClient.Exception(status, statusText);
> +    }
> +    var obj;
> +    try {
> +       eval("obj = " + data);
> +    } catch(e) {
> +       throw new JSONRpcClient.Exception(550, "error parsing result");
> +    }
> +    if(obj.error)
> +       throw new JSONRpcClient.Exception(obj.error.code, obj.error.msg,
> +                                         obj.error.trace);
> +    var res = obj.result;
> +
> +    /* Handle CallableProxy */
> +    if(res && res.objectID && res.JSONRPCType == "CallableReference")
> +       return new JSONRpcClient(this.serverURL, this.user,
> +                                this.pass, res.objectID);
> +
> +    return res;
> +};
> +
> +
> +/* XMLHttpRequest wrapper code */
> +
> +/* XMLHttpRequest pool globals */
> +JSONRpcClient.http_spare = [];
> +JSONRpcClient.http_max_spare = 8;
> +
> +JSONRpcClient.poolGetHTTPRequest =
> +function JSONRpcClient_pool_getHTTPRequest()
> +{
> +    if(JSONRpcClient.http_spare.length > 0) {
> +       return JSONRpcClient.http_spare.pop();
> +    }
> +    return JSONRpcClient.getHTTPRequest();
> +};
> +
> +JSONRpcClient.poolReturnHTTPRequest =
> +function JSONRpcClient_poolReturnHTTPRequest(http)
> +{
> +    if(JSONRpcClient.http_spare.length >= JSONRpcClient.http_max_spare)
> +       delete http;
> +    else
> +       JSONRpcClient.http_spare.push(http);
> +};
> +
> +JSONRpcClient.msxmlNames = [ "MSXML2.XMLHTTP.5.0",
> +                            "MSXML2.XMLHTTP.4.0",
> +                            "MSXML2.XMLHTTP.3.0",
> +                            "MSXML2.XMLHTTP",
> +                            "Microsoft.XMLHTTP" ];
> +
> +JSONRpcClient.getHTTPRequest =
> +function JSONRpcClient_getHTTPRequest()
> +{
> +    /* Mozilla XMLHttpRequest */
> +    try {
> +       JSONRpcClient.httpObjectName = "XMLHttpRequest";
> +       return new XMLHttpRequest();
> +    } catch(e) {}
> +
> +    /* Microsoft MSXML ActiveX */
> +    for (var i=0;i < JSONRpcClient.msxmlNames.length; i++) {
> +       try {
> +           JSONRpcClient.httpObjectName = JSONRpcClient.msxmlNames[i];
> +           return new ActiveXObject(JSONRpcClient.msxmlNames[i]);
> +       } catch (e) {}
> +    }
> +
> +    /* None found */
> +    JSONRpcClient.httpObjectName = null;
> +    throw new JSONRpcClient.Exception(0, "Can't create XMLHttpRequest
> object");
> +};
> +
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServletTestCase.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServletTestCase.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServletTestCase.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/handler/JSONRPCEntryPointServletTestCase.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,83 @@
> +/**
> + *
> + *  Copyright 2005 The Apache Software Foundation or its licensors, as
> applicable.
> + *
> + *  Licensed under the Apache License, Version 2.0 (the "License");
> + *  you may not use this file except in compliance with the License.
> + *  You may obtain a copy of the License at
> + *
> + *     http://www.apache.org/licenses/LICENSE-2.0
> + *
> + *  Unless required by applicable law or agreed to in writing, software
> + *  distributed under the License is distributed on an "AS IS" BASIS,
> + *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
> implied.
> + *  See the License for the specific language governing permissions and
> + *  limitations under the License.
> + */
> +package org.apache.tuscany.binding.jsonrpc.handler;
> +
> +import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> +import java.util.Map;
> +
> +import javax.servlet.ServletConfig;
> +import javax.servlet.ServletException;
> +import javax.servlet.http.HttpServletRequest;
> +import javax.servlet.http.HttpServletResponse;
> +
> +import junit.framework.TestCase;
> +
> +import org.apache.tuscany.binding.jsonrpc.mocks.MockConfigUtils;
> +import
> org.apache.tuscany.binding.jsonrpc.mocks.servlet.MockHttpServletRequest;
> +import
> org.apache.tuscany.binding.jsonrpc.mocks.servlet.MockHttpServletResponse;
> +import org.apache.tuscany.model.assembly.EntryPoint;
> +
> +public class JSONRPCEntryPointServletTestCase extends TestCase {
> +
> +    private static final String JSON_REQUEST = "{\"id\": 2, \"method\":
> \"MyEntryPoint.concat\", \"params\": [\" world\"]}";
> +
> +    private static final String JSON_RESPONSE = "{\"result\":\"hello
> world\",\"id\":2}";
> +
> +    public void testService() throws ServletException,
> ClassCastException, IOException {
> +        JSONRPCEntryPointServlet servlet = new
> JSONRPCEntryPointServlet();
> +        ServletConfig servletConfig =
> MockConfigUtils.createMockServletConfig("MyEntryPoint", "hello");
> +        servlet.init(servletConfig);
> +
> +        HttpServletRequest request = new
> MockHttpServletRequest(JSON_REQUEST.getBytes());
> +        ByteArrayOutputStream os = new ByteArrayOutputStream();
> +        HttpServletResponse response = new MockHttpServletResponse(os);
> +
> +        servlet.service(request, response);
> +
> +        String responseString = new String(os.toByteArray());
> +        assertEquals(JSON_RESPONSE, responseString);
> +    }
> +
> +    public void testInit() throws ServletException {
> +        JSONRPCEntryPointServlet servlet = new
> JSONRPCEntryPointServlet();
> +        ServletConfig servletConfig =
> MockConfigUtils.createMockServletConfig("MyEntryPoint", "hello");
> +
> +        servlet.init(servletConfig);
> +
> +        Map<String, Object> entryPointProxys =
> servlet.getEntryPointProxys();
> +        assertEquals(1, entryPointProxys.size());
> +        assertEquals("hello", entryPointProxys.get("MyEntryPoint"));
> +    }
> +
> +    public void testHasJSONRPCBinding() {
> +        JSONRPCEntryPointServlet servlet = new
> JSONRPCEntryPointServlet();
> +
> +        EntryPoint entryPoint = MockConfigUtils.createMockEntryPoint
> ("MyEntryPoint");
> +        assertFalse(servlet.hasJSONRPCBinding(entryPoint));
> +
> +        MockConfigUtils.addNonJSONRPCBinding(entryPoint);
> +        assertFalse(servlet.hasJSONRPCBinding(entryPoint));
> +
> +        MockConfigUtils.addJSONRPCBinding(entryPoint);
> +        assertTrue(servlet.hasJSONRPCBinding(entryPoint));
> +
> +        assertEquals(2, entryPoint.getBindings().size());
> +
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/MockConfigUtils.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/MockConfigUtils.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/MockConfigUtils.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/MockConfigUtils.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,72 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks;
> +
> +import java.util.HashMap;
> +import java.util.List;
> +import java.util.Map;
> +
> +import javax.servlet.ServletConfig;
> +import javax.servlet.ServletContext;
> +
> +import org.apache.tuscany.binding.jsonrpc.assembly.JSONRPCBinding;
> +import org.apache.tuscany.binding.jsonrpc.mocks.servlet.MockServletConfig
> ;
> +import org.apache.tuscany.binding.jsonrpc.mocks.tuscany.MockBinding;
> +import
> org.apache.tuscany.binding.jsonrpc.mocks.tuscany.MockCompositeContextImpl;
> +import
> org.apache.tuscany.binding.jsonrpc.mocks.tuscany.MockEntryPointContext;
> +import org.apache.tuscany.binding.jsonrpc.mocks.tuscany.MockScopeContext;
> +import org.apache.tuscany.core.context.CompositeContext;
> +import org.apache.tuscany.core.context.Context;
> +import org.apache.tuscany.core.context.ScopeContext;
> +import org.apache.tuscany.core.webapp.TuscanyServletListener;
> +import org.apache.tuscany.model.assembly.Binding;
> +import org.apache.tuscany.model.assembly.EntryPoint;
> +import org.apache.tuscany.model.assembly.Module;
> +import org.apache.tuscany.model.assembly.impl.EntryPointImpl;
> +
> +public class MockConfigUtils {
> +
> +    public static ServletConfig createMockServletConfig(String
> entryPointName, Object instance) {
> +        ServletConfig servletConfig = new MockServletConfig();
> +        ServletContext context = servletConfig.getServletContext();
> +        context.setAttribute(TuscanyServletListener.MODULE_COMPONENT_NAME,
> createModuleWithJSONRPCEntryPoint(entryPointName, instance));
> +        return servletConfig;
> +    }
> +
> +    public static CompositeContext
> createModuleWithJSONRPCEntryPoint(String entryPointName, Object instance) {
> +        MockCompositeContextImpl cci = new MockCompositeContextImpl();
> +        Module module = (Module) cci.getComposite();
> +        List<EntryPoint> entryPoints = module.getEntryPoints();
> +        EntryPoint ep = createMockEntryPoint(entryPointName);
> +        addJSONRPCBinding(ep);
> +        entryPoints.add(ep);
> +        cci.start();
> +
> +        Map<String, Context> ics = new HashMap<String, Context>();
> +        ics.put(entryPointName, new MockEntryPointContext(instance));
> +
> +        ScopeContext sc = new MockScopeContext(ics);
> +        sc.start();
> +
> +        Map<String, ScopeContext> scopeIndex = cci.getScopeIndex();
> +        scopeIndex.put(entryPointName, sc);
> +
> +        return cci;
> +    }
> +
> +    public static EntryPoint createMockEntryPoint(String name) {
> +        EntryPoint entryPoint = new EntryPointImpl() {
> +        };
> +        entryPoint.setName(name);
> +        return entryPoint;
> +    }
> +
> +    public static void addJSONRPCBinding(EntryPoint entryPoint) {
> +        List<Binding> bindings = entryPoint.getBindings();
> +        bindings.add(new JSONRPCBinding());
> +    }
> +
> +    public static void addNonJSONRPCBinding(EntryPoint entryPoint) {
> +        List<Binding> bindings = entryPoint.getBindings();
> +        bindings.add(new MockBinding());
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletRequest.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletRequest.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletRequest.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletRequest.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,247 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.servlet;
> +
> +import java.io.BufferedReader;
> +import java.io.ByteArrayInputStream;
> +import java.io.IOException;
> +import java.io.UnsupportedEncodingException;
> +import java.security.Principal;
> +import java.util.Enumeration;
> +import java.util.Locale;
> +import java.util.Map;
> +
> +import javax.servlet.RequestDispatcher;
> +import javax.servlet.ServletInputStream;
> +import javax.servlet.http.Cookie;
> +import javax.servlet.http.HttpServletRequest;
> +import javax.servlet.http.HttpSession;
> +
> +public class MockHttpServletRequest implements HttpServletRequest {
> +
> +    private byte[] inputBytes;
> +
> +    public MockHttpServletRequest(byte[] inputBytes) {
> +        this.inputBytes = inputBytes;
> +    }
> +
> +    public String getAuthType() {
> +        return null;
> +    }
> +
> +    public Cookie[] getCookies() {
> +        return null;
> +    }
> +
> +    public long getDateHeader(String arg0) {
> +        return 0;
> +    }
> +
> +    public String getHeader(String arg0) {
> +        return null;
> +    }
> +
> +    public Enumeration getHeaders(String arg0) {
> +        return null;
> +    }
> +
> +    public Enumeration getHeaderNames() {
> +        return null;
> +    }
> +
> +    public int getIntHeader(String arg0) {
> +        return 0;
> +    }
> +
> +    public String getMethod() {
> +        return null;
> +    }
> +
> +    public String getPathInfo() {
> +        return null;
> +    }
> +
> +    public String getPathTranslated() {
> +        return null;
> +    }
> +
> +    public String getContextPath() {
> +        return null;
> +    }
> +
> +    public String getQueryString() {
> +        return null;
> +    }
> +
> +    public String getRemoteUser() {
> +        return null;
> +    }
> +
> +    public boolean isUserInRole(String arg0) {
> +        return false;
> +    }
> +
> +    public Principal getUserPrincipal() {
> +        return null;
> +    }
> +
> +    public String getRequestedSessionId() {
> +        return null;
> +    }
> +
> +    public String getRequestURI() {
> +        return null;
> +    }
> +
> +    public StringBuffer getRequestURL() {
> +        return null;
> +    }
> +
> +    public String getServletPath() {
> +        return null;
> +    }
> +
> +    public HttpSession getSession(boolean arg0) {
> +        return null;
> +    }
> +
> +    HttpSession session = new MockHttpSession();
> +
> +    public HttpSession getSession() {
> +        return session;
> +    }
> +
> +    public boolean isRequestedSessionIdValid() {
> +        return false;
> +    }
> +
> +    public boolean isRequestedSessionIdFromCookie() {
> +        return false;
> +    }
> +
> +    public boolean isRequestedSessionIdFromURL() {
> +        return false;
> +    }
> +
> +    public boolean isRequestedSessionIdFromUrl() {
> +        return false;
> +    }
> +
> +    public Object getAttribute(String arg0) {
> +        return null;
> +    }
> +
> +    public Enumeration getAttributeNames() {
> +        return null;
> +    }
> +
> +    public String getCharacterEncoding() {
> +        return null;
> +    }
> +
> +    public void setCharacterEncoding(String arg0) throws
> UnsupportedEncodingException {
> +    }
> +
> +    public int getContentLength() {
> +        return 0;
> +    }
> +
> +    public String getContentType() {
> +        return null;
> +    }
> +
> +    public ServletInputStream getInputStream() throws IOException {
> +        final ByteArrayInputStream is = new
> ByteArrayInputStream(inputBytes);
> +        ServletInputStream sis = new ServletInputStream() {
> +            @Override
> +            public int read() throws IOException {
> +                return is.read();
> +            }
> +        };
> +        return sis;
> +    }
> +
> +    public String getParameter(String arg0) {
> +        return null;
> +    }
> +
> +    public Enumeration getParameterNames() {
> +        return null;
> +    }
> +
> +    public String[] getParameterValues(String arg0) {
> +        return null;
> +    }
> +
> +    public Map getParameterMap() {
> +        return null;
> +    }
> +
> +    public String getProtocol() {
> +        return null;
> +    }
> +
> +    public String getScheme() {
> +        return null;
> +    }
> +
> +    public String getServerName() {
> +        return null;
> +    }
> +
> +    public int getServerPort() {
> +        return 0;
> +    }
> +
> +    public BufferedReader getReader() throws IOException {
> +        return null;
> +    }
> +
> +    public String getRemoteAddr() {
> +        return null;
> +    }
> +
> +    public String getRemoteHost() {
> +        return null;
> +    }
> +
> +    public void setAttribute(String arg0, Object arg1) {
> +    }
> +
> +    public void removeAttribute(String arg0) {
> +    }
> +
> +    public Locale getLocale() {
> +        return null;
> +    }
> +
> +    public Enumeration getLocales() {
> +        return null;
> +    }
> +
> +    public boolean isSecure() {
> +        return false;
> +    }
> +
> +    public RequestDispatcher getRequestDispatcher(String arg0) {
> +        return null;
> +    }
> +
> +    public String getRealPath(String arg0) {
> +        return null;
> +    }
> +
> +    public int getRemotePort() {
> +        return 0;
> +    }
> +
> +    public String getLocalName() {
> +        return null;
> +    }
> +
> +    public String getLocalAddr() {
> +        return null;
> +    }
> +
> +    public int getLocalPort() {
> +        return 0;
> +    }
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletResponse.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletResponse.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletResponse.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpServletResponse.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,164 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.servlet;
> +
> +import java.io.ByteArrayOutputStream;
> +import java.io.IOException;
> +import java.io.PrintWriter;
> +import java.util.Locale;
> +
> +import javax.servlet.ServletOutputStream;
> +import javax.servlet.http.Cookie;
> +import javax.servlet.http.HttpServletResponse;
> +
> +public class MockHttpServletResponse implements HttpServletResponse {
> +
> +    ByteArrayOutputStream outputStream;
> +
> +    public MockHttpServletResponse(ByteArrayOutputStream outputStream) {
> +        this.outputStream = outputStream;
> +    }
> +
> +    public void addCookie(Cookie arg0) {
> +
> +    }
> +
> +    public boolean containsHeader(String arg0) {
> +
> +        return false;
> +    }
> +
> +    public String encodeURL(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public String encodeRedirectURL(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public String encodeUrl(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public String encodeRedirectUrl(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public void sendError(int arg0, String arg1) throws IOException {
> +
> +    }
> +
> +    public void sendError(int arg0) throws IOException {
> +
> +    }
> +
> +    public void sendRedirect(String arg0) throws IOException {
> +
> +    }
> +
> +    public void setDateHeader(String arg0, long arg1) {
> +
> +    }
> +
> +    public void addDateHeader(String arg0, long arg1) {
> +
> +    }
> +
> +    public void setHeader(String arg0, String arg1) {
> +
> +    }
> +
> +    public void addHeader(String arg0, String arg1) {
> +
> +    }
> +
> +    public void setIntHeader(String arg0, int arg1) {
> +
> +    }
> +
> +    public void addIntHeader(String arg0, int arg1) {
> +
> +    }
> +
> +    public void setStatus(int arg0) {
> +
> +    }
> +
> +    public void setStatus(int arg0, String arg1) {
> +
> +    }
> +
> +    public String getCharacterEncoding() {
> +
> +        return null;
> +    }
> +
> +    public String getContentType() {
> +
> +        return null;
> +    }
> +
> +    public ServletOutputStream getOutputStream() throws IOException {
> +        ServletOutputStream sos = new ServletOutputStream() {
> +            @Override
> +            public void write(int arg0) throws IOException {
> +                outputStream.write(arg0);
> +            }
> +        };
> +        return sos;
> +    }
> +
> +    public PrintWriter getWriter() throws IOException {
> +
> +        return null;
> +    }
> +
> +    public void setCharacterEncoding(String arg0) {
> +
> +    }
> +
> +    public void setContentLength(int arg0) {
> +
> +    }
> +
> +    public void setContentType(String arg0) {
> +
> +    }
> +
> +    public void setBufferSize(int arg0) {
> +
> +    }
> +
> +    public int getBufferSize() {
> +
> +        return 0;
> +    }
> +
> +    public void flushBuffer() throws IOException {
> +
> +    }
> +
> +    public void resetBuffer() {
> +
> +    }
> +
> +    public boolean isCommitted() {
> +
> +        return false;
> +    }
> +
> +    public void reset() {
> +
> +    }
> +
> +    public void setLocale(Locale arg0) {
> +
> +    }
> +
> +    public Locale getLocale() {
> +
> +        return null;
> +    }
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpSession.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpSession.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpSession.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockHttpSession.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,77 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.servlet;
> +
> +import java.util.Enumeration;
> +import java.util.HashMap;
> +
> +import javax.servlet.ServletContext;
> +import javax.servlet.http.HttpSession;
> +
> +public class MockHttpSession implements HttpSession {
> +
> +    public long getCreationTime() {
> +        return 0;
> +    }
> +
> +    public String getId() {
> +        return null;
> +    }
> +
> +    public long getLastAccessedTime() {
> +        return 0;
> +    }
> +
> +    public ServletContext getServletContext() {
> +        return null;
> +    }
> +
> +    public void setMaxInactiveInterval(int arg0) {
> +    }
> +
> +    public int getMaxInactiveInterval() {
> +        return 0;
> +    }
> +
> +    @SuppressWarnings("deprecation")
> +    public javax.servlet.http.HttpSessionContext getSessionContext() {
> +        return null;
> +    }
> +
> +    public Object getAttribute(String arg0) {
> +        return attributes.get(arg0);
> +    }
> +
> +    public Object getValue(String arg0) {
> +        return null;
> +    }
> +
> +    public Enumeration getAttributeNames() {
> +        return null;
> +    }
> +
> +    public String[] getValueNames() {
> +        return null;
> +    }
> +
> +    HashMap<String, Object> attributes = new HashMap<String, Object>();
> +
> +    public void setAttribute(String arg0, Object arg1) {
> +        attributes.put(arg0, arg1);
> +    }
> +
> +    public void putValue(String arg0, Object arg1) {
> +    }
> +
> +    public void removeAttribute(String arg0) {
> +    }
> +
> +    public void removeValue(String arg0) {
> +    }
> +
> +    public void invalidate() {
> +    }
> +
> +    public boolean isNew() {
> +        return false;
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletConfig.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletConfig.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletConfig.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletConfig.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,28 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.servlet;
> +
> +import java.util.Enumeration;
> +
> +import javax.servlet.ServletConfig;
> +import javax.servlet.ServletContext;
> +
> +public class MockServletConfig implements ServletConfig {
> +
> +    public String getServletName() {
> +        return null;
> +    }
> +
> +    ServletContext servletContext = new MockServletContext();
> +
> +    public ServletContext getServletContext() {
> +        return servletContext;
> +    }
> +
> +    public String getInitParameter(String arg0) {
> +        return null;
> +    }
> +
> +    public Enumeration getInitParameterNames() {
> +        return null;
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletContext.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletContext.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletContext.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/servlet/MockServletContext.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,132 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.servlet;
> +
> +import java.io.InputStream;
> +import java.net.MalformedURLException;
> +import java.net.URL;
> +import java.util.Enumeration;
> +import java.util.HashMap;
> +import java.util.Set;
> +
> +import javax.servlet.RequestDispatcher;
> +import javax.servlet.Servlet;
> +import javax.servlet.ServletContext;
> +import javax.servlet.ServletException;
> +
> +public class MockServletContext implements ServletContext {
> +
> +    public ServletContext getContext(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public int getMajorVersion() {
> +
> +        return 0;
> +    }
> +
> +    public int getMinorVersion() {
> +
> +        return 0;
> +    }
> +
> +    public String getMimeType(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public Set getResourcePaths(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public URL getResource(String arg0) throws MalformedURLException {
> +
> +        return null;
> +    }
> +
> +    public InputStream getResourceAsStream(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public RequestDispatcher getRequestDispatcher(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public RequestDispatcher getNamedDispatcher(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public Servlet getServlet(String arg0) throws ServletException {
> +
> +        return null;
> +    }
> +
> +    public Enumeration getServlets() {
> +
> +        return null;
> +    }
> +
> +    public Enumeration getServletNames() {
> +
> +        return null;
> +    }
> +
> +    public void log(String arg0) {
> +
> +    }
> +
> +    public void log(Exception arg0, String arg1) {
> +
> +    }
> +
> +    public void log(String arg0, Throwable arg1) {
> +
> +    }
> +
> +    public String getRealPath(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public String getServerInfo() {
> +
> +        return null;
> +    }
> +
> +    public String getInitParameter(String arg0) {
> +
> +        return null;
> +    }
> +
> +    public Enumeration getInitParameterNames() {
> +
> +        return null;
> +    }
> +
> +    HashMap<String, Object> attributes = new HashMap<String, Object>();
> +
> +    public Object getAttribute(String arg0) {
> +        return attributes.get(arg0);
> +    }
> +
> +    public Enumeration getAttributeNames() {
> +        return null;
> +    }
> +
> +    public void setAttribute(String arg0, Object arg1) {
> +        attributes.put(arg0, arg1);
> +    }
> +
> +    public void removeAttribute(String arg0) {
> +
> +    }
> +
> +    public String getServletContextName() {
> +
> +        return null;
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockBinding.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockBinding.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockBinding.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockBinding.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,32 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.tuscany;
> +
> +import org.apache.tuscany.model.assembly.AssemblyContext;
> +import org.apache.tuscany.model.assembly.AssemblyInitializationException;
> +import org.apache.tuscany.model.assembly.AssemblyVisitor;
> +import org.apache.tuscany.model.assembly.Binding;
> +
> +public class MockBinding implements Binding {
> +
> +    public String getURI() {
> +
> +        return null;
> +    }
> +
> +    public void setURI(String value) {
> +
> +    }
> +
> +    public void initialize(AssemblyContext modelContext) throws
> AssemblyInitializationException {
> +
> +    }
> +
> +    public void freeze() {
> +
> +    }
> +
> +    public boolean accept(AssemblyVisitor visitor) {
> +
> +        return false;
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockCompositeContextImpl.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockCompositeContextImpl.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockCompositeContextImpl.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockCompositeContextImpl.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,12 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.tuscany;
> +
> +import java.util.Map;
> +
> +import org.apache.tuscany.core.context.ScopeContext;
> +import org.apache.tuscany.core.context.impl.CompositeContextImpl;
> +
> +public class MockCompositeContextImpl extends CompositeContextImpl {
> +    public Map<String, ScopeContext> getScopeIndex() {
> +        return scopeIndex;
> +    }
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockEntryPointContext.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockEntryPointContext.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockEntryPointContext.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockEntryPointContext.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,67 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.tuscany;
> +
> +import org.apache.tuscany.core.context.CoreRuntimeException;
> +import org.apache.tuscany.core.context.EntryPointContext;
> +import org.apache.tuscany.core.context.EventFilter;
> +import org.apache.tuscany.core.context.QualifiedName;
> +import org.apache.tuscany.core.context.RuntimeEventListener;
> +import org.apache.tuscany.core.context.TargetException;
> +import org.apache.tuscany.core.context.event.Event;
> +
> +public class MockEntryPointContext implements EntryPointContext {
> +
> +    private Object instance;
> +
> +    public MockEntryPointContext(Object instance) {
> +        this.instance = instance;
> +    }
> +
> +    public Object getHandler() throws TargetException {
> +
> +        return null;
> +    }
> +
> +    public String getName() {
> +
> +        return null;
> +    }
> +
> +    public void setName(String name) {
> +
> +    }
> +
> +    public int getLifecycleState() {
> +
> +        return 0;
> +    }
> +
> +    public void start() throws CoreRuntimeException {
> +
> +    }
> +
> +    public void stop() throws CoreRuntimeException {
> +
> +    }
> +
> +    public Object getInstance(QualifiedName qName) throws TargetException
> {
> +
> +        return instance;
> +    }
> +
> +    public void publish(Event object) {
> +
> +    }
> +
> +    public void addListener(RuntimeEventListener listener) {
> +
> +    }
> +
> +    public void addListener(EventFilter filter, RuntimeEventListener
> listener) {
> +
> +    }
> +
> +    public void removeListener(RuntimeEventListener listener) {
> +
> +    }
> +
> +}
>
> Added:
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockScopeContext.java
> URL:
> http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockScopeContext.java?rev=395861&view=auto
>
> ==============================================================================
> ---
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockScopeContext.java
> (added)
> +++
> incubator/tuscany/java/sca/bindings/binding.jsonrpc/src/test/java/org/apache/tuscany/binding/jsonrpc/mocks/tuscany/MockScopeContext.java
> Fri Apr 21 04:45:36 2006
> @@ -0,0 +1,103 @@
> +package org.apache.tuscany.binding.jsonrpc.mocks.tuscany;
> +
> +import java.util.List;
> +import java.util.Map;
> +
> +import org.apache.tuscany.core.builder.ContextFactory;
> +import org.apache.tuscany.core.context.Context;
> +import org.apache.tuscany.core.context.CoreRuntimeException;
> +import org.apache.tuscany.core.context.EventFilter;
> +import org.apache.tuscany.core.context.QualifiedName;
> +import org.apache.tuscany.core.context.RuntimeEventListener;
> +import org.apache.tuscany.core.context.ScopeContext;
> +import org.apache.tuscany.core.context.ScopeRuntimeException;
> +import org.apache.tuscany.core.context.TargetException;
> +import org.apache.tuscany.core.context.event.Event;
> +
> +public class MockScopeContext implements ScopeContext {
> +
> +    private Map<String, Context> instanceContexts;
> +
> +    public MockScopeContext(Map<String, Context> instanceContexts) {
> +        this.instanceContexts = instanceContexts;
> +    }
> +
> +    public boolean isCacheable() {
> +
> +        return false;
> +    }
> +
> +    public void registerFactories(List<ContextFactory<Context>>
> configurations) {
> +
> +    }
> +
> +    public void registerFactory(ContextFactory<Context> configuration) {
> +
> +    }
> +
> +    public Context getContext(String name) {
> +
> +        return instanceContexts.get(name);
> +    }
> +
> +    public Context getContextByKey(String name, Object key) {
> +
> +        return null;
> +    }
> +
> +    public void removeContext(String name) throws ScopeRuntimeException {
> +
> +    }
> +
> +    public void removeContextByKey(String name, Object key) throws
> ScopeRuntimeException {
> +
> +    }
> +
> +    public String getName() {
> +
> +        return null;
> +    }
> +
> +    public void setName(String name) {
> +
> +    }
> +
> +    public int getLifecycleState() {
> +
> +        return 0;
> +    }
> +
> +    public void start() throws CoreRuntimeException {
> +
> +    }
> +
> +    public void stop() throws CoreRuntimeException {
> +
> +    }
> +
> +    public Object getInstance(QualifiedName qName) throws TargetException
> {
> +
> +        return null;
> +    }
> +
> +    public void publish(Event object) {
> +
> +    }
> +
> +    public void addListener(RuntimeEventListener listener) {
> +
> +    }
> +
> +    public void addListener(EventFilter filter, RuntimeEventListener
> listener) {
> +
> +    }
> +
> +    public void removeListener(RuntimeEventListener listener) {
> +
> +    }
> +
> +    public void onEvent(Event event) {
> +
> +    }
> +
> +}
>
>
>