You are viewing a plain text version of this content. The canonical link for it is here.
Posted to yoko-commits@incubator.apache.org by dm...@apache.org on 2007/03/27 12:11:48 UTC

svn commit: r522882 - in /incubator/yoko/trunk/bindings/src: main/java/org/apache/yoko/bindings/corba/CorbaDestination.java test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java

Author: dmiddlem
Date: Tue Mar 27 05:11:47 2007
New Revision: 522882

URL: http://svn.apache.org/viewvc?view=rev&rev=522882
Log:
Commit for YOKO-270:
* Small fix for issues when shutting down the binding.
* Re-committing the test for object reference support.

Added:
    incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java   (with props)
Modified:
    incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDestination.java

Modified: incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDestination.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDestination.java?view=diff&rev=522882&r1=522881&r2=522882
==============================================================================
--- incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDestination.java (original)
+++ incubator/yoko/trunk/bindings/src/main/java/org/apache/yoko/bindings/corba/CorbaDestination.java Tue Mar 27 05:11:47 2007
@@ -192,11 +192,18 @@
                 // Try add the key to the boot manager.  This is required for a corbaloc
                 int keyIndex = location.indexOf('/');
                 String key = location.substring(keyIndex + 1);
-                org.apache.yoko.orb.OB.BootManager bootManager = 
-                    org.apache.yoko.orb.OB.BootManagerHelper.narrow(
+                try {
+                    org.apache.yoko.orb.OB.BootManager bootManager = 
+                        org.apache.yoko.orb.OB.BootManagerHelper.narrow(
                             orb.resolve_initial_references("BootManager"));
-                bootManager.add_binding(key.getBytes(), obj);
-                LOG.info("Added key " + key + " to bootmanager");
+                    bootManager.add_binding(key.getBytes(), obj);
+                    LOG.info("Added key " + key + " to bootmanager");
+                } catch (org.apache.yoko.orb.OB.BootManagerPackage.AlreadyExists ex) {
+                    // REVISIT: This can happen when the binding is being shutdown.  We need to find
+                    // out why we are trying to initialize a servant when we are shutting down the
+                    // binding.
+                    LOG.info("Key " + key + " already added to boot manager");
+                }
             } else {
                 String ior = orb.object_to_string(obj);
                 address.setLocation(ior);

Added: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java
URL: http://svn.apache.org/viewvc/incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java?view=auto&rev=522882
==============================================================================
--- incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java (added)
+++ incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java Tue Mar 27 05:11:47 2007
@@ -0,0 +1,379 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.yoko.bindings.corba;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Map;
+import java.util.Properties;
+
+import javax.jws.WebService;
+import javax.xml.namespace.QName;
+import javax.xml.ws.BindingProvider;
+import javax.xml.ws.Endpoint;
+import javax.xml.ws.Service;
+
+import org.apache.cxf.jaxb.JAXBUtils;
+import org.apache.cxf.ws.addressing.EndpointReferenceType;
+import org.apache.cxf.wsdl.EndpointReferenceUtils;
+import org.apache.cxf.wsdl.WSDLManager;
+import org.apache.cxf.wsdl11.WSDLManagerImpl;
+
+import org.apache.schemas.yoko.idl.objectref.TestInterface;
+import org.apache.schemas.yoko.idl.objectref.TestInterfaceCORBAService;
+import org.apache.schemas.yoko.idl.objectref.TestObject;
+import org.apache.schemas.yoko.idl.objectref.TestObjectCORBAService;
+
+import junit.framework.TestCase;
+
+public class CorbaObjectReferenceTest extends TestCase {
+
+    private final QName OBJECT_PORT_NAME = 
+        new QName("http://schemas.apache.org/yoko/idl/ObjectRef", "TestObjectCORBAPort"); 
+    
+    private final QName OBJECT_PORT_TYPE = 
+        new QName("http://schemas.apache.org/yoko/idl/ObjectRef", "TestObject"); 
+    
+    private final QName OBJECT_SERVICE_NAME = 
+        new QName("http://schemas.apache.org/yoko/idl/ObjectRef", "TestObjectCORBAService"); 
+    
+    private final QName INTERFACE_PORT_NAME = 
+        new QName("http://schemas.apache.org/yoko/idl/ObjectRef", "TestInterfaceCORBAPort"); 
+    
+    private final QName INTERFACE_SERVICE_NAME = 
+        new QName("http://schemas.apache.org/yoko/idl/ObjectRef", "TestInterfaceCORBAService"); 
+    
+    private final static String WSDL_LOCATION = "/wsdl/ObjectRef.wsdl";
+    private final static int MAX_WAIT_COUNT = 15;
+    
+    private static TestServer server;
+    private static boolean testServerReady;
+    private TestInterface client;
+    private URL wsdlUrl;
+
+    public CorbaObjectReferenceTest(String arg0) {
+        super(arg0);
+    }
+    
+    public static void main(String[] args) {
+        junit.textui.TestRunner.run(CorbaObjectReferenceTest.class);
+    }
+    
+    protected void setUp() throws Exception {
+        super.setUp();
+       
+        if (server == null) {
+            System.out.println("Initializing object reference support test...");
+            server = new TestServer();
+            server.start();
+        }
+
+        int waitCount = 0;
+        // Wait for the server to start if it hasn't already
+        while (waitCount < MAX_WAIT_COUNT && !server.isReady()) {
+            try {
+                Thread.sleep(1000);
+                waitCount++;
+            } catch (Exception ex) {
+                // Consume
+            }
+        }
+
+        if (!server.isReady()) {
+            throw new Exception("Server failed to start in a timely fashion");
+        }
+
+        // Now initialize the client-side
+        try {
+            wsdlUrl = TestInterface.class.getResource(WSDL_LOCATION);
+        } catch (Exception ex) {
+            throw new Exception("Unable to resolve WSDL location");
+        }
+        
+        TestInterfaceCORBAService service = 
+            new TestInterfaceCORBAService(wsdlUrl, INTERFACE_SERVICE_NAME);
+        client = service.getPort(INTERFACE_PORT_NAME, TestInterface.class);
+
+        if (client == null) {
+            throw new Exception("Unable to create client");
+        }
+    }
+
+    protected void tearDown() throws Exception {
+        super.tearDown();
+
+        server.interrupt();
+
+        try {
+            // Sleep for 3 seconds waiting for the server to shut down
+            Thread.sleep(3000);
+        } catch (Exception ex) {
+            // Move on to check if the server is down
+        }
+
+        if (server.isAlive()) {
+            throw new Exception("Did not terminate test server!");
+        }
+    }
+
+    public void testCustomObjectParam() {
+        System.out.println("Testing custom object reference as a parameter...");
+        EndpointReferenceType ref = null;
+        ref = createEndpointReferenceType("CustomObjectParam", false);
+
+        boolean result = client.testCustomObjectParam(ref);
+        assertTrue(result);
+    }
+
+    public void testDefaultObjectParam() {
+        System.out.println("Testing default object reference as a parameter...");
+        EndpointReferenceType ref = null;
+        ref = createEndpointReferenceType("DefaultObjectParam", false);
+
+        boolean result = client.testDefaultObjectParam(ref);
+        assertTrue(result);
+    }
+
+    public void testCustomObjectReturn() throws Exception {
+        System.out.println("Testing custom object reference as a return value...");
+        EndpointReferenceType ref = client.testCustomObjectReturn();
+        TestObject testObj = createObjectFromEndpointReferenceType(ref);
+
+        int updateVal = 789;
+
+        int startVal = testObj.testObjectValue();
+
+        // We keep on having to set the request context with the endpoints address.  This
+        // was not the case before and should be looked at further
+        Map<String, Object> requestContext = ((BindingProvider)testObj).getRequestContext();
+        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ref.getAddress().getValue());
+        testObj.testObjectValueUpdate(updateVal);
+
+        requestContext = ((BindingProvider)testObj).getRequestContext();
+        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ref.getAddress().getValue());
+        int endVal = testObj.testObjectValue();
+
+        assertTrue(endVal == updateVal);
+    }
+
+    public void testDefaultObjectReturn() throws Exception {
+        System.out.println("Testing default object reference as a return value...");
+        EndpointReferenceType ref = client.testDefaultObjectReturn();
+        TestObject testObj = createObjectFromEndpointReferenceType(ref);
+
+        int updateVal = 246;
+
+        int startVal = testObj.testObjectValue();
+
+        // We keep on having to set the request context with the endpoints address.  This
+        // was not the case before and should be looked at further
+        Map<String, Object> requestContext = ((BindingProvider)testObj).getRequestContext();
+        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ref.getAddress().getValue());
+        testObj.testObjectValueUpdate(updateVal);
+
+        requestContext = ((BindingProvider)testObj).getRequestContext();
+        requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, ref.getAddress().getValue());
+        int endVal = testObj.testObjectValue();
+
+        assertTrue(endVal == updateVal);
+    }
+ 
+    // Helper methods that can be used throughout the test
+    public EndpointReferenceType createEndpointReferenceType(String name, boolean serverSide) {
+        String corbaAddress = null;
+        // The server and client bindings need to be on two different ORBs since they can't
+        // share.  So we need to make sure that the port numbers are different.
+        if (serverSide) {
+            corbaAddress = "corbaloc::localhost:54321/Server" + name;
+        } else {
+            corbaAddress = "corbaloc::localhost:54322/Client" + name;
+        }
+
+        Object testObj = new TestObjectImpl();
+        Endpoint.publish(corbaAddress, testObj);
+
+        EndpointReferenceType ref =
+            EndpointReferenceUtils.getEndpointReference(wsdlUrl,
+                                                        OBJECT_SERVICE_NAME,
+                                                        OBJECT_PORT_NAME.getLocalPart());
+        EndpointReferenceUtils.setInterfaceName(ref, OBJECT_PORT_TYPE);
+        EndpointReferenceUtils.setAddress(ref, corbaAddress);
+
+        return ref;
+    }
+
+    public TestObject createObjectFromEndpointReferenceType(EndpointReferenceType epr) throws Exception {
+            WSDLManager manager = null;
+            manager = new WSDLManagerImpl();
+
+            QName interfaceName = EndpointReferenceUtils.getInterfaceName(epr);
+            String wsdlLocation = EndpointReferenceUtils.getWSDLLocation(epr);
+            QName serviceName = EndpointReferenceUtils.getServiceName(epr);
+            String portName = EndpointReferenceUtils.getPortName(epr);
+
+            QName port = new QName(serviceName.getNamespaceURI(), portName);
+
+            StringBuffer seiName = new StringBuffer();
+            seiName.append("org.apache.schemas.yoko.idl.objectref.");
+            seiName.append(JAXBUtils.nameToIdentifier(interfaceName.getLocalPart(),
+                           JAXBUtils.IdentifierType.INTERFACE));
+
+            Class<?> sei = null;
+            sei = Class.forName(seiName.toString(), true, manager.getClass().getClassLoader());
+
+            Service service = Service.create(wsdlUrl, serviceName);
+            TestObject testObj = (TestObject)service.getPort(port, sei);
+
+            Map<String, Object> requestContext = ((BindingProvider)testObj).getRequestContext();
+            requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, epr.getAddress().getValue());
+
+            return testObj;
+    }
+
+    
+    
+    // A small test server for the test case to interact with
+    public class TestServer extends Thread {
+        private boolean serverReady;
+
+        public TestServer() {
+            serverReady = false;
+        }
+
+        public void run() {
+            Object implementor = new TestInterfaceImpl();
+            String address = "corbaloc::localhost:54321/ObjectRefTest";
+            Endpoint.publish(address, implementor);
+
+            serverReady = true;
+        }
+
+        public boolean isReady() {
+            return serverReady;
+        }
+    }
+
+
+    
+    // A minimal TestInterface implementation to test object references
+    @WebService(portName = "TestInterfaceCORBAPort",
+                          serviceName = "TestInterfaceCORBAService",
+                          targetNamespace = "http://schemas.apache.org/yoko/idl/ObjectRef",
+                          endpointInterface = "org.apache.schemas.yoko.idl.objectref.TestInterface")
+    public class TestInterfaceImpl implements TestInterface {
+
+        public boolean testCustomObjectParam(EndpointReferenceType param) {
+            TestObject testObj = null;
+            try {
+                testObj = createObjectFromEndpointReferenceType(param);
+            } catch (Exception ex) {
+                return false;
+            }
+
+            if (testObj == null) {
+                return false;
+            }
+
+            try {
+                int updateVal = 123;
+                int startVal = testObj.testObjectValue();
+
+                // We keep on having to set the request context with the endpoints address.  This
+                // was not the case before and should be looked at further
+                Map<String, Object> requestContext = ((BindingProvider)testObj).getRequestContext();
+                requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, param.getAddress().getValue());
+                testObj.testObjectValueUpdate(updateVal);
+
+                requestContext = ((BindingProvider)testObj).getRequestContext();
+                requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, param.getAddress().getValue());
+                int endVal = testObj.testObjectValue();
+
+                return (endVal == updateVal);
+            } catch(Exception ex) {
+                return false;
+            }
+        }
+
+        public boolean testDefaultObjectParam(EndpointReferenceType param) {
+            TestObject testObj = null;
+            try {
+                testObj = createObjectFromEndpointReferenceType(param);
+            } catch (Exception ex) {
+                return false;
+            }
+
+            if (testObj == null) {
+                return false;
+            }
+
+            try {
+                int updateVal = 456;
+                int startVal = testObj.testObjectValue();
+
+                // We keep on having to set the request context with the endpoints address.  This
+                // was not the case before and should be looked at further
+                Map<String, Object> requestContext = ((BindingProvider)testObj).getRequestContext();
+                requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, param.getAddress().getValue());
+                testObj.testObjectValueUpdate(updateVal);
+
+                requestContext = ((BindingProvider)testObj).getRequestContext();
+                requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, param.getAddress().getValue());
+                int endVal = testObj.testObjectValue();
+
+                return (endVal == updateVal);
+            } catch(Exception ex) {
+                return false;
+            }
+        }
+
+        public EndpointReferenceType testCustomObjectReturn() {
+            EndpointReferenceType ref = null;
+            ref = createEndpointReferenceType("CustomObjectReturn", true);
+
+            return ref;
+        }
+
+        public EndpointReferenceType testDefaultObjectReturn() {
+            EndpointReferenceType ref = null;
+            ref = createEndpointReferenceType("DefaultObjectReturn", true);
+
+            return ref;
+        }
+    }
+
+
+    
+    // A minimal TestInterface implementation to test object references
+    @javax.jws.WebService(portName = "TestObjectCORBAPort",
+                          serviceName = "TestObjectCORBAService",
+                          targetNamespace = "http://schemas.apache.org/yoko/idl/ObjectRef",
+                          endpointInterface = "org.apache.schemas.yoko.idl.objectref.TestObject")
+    public class TestObjectImpl implements TestObject {
+
+        private int val;
+
+        public int testObjectValue() {
+            return val;
+        }
+
+        public void testObjectValueUpdate(int value) {
+            val = value;
+        }
+    }
+}

Propchange: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/yoko/trunk/bindings/src/test/java/org/apache/yoko/bindings/corba/CorbaObjectReferenceTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date