You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ch...@apache.org on 2006/06/02 10:54:13 UTC

svn commit: r411094 - /incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiProxyFactoryBean.java

Author: chirino
Date: Fri Jun  2 01:54:13 2006
New Revision: 411094

URL: http://svn.apache.org/viewvc?rev=411094&view=rev
Log:
Adding a xbean proxy element that creates 181 proxies.

Added:
    incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiProxyFactoryBean.java

Added: incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiProxyFactoryBean.java?rev=411094&view=auto
==============================================================================
--- incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiProxyFactoryBean.java (added)
+++ incubator/servicemix/trunk/servicemix-jsr181/src/main/java/org/apache/servicemix/jsr181/xfire/JbiProxyFactoryBean.java Fri Jun  2 01:54:13 2006
@@ -0,0 +1,127 @@
+/*
+ * Copyright 2005-2006 The Apache Software Foundation.
+ *
+ * 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.servicemix.jsr181.xfire;
+
+import java.lang.reflect.InvocationHandler;
+import java.lang.reflect.Method;
+import java.lang.reflect.Proxy;
+
+import javax.jbi.component.ComponentContext;
+import javax.xml.namespace.QName;
+
+import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.jbi.container.JBIContainer;
+import org.apache.servicemix.jsr181.Jsr181LifeCycle;
+import org.codehaus.xfire.XFire;
+import org.springframework.beans.factory.FactoryBean;
+
+
+/**
+ * 
+ * @author chirino
+ * @version $Revision: 407481 $
+ * @org.apache.xbean.XBean element="proxy"
+ *                  description="A jsr181 proxy"
+ * 
+ */
+public class JbiProxyFactoryBean implements FactoryBean {
+
+    private JBIContainer container;
+    private Class type;
+    private Object proxy;
+    private InvocationHandler jbiInvocationHandler;
+    private QName service;
+    private QName interfaceName;
+    private String endpoint;
+    
+    public Object getObject() throws Exception {
+        if( proxy == null ) {
+            proxy = createProxy();
+        }
+        return proxy;
+    }
+
+    private Object createProxy() throws Exception {
+        
+        return Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), new Class[]{type}, new InvocationHandler(){
+            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
+                InvocationHandler next = getJBIInvocationHandler();
+                return next.invoke(proxy, method, args);
+            }
+        });
+        
+    }
+    
+    synchronized private InvocationHandler getJBIInvocationHandler() throws Exception {
+        if( jbiInvocationHandler == null ) {
+            DefaultServiceMixClient client = new DefaultServiceMixClient(container);
+            ComponentContext context = client.getContext();
+            XFire xfire = Jsr181LifeCycle.createXFire(context);
+            Object o = JbiProxy.create(xfire, context, interfaceName, service, endpoint, type);
+            jbiInvocationHandler = Proxy.getInvocationHandler(o);
+        }
+        return jbiInvocationHandler;
+    }
+
+    public Class getObjectType() {
+        return type;
+    }
+
+    public boolean isSingleton() {
+        return true;
+    }
+
+    public JBIContainer getContainer() {
+        return container;
+    }
+
+    public void setContainer(JBIContainer container) {
+        this.container = container;
+    }
+
+    public Class getType() {
+        return type;
+    }
+
+    public void setType(Class type) {
+        this.type = type;
+    }
+
+    public String getEndpoint() {
+        return endpoint;
+    }
+
+    public void setEndpoint(String endpointName) {
+        this.endpoint = endpointName;
+    }
+
+    public QName getInterfaceName() {
+        return interfaceName;
+    }
+
+    public void setInterfaceName(QName interfaceName) {
+        this.interfaceName = interfaceName;
+    }
+
+    public QName getService() {
+        return service;
+    }
+
+    public void setService(QName service) {
+        this.service = service;
+    }
+
+}