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 2008/06/20 18:32:28 UTC

svn commit: r669981 - in /servicemix/components/bindings/servicemix-cxf-bc/trunk: ./ src/main/java/org/apache/servicemix/cxfbc/ src/test/java/org/apache/servicemix/cxfbc/ src/test/java/org/apache/servicemix/cxfbc/provider/ src/test/resources/org/apache...

Author: chirino
Date: Fri Jun 20 09:32:28 2008
New Revision: 669981

URL: http://svn.apache.org/viewvc?rev=669981&view=rev
Log:
Merged revisions 669381,669425 via svnmerge from 
https://svn.apache.org/repos/asf/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc

........
  r669381 | ffang | 2008-06-19 00:03:51 -0400 (Thu, 19 Jun 2008) | 1 line
  
  [SM-1400]cxf bc consumer should be able to retrieve wsdl from internal endpoint of JBI bus if there is one
........
  r669425 | ffang | 2008-06-19 04:34:16 -0400 (Thu, 19 Jun 2008) | 1 line
  
  [SM-1413]test to verify both send and sendSync can work with cxf bc provider using jms transport identically
........

Added:
    servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/CxfBcRetrieveWsdlFromInternalEndpointTest.java
      - copied unchanged from r669425, servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/test/java/org/apache/servicemix/cxfbc/CxfBcRetrieveWsdlFromInternalEndpointTest.java
    servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/xbean_retrieve_wsdl_from_internal_wsdl.xml
      - copied unchanged from r669425, servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc/src/test/resources/org/apache/servicemix/cxfbc/xbean_retrieve_wsdl_from_internal_wsdl.xml
Modified:
    servicemix/components/bindings/servicemix-cxf-bc/trunk/   (props changed)
    servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
    servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplTwoWayJMS.java
    servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/provider/CxfBCSEProviderSystemTest.java
    servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml

Propchange: servicemix/components/bindings/servicemix-cxf-bc/trunk/
------------------------------------------------------------------------------
--- svnmerge-integrated (original)
+++ svnmerge-integrated Fri Jun 20 09:32:28 2008
@@ -1 +1 @@
-/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc:1-669197
+/servicemix/smx3/trunk/deployables/bindingcomponents/servicemix-cxf-bc:1-669979

Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java?rev=669981&r1=669980&r2=669981&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/main/java/org/apache/servicemix/cxfbc/CxfBcConsumer.java Fri Jun 20 09:32:28 2008
@@ -16,6 +16,7 @@
  */
 package org.apache.servicemix.cxfbc;
 
+import java.io.IOException;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -26,22 +27,24 @@
 import java.util.concurrent.CopyOnWriteArrayList;
 
 import javax.activation.DataHandler;
+import javax.jbi.JBIException;
 import javax.jbi.component.ComponentContext;
 import javax.jbi.management.DeploymentException;
 import javax.jbi.messaging.ExchangeStatus;
 import javax.jbi.messaging.MessageExchange;
 import javax.jbi.messaging.NormalizedMessage;
+import javax.jbi.servicedesc.ServiceEndpoint;
 import javax.wsdl.WSDLException;
-import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLReader;
+import javax.wsdl.extensions.soap.SOAPBinding;
 import javax.xml.namespace.QName;
 import javax.xml.transform.Source;
 
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import com.ibm.wsdl.extensions.soap.SOAPAddressImpl;
+import com.ibm.wsdl.extensions.soap.SOAPBindingImpl;
 
-import com.ibm.wsdl.Constants;
 import org.apache.cxf.Bus;
 import org.apache.cxf.attachment.AttachmentImpl;
 import org.apache.cxf.binding.AbstractBindingFactory;
@@ -95,6 +98,7 @@
 import org.apache.servicemix.soap.util.DomUtil;
 import org.springframework.core.io.Resource;
 
+
 /**
  * 
  * @author gnodet
@@ -212,23 +216,8 @@
     public void validate() throws DeploymentException {
         try {
             if (definition == null) {
-                if (wsdl == null) {
-                    throw new DeploymentException("wsdl property must be set");
-                }
-                description = DomUtil.parse(wsdl.getInputStream());
-                WSDLFactory wsdlFactory = WSDLFactory.newInstance();
-                WSDLReader reader = wsdlFactory.newWSDLReader();
-                reader.setFeature(Constants.FEATURE_VERBOSE, false);
-                // definition = reader.readWSDL(wsdl.getURL().toString(),
-                // description);
-                try {
-                    // use wsdl manager to parse wsdl or get cached definition
-                    definition = getBus().getExtension(WSDLManager.class)
-                            .getDefinition(wsdl.getURL());
-                } catch (WSDLException ex) {
-                    // throw new ServiceConstructionException(new
-                    // Message("SERVICE_CREATION_MSG", LOG), ex);
-                }
+                
+                retrieveWSDL();
             }
             if (service == null) {
                 // looking for the servicename according to targetServiceName
@@ -242,6 +231,7 @@
             }
             WSDLServiceFactory factory = new WSDLServiceFactory(getBus(),
                     definition, service);
+            
             Service cxfService = factory.create();
 
             EndpointInfo ei = cxfService.getServiceInfos().iterator().next()
@@ -301,6 +291,7 @@
             cxfService.getOutFaultInterceptors().add(
                     new SoapOutInterceptor(getBus()));
 
+            
             ep = new EndpointImpl(getBus(), cxfService, ei);
             getInInterceptors().addAll(getBus().getInInterceptors());
             getInFaultInterceptors().addAll(getBus().getInFaultInterceptors());
@@ -344,6 +335,53 @@
         }
     }
 
+    private void retrieveWSDL() throws JBIException, WSDLException, DeploymentException, IOException {
+        if (wsdl == null) {
+            if (getTargetService() != null && getTargetEndpoint() != null) {
+                ServiceEndpoint serviceEndpoint 
+                    = getServiceUnit().getComponent().getComponentContext().getEndpoint(getTargetService(), getTargetEndpoint());
+                if (serviceEndpoint != null) {
+                    description = 
+                        this.getServiceUnit().getComponent().getComponentContext().getEndpointDescriptor(serviceEndpoint);
+                    definition = getBus().getExtension(WSDLManager.class)
+                        .getDefinition((Element)description.getFirstChild());
+                    List address = definition.getService(getTargetService()).getPort(getTargetEndpoint()).getExtensibilityElements();
+                    if (address == null || address.size() == 0) {
+                        SOAPAddressImpl soapAddress = new SOAPAddressImpl();
+                        //specify default transport if there is no one in the internal wsdl
+                        soapAddress.setLocationURI("http://localhost");
+                        definition.getService(getTargetService()).getPort(getTargetEndpoint()).addExtensibilityElement(soapAddress);
+                    }
+                    List binding = definition.getService(getTargetService()).getPort(
+                            getTargetEndpoint()).getBinding().getExtensibilityElements();
+                    if (binding == null || binding.size() == 0) {
+                        //no binding info in the internal wsdl so we need add default soap11 binding
+                        SOAPBinding soapBinding = new SOAPBindingImpl();
+                        soapBinding.setTransportURI("http://schemas.xmlsoap.org/soap/http");
+                        soapBinding.setStyle("document");
+                        definition.getService(getTargetService()).getPort(getTargetEndpoint()).getBinding().
+                            addExtensibilityElement(soapBinding);
+                    }
+                    
+                }
+            } else {
+                throw new DeploymentException("can't get wsdl");
+            }
+            
+        } else {
+            description = DomUtil.parse(wsdl.getInputStream());
+            try {
+                // use wsdl manager to parse wsdl or get cached
+                // definition
+                definition = getBus().getExtension(WSDLManager.class)
+                        .getDefinition(wsdl.getURL());
+            } catch (WSDLException ex) {
+                // throw new ServiceConstructionException(new
+                // Message("SERVICE_CREATION_MSG", LOG), ex);
+            }
+        }
+    }
+
     protected Bus getBus() {
         if (getBusCfg() != null) {
             if (bus == null) {

Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplTwoWayJMS.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplTwoWayJMS.java?rev=669981&r1=669980&r2=669981&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplTwoWayJMS.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/GreeterImplTwoWayJMS.java Fri Jun 20 09:32:28 2008
@@ -29,6 +29,14 @@
     extends org.apache.hello_world_soap_http.GreeterImpl {
     public String greetMe(String me) {
         System.out.println("\n\n*** GreetMe called with: " + me + "***\n\n");
+        if ("ffang".equals(me)) {
+            try {
+                Thread.sleep(3000);
+            } catch (InterruptedException e) {
+                // TODO Auto-generated catch block
+                e.printStackTrace();
+            }
+        }
         return "Hello " + me;
     }
         

Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/provider/CxfBCSEProviderSystemTest.java
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/provider/CxfBCSEProviderSystemTest.java?rev=669981&r1=669980&r2=669981&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/provider/CxfBCSEProviderSystemTest.java (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/java/org/apache/servicemix/cxfbc/provider/CxfBCSEProviderSystemTest.java Fri Jun 20 09:32:28 2008
@@ -30,6 +30,8 @@
 
 import org.apache.servicemix.JbiConstants;
 import org.apache.servicemix.client.DefaultServiceMixClient;
+import org.apache.servicemix.cxfbc.EmbededJMSBrokerLauncher;
+import org.apache.servicemix.cxfbc.MyJMSServer;
 import org.apache.servicemix.jbi.container.SpringJBIContainer;
 import org.apache.servicemix.jbi.jaxp.SourceTransformer;
 import org.apache.servicemix.jbi.jaxp.StringSource;
@@ -45,6 +47,8 @@
     private InOut io;    
 
     private ServerLauncher sl;
+    private ServerLauncher embeddedLauncher;
+    private ServerLauncher jmsLauncher;
     
     
     public void startServers() throws Exception {
@@ -53,9 +57,23 @@
         }
         Map<String, String> props = new HashMap<String, String>();                
         
-        assertTrue("server did not launch correctly", 
-                   launchServer(MyServer.class, props, false));
+        
 
+        if (System.getProperty("activemq.store.dir") != null) {
+            props.put("activemq.store.dir", System.getProperty("activemq.store.dir"));
+        }
+        props.put("java.util.logging.config.file", 
+                  System.getProperty("java.util.logging.config.file"));
+        
+        assertTrue("server did not launch correctly", 
+                   launchServer(EmbededJMSBrokerLauncher.class, props, false));
+        embeddedLauncher =  sl;
+        assertTrue("server did not launch correctly", 
+                launchServer(MyJMSServer.class, null, false));
+        jmsLauncher = sl;
+        
+        assertTrue("server did not launch correctly", 
+                launchServer(MyServer.class, props, false));
         
         serversStarted = true;
     }
@@ -109,6 +127,19 @@
         }
         
         try {
+            embeddedLauncher.stopServer();         
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            fail("failed to stop server " + embeddedLauncher.getClass());
+        }
+        try {
+            jmsLauncher.stopServer();         
+        } catch (IOException ex) {
+            ex.printStackTrace();
+            fail("failed to stop server " + jmsLauncher.getClass());
+        } 
+        
+        try {
             sl.stopServer();         
         } catch (IOException ex) {
             ex.printStackTrace();
@@ -126,6 +157,26 @@
         setUpJBI("org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml");
         greetMeProviderTestBase(true);
     }
+    
+    public void testGreetMeProviderWithJmSTransportSync() throws Exception {
+        setUpJBI("org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml");
+        greetMeProviderJmsTestBase(true, "Edell");
+    }
+    
+    public void testGreetMeProviderWithJmSTransportAsync() throws Exception {
+        setUpJBI("org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml");
+        greetMeProviderJmsTestBase(false, "Edell");
+    }
+    
+    public void testGreetMeProviderWithJmSTransportSyncTimeOut() throws Exception {
+        setUpJBI("org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml");
+        greetMeProviderJmsTestBase(true, "ffang");
+    }
+    
+    public void testGreetMeProviderWithJmSTransportAsyncTimeOut() throws Exception {
+        setUpJBI("org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml");
+        greetMeProviderJmsTestBase(false, "ffang");
+    }
         
     private void greetMeProviderTestBase(boolean useDynamicUri) throws Exception {
 
@@ -143,11 +194,43 @@
             io.getInMessage().setProperty(JbiConstants.HTTP_DESTINATION_URI, "http://localhost:9002/dynamicuritest");
         }
         client.sendSync(io);
+        
         assertTrue(new SourceTransformer().contentToString(
                 io.getOutMessage()).indexOf("Hello Edell") >= 0);        
         
     }
     
+    private void greetMeProviderJmsTestBase(boolean sync, String name) throws Exception {
+
+        client = new DefaultServiceMixClient(jbi);
+        
+        io = client.createInOutExchange();
+        io.setService(new QName("http://apache.org/hello_world_soap_http", "HelloWorldService"));
+        io.setInterfaceName(new QName("http://apache.org/hello_world_soap_http", "Greeter"));
+        io.setOperation(new QName("http://apache.org/hello_world_soap_http", "greetMe"));
+        //send message to proxy
+        io.getInMessage().setContent(new StringSource(
+              "<greetMe xmlns='http://apache.org/hello_world_soap_http/types'><requestType>"
+              + name
+              + "</requestType></greetMe>"));
+        
+        if (sync) {
+            client.sendSync(io);
+        } else {
+            client.send(io);
+            Thread.sleep(5000);
+        }
+        if ("ffang".equals(name)) {
+            //in this case, the server is intended to sleep 3 sec, 
+            //which will cause time out both for sync and async invoke
+            assertTrue(new SourceTransformer().contentToString(
+                    io.getFault()).indexOf("JMSClientTransport.receive() timed out. No message available.") >= 0);
+        } else {
+            //in this case, both sync and async invocation shouldn't see the timeout problem
+            assertTrue(new SourceTransformer().contentToString(
+                io.getOutMessage()).indexOf("Hello " + name) >= 0);
+        }
+    }
 
     @Override
     protected AbstractXmlApplicationContext createBeanFactory() {

Modified: servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml
URL: http://svn.apache.org/viewvc/servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml?rev=669981&r1=669980&r2=669981&view=diff
==============================================================================
--- servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml (original)
+++ servicemix/components/bindings/servicemix-cxf-bc/trunk/src/test/resources/org/apache/servicemix/cxfbc/provider/xbean_provider_without_jbi_wrapper.xml Fri Jun 20 09:32:28 2008
@@ -20,7 +20,8 @@
 <beans xmlns:sm="http://servicemix.apache.org/config/1.0"
        xmlns:cxfbc="http://servicemix.apache.org/cxfbc/1.0"
        xmlns:test="urn:test"
-       xmlns:greeter="http://apache.org/hello_world_soap_http_provider">
+       xmlns:greeter="http://apache.org/hello_world_soap_http_provider"
+       xmlns:jmsgreeter="http://apache.org/hello_world_soap_http">
 
        
   <sm:container id="jbi" embedded="true">
@@ -47,6 +48,26 @@
           <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
         </cxfbc:outFaultInterceptors>
       </cxfbc:provider>
+       
+      <cxfbc:provider wsdl="org/apache/servicemix/cxfbc/ws/security/hello_world.wsdl"
+                      service="jmsgreeter:HelloWorldService"
+                      endpoint="HelloWorldPortProxy"
+                      interfaceName="jmsgreeter:Greetr"
+                      useJBIWrapper="false"
+                     >
+          <cxfbc:inInterceptors>
+            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+          </cxfbc:inInterceptors>
+          <cxfbc:outInterceptors>
+            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+          </cxfbc:outInterceptors>
+          <cxfbc:inFaultInterceptors>
+            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"/>
+          </cxfbc:inFaultInterceptors>
+          <cxfbc:outFaultInterceptors>
+            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
+          </cxfbc:outFaultInterceptors>
+      </cxfbc:provider>
     </sm:endpoints>
     
   </sm:container>