You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by ff...@apache.org on 2010/03/08 16:14:22 UTC

svn commit: r920352 - in /servicemix/components/engines/servicemix-cxf-se/trunk: ./ src/main/java/org/apache/servicemix/cxfse/ src/main/resources/META-INF/spring/

Author: ffang
Date: Mon Mar  8 15:14:22 2010
New Revision: 920352

URL: http://svn.apache.org/viewvc?rev=920352&view=rev
Log:
[SMXCOMP-683]inject ComponentRegistry to servicemix-cxf-se to make cxfse:proxy easy to use in osgi container

Modified:
    servicemix/components/engines/servicemix-cxf-se/trunk/pom.xml
    servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeComponent.java
    servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
    servicemix/components/engines/servicemix-cxf-se/trunk/src/main/resources/META-INF/spring/servicemix-cxf-se.xml

Modified: servicemix/components/engines/servicemix-cxf-se/trunk/pom.xml
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-cxf-se/trunk/pom.xml?rev=920352&r1=920351&r2=920352&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-cxf-se/trunk/pom.xml (original)
+++ servicemix/components/engines/servicemix-cxf-se/trunk/pom.xml Mon Mar  8 15:14:22 2010
@@ -50,6 +50,7 @@
         org.apache.servicemix.common.osgi,
         org.apache.servicemix.client*;resolution:=optional,
         org.apache.servicemix.executors.impl,
+        org.apache.servicemix.jbi.runtime,
         org.apache.servicemix.jbi.container*;resolution:=optional,
         org.apache.servicemix.jbi.framework*;resolution:=optional,
         org.apache.xbean.spring.context.v2,

Modified: servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeComponent.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeComponent.java?rev=920352&r1=920351&r2=920352&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeComponent.java (original)
+++ servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeComponent.java Mon Mar  8 15:14:22 2010
@@ -42,6 +42,7 @@
     private CxfSeEndpoint[] endpoints;
     private Bus bus;
     private CxfSeConfiguration configuration = new CxfSeConfiguration();
+    private static Object componentRegistry;
     
     public CxfSeComponent() {
         
@@ -96,6 +97,7 @@
         super.doShutDown();
     }
     
+    
     public Bus getBus() {
         return bus;
     }
@@ -107,4 +109,12 @@
    public void setBus(Bus bus) {
         this.bus = bus;
     }
+
+    public void setComponentRegistry(Object componentRegistry) {
+        this.componentRegistry = componentRegistry;
+    }
+
+    public static Object getComponentRegistry() {
+        return componentRegistry;
+    }
 }

Modified: servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java?rev=920352&r1=920351&r2=920352&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java (original)
+++ servicemix/components/engines/servicemix-cxf-se/trunk/src/main/java/org/apache/servicemix/cxfse/CxfSeProxyFactoryBean.java Mon Mar  8 15:14:22 2010
@@ -16,6 +16,7 @@
  */
 package org.apache.servicemix.cxfse;
 
+import java.lang.reflect.Method;
 import java.util.List;
 
 import javax.jbi.component.ComponentContext;
@@ -25,6 +26,7 @@
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusFactory;
+import org.apache.cxf.bus.spring.SpringBusFactory;
 import org.apache.cxf.frontend.ClientProxy;
 import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
@@ -49,6 +51,13 @@
  */
 public class CxfSeProxyFactoryBean implements FactoryBean, InitializingBean,
         DisposableBean {
+    
+    private static final String[] CXF_CONFIG = new String[] {
+        "META-INF/cxf/cxf.xml",
+        "META-INF/cxf/cxf-extension-soap.xml",
+        "META-INF/cxf/transport/jbi/cxf-transport-jbi.xml",
+        "META-INF/cxf/binding/jbi/cxf-binding-jbi.xml"
+    };
 
     private String name = ClientFactory.DEFAULT_JNDI_NAME;
 
@@ -96,16 +105,19 @@
         if (isUseJBIWrapper()) {
             cf.setBindingId(org.apache.cxf.binding.jbi.JBIConstants.NS_JBI_BINDING);
         }
-        Bus bus = BusFactory.getDefaultBus();
+        ComponentContext internalContext = getInternalContext();
+       
+        Bus bus = new SpringBusFactory().createBus(CXF_CONFIG);;
         JBITransportFactory jbiTransportFactory = (JBITransportFactory) bus
                 .getExtension(ConduitInitiatorManager.class)
                 .getConduitInitiator(JBITransportFactory.TRANSPORT_ID);
-        if (getInternalContext() != null) { 
-            DeliveryChannel dc = getInternalContext().getDeliveryChannel();
+        if (internalContext != null) { 
+            DeliveryChannel dc = internalContext.getDeliveryChannel();
             if (dc != null) {
                 jbiTransportFactory.setDeliveryChannel(dc);
             }
         }
+        cf.setBus(bus);
         Object proxy = cf.create();
         if (!isUseJBIWrapper() && !isUseSOAPEnvelope()) {
         	removeInterceptor(ClientProxy.getClient(proxy).getEndpoint().getBinding().getInInterceptors(), 
@@ -145,6 +157,15 @@
     }
 
     protected ComponentContext getInternalContext() throws Exception {
+        if (CxfSeComponent.getComponentRegistry() != null) {
+            //in osgi container
+            Object componentRegistry = CxfSeComponent.getComponentRegistry();
+            //use reflection to avoid nmr project dependency
+            Method mth = componentRegistry.getClass().getMethod("createComponentContext");
+            if (mth != null) {
+                context = (ComponentContext) mth.invoke(componentRegistry);
+            }
+        }
         if (context == null) {
             if (factory == null) {
                 if (container != null) {

Modified: servicemix/components/engines/servicemix-cxf-se/trunk/src/main/resources/META-INF/spring/servicemix-cxf-se.xml
URL: http://svn.apache.org/viewvc/servicemix/components/engines/servicemix-cxf-se/trunk/src/main/resources/META-INF/spring/servicemix-cxf-se.xml?rev=920352&r1=920351&r2=920352&view=diff
==============================================================================
--- servicemix/components/engines/servicemix-cxf-se/trunk/src/main/resources/META-INF/spring/servicemix-cxf-se.xml (original)
+++ servicemix/components/engines/servicemix-cxf-se/trunk/src/main/resources/META-INF/spring/servicemix-cxf-se.xml Mon Mar  8 15:14:22 2010
@@ -40,9 +40,14 @@
     <import resource="classpath:META-INF/cxf/transport/jbi/cxf-transport-jbi.xml" />
     <import resource="classpath:META-INF/cxf/binding/jbi/cxf-binding-jbi.xml" />
 
+    <osgi:reference id="componentRegistry"
+                    interface="org.apache.servicemix.jbi.runtime.ComponentRegistry"
+                    cardinality="1..1" />
+
     <bean id="servicemix-cxf-se" class="org.apache.servicemix.cxfse.CxfSeComponent">
         <property name="bus" ref="cxf" />
         <property name="executorFactory" ref="executorFactory" />
+        <property name="componentRegistry" ref="componentRegistry"/>
     </bean>
 
     <bean id="executorFactory" class="org.apache.servicemix.executors.impl.ExecutorFactoryImpl">