cxf-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From dav...@apache.org
Subject svn commit: r736631 - in /cxf/sandbox/dosgi/dsw/cxf-dsw/src: main/java/org/apache/cxf/dosgi/dsw/handlers/ test/java/org/apache/cxf/dosgi/dsw/handlers/
Date Thu, 22 Jan 2009 13:08:40 GMT
Author: davidb
Date: Thu Jan 22 05:08:40 2009
New Revision: 736631

URL: http://svn.apache.org/viewvc?rev=736631&view=rev
Log:
Made the publication of the osgi.remote.configuration.pojo.address property contain correct
port number when using OSGi HttpService.

When using the HttpService (triggered by the osgi.remote.configuration.pojo.httpservice.context
property) the publication of the service uses osgi.remote.configuration.pojo.address property
to declare the location of the service when publishing to Discovery. This is because the client
side would still need this property to look up the service.

The new code looks up the port number used by the HttpService using the standard osgi "org.osgi.service.http.port"
and/or "org.osgi.service.http.port.secure" properties.

This way it fabricates the value of the osgi.remote.configuration.pojo.address property as
follows:
http[s]://{machine-name}:{port property}/{context}

Also added new unit tests.

Modified:
    cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractConfigurationHandler.java
    cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
    cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
    cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
    cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandlerTest.java
    cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandlerTest.java

Modified: cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractConfigurationHandler.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractConfigurationHandler.java?rev=736631&r1=736630&r2=736631&view=diff
==============================================================================
--- cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractConfigurationHandler.java
(original)
+++ cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractConfigurationHandler.java
Thu Jan 22 05:08:40 2009
@@ -42,10 +42,13 @@
     protected String getDefaultAddress(Class<?> type) {        
         String host = handlerProps.get(Constants.DEFAULT_HOST_CONFIG).toString();
         String port = handlerProps.get(Constants.DEFAULT_PORT_CONFIG).toString();
+        return getAddress("http", host, port, "/" + type.getName().replace('.', '/'));  
     
+    }
+
+    protected String getAddress(String scheme, String host, String port, String context)
{
         StringBuilder buf = new StringBuilder();
-        buf.append("http://").append(host).append(':').append(port).append('/')
-           .append(type.getName().replace('.', '/'));
-        return buf.toString();        
+        buf.append(scheme).append("://").append(host).append(':').append(port).append(context);
+        return buf.toString();
     }
     
     protected boolean useMasterMap() {

Modified: cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java?rev=736631&r1=736630&r2=736631&view=diff
==============================================================================
--- cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
(original)
+++ cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/AbstractPojoConfigurationTypeHandler.java
Thu Jan 22 05:08:40 2009
@@ -68,8 +68,6 @@
     Map<String, String> registerPublication(Server server, String[] intents) {
         Map<String, String> publicationProperties = new HashMap<String, String>();
         publicationProperties.put(Constants.CONFIG_TYPE_PROPERTY, Constants.POJO_CONFIG_TYPE);
-        publicationProperties.put(Constants.POJO_ADDRESS_PROPERTY, 
-                server.getDestination().getAddress().getAddress().getValue());
 
         String intentsValue = OsgiUtils.formatIntents(intents);
         if (intentsValue.length() > 0) {

Modified: cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java?rev=736631&r1=736630&r2=736631&view=diff
==============================================================================
--- cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
(original)
+++ cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandler.java
Thu Jan 22 05:08:40 2009
@@ -18,6 +18,8 @@
   */
 package org.apache.cxf.dosgi.dsw.handlers;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.Hashtable;
 import java.util.Map;
 import java.util.Set;
@@ -78,8 +80,8 @@
                                ServiceEndpointDescription sd, 
                                Class<?> iClass, 
                                Object serviceBean) {
-        String context = getServletContext(sd, iClass);
-        if (context == null) {
+        String contextRoot = getServletContextRoot(sd, iClass);
+        if (contextRoot == null) {
             LOG.warning("Remote address is unavailable");
             return null;
         }
@@ -87,8 +89,8 @@
         CXFNonSpringServlet cxf = new CXFNonSpringServlet();
         HttpService httpService = getHttpService();
         try {
-            httpService.registerServlet(context, cxf, new Hashtable<String, String>(),
null);
-            LOG.info("Successfully registered CXF DOSGi servlet at " + context);
+            httpService.registerServlet(contextRoot, cxf, new Hashtable<String, String>(),
null);
+            LOG.info("Successfully registered CXF DOSGi servlet at " + contextRoot);
         } catch (Exception e) {
             throw new ServiceException("CXF DOSGi: problem registering CXF HTTP Servlet",
e);
         }        
@@ -106,13 +108,41 @@
                 applyIntents(dswContext, callingContext, factory.getFeatures(), factory,
sd);
 
             Server server = factory.create();
-            getDistributionProvider().addExposedService(serviceReference, registerPublication(server,
intents));
+            getDistributionProvider().addExposedService(serviceReference, registerPublication(server,
intents, contextRoot));
             return server;
         } catch (IntentUnsatifiedException iue) {
             getDistributionProvider().intentsUnsatisfied(serviceReference);
             throw iue;
         }       
     }
+    
+    private Map<String, String> registerPublication(Server server, String[] intents,
String contextRoot) {
+        Map<String, String> publicationProperties = super.registerPublication(server,
intents);
+        
+        String port = null;
+        boolean https = false;
+        if ("true".equalsIgnoreCase(System.getProperty("org.osgi.service.http.secure.enabled")))
{
+            https = true;
+            port = System.getProperty("org.osgi.service.http.port.secure");            
+        } else {
+            port = System.getProperty("org.osgi.service.http.port");            
+        }
+        if (port == null) {
+            port = "80";
+        }
+        
+        String hostName = null;
+        try {
+            hostName = InetAddress.getLocalHost().getHostName();
+        } catch (UnknownHostException e) {
+            hostName = "localhost";
+        }
+        
+        publicationProperties.put(Constants.POJO_ADDRESS_PROPERTY,
+            getAddress(https ? "https" : "http", hostName, port, contextRoot));
+
+        return publicationProperties;
+    }    
 
     private HttpService getHttpService() {
         for (ServiceReference sr : httpServiceReferences) {
@@ -124,10 +154,10 @@
         throw new ServiceException("CXF DOSGi: No HTTP Service could be found to publish
CXF endpoint in.");
     }
 
-    private String getServletContext(ServiceEndpointDescription sd, Class<?> iClass)
{
+    private String getServletContextRoot(ServiceEndpointDescription sd, Class<?> iClass)
{
         String context = OsgiUtils.getProperty(sd, Constants.POJO_HTTP_SERVICE_CONTEXT);
         if (context == null) {
-            context = iClass.getName().replace('.', '/');
+            context = "/" + iClass.getName().replace('.', '/');
             LOG.info("Using a default address : " + context);
         }
         return context;

Modified: cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java?rev=736631&r1=736630&r2=736631&view=diff
==============================================================================
--- cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
(original)
+++ cxf/sandbox/dosgi/dsw/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandler.java
Thu Jan 22 05:08:40 2009
@@ -85,35 +85,43 @@
                                ServiceEndpointDescription sd, 
                                Class<?> iClass,
                                Object serviceBean) throws IntentUnsatifiedException {   
    
-    String address = getPojoAddress(sd, iClass);
-    if (address == null) {
-        LOG.warning("Remote address is unavailable");
-        return null;
-    }
-    
-    LOG.info("Creating a " + sd.getInterfaceNames().toArray()[0]
-        + " endpoint from CXF PublishHook, address is " + address);
-    
-    ServerFactoryBean factory = createServerFactoryBean();
-    factory.setServiceClass(iClass);
-    factory.setAddress(address);
-    factory.getServiceFactory().setDataBinding(new AegisDatabinding());
-    factory.setServiceBean(serviceBean);
-    
-    try {
-        String [] intents = applyIntents(
-            dswContext, callingContext, factory.getFeatures(), factory, sd);
+        String address = getPojoAddress(sd, iClass);
+        if (address == null) {
+            LOG.warning("Remote address is unavailable");
+            return null;
+        }
+        
+        LOG.info("Creating a " + sd.getInterfaceNames().toArray()[0]
+            + " endpoint from CXF PublishHook, address is " + address);
+        
+        ServerFactoryBean factory = createServerFactoryBean();
+        factory.setServiceClass(iClass);
+        factory.setAddress(address);
+        factory.getServiceFactory().setDataBinding(new AegisDatabinding());
+        factory.setServiceBean(serviceBean);
+        
+        try {
+            String [] intents = applyIntents(
+                dswContext, callingContext, factory.getFeatures(), factory, sd);
+        
+            Server server = factory.create();
+            getDistributionProvider().addExposedService(serviceReference, registerPublication(server,
intents));
+            return server;
+        } catch (IntentUnsatifiedException iue) {
+            getDistributionProvider().intentsUnsatisfied(serviceReference);
+            throw iue;
+        }
+    }       
     
-        Server server = factory.create();
-        getDistributionProvider().addExposedService(serviceReference, registerPublication(server,
intents));
-        return server;
-    } catch (IntentUnsatifiedException iue) {
-        getDistributionProvider().intentsUnsatisfied(serviceReference);
-        throw iue;
+    @Override
+    Map<String, String> registerPublication(Server server, String[] intents) {
+        Map<String, String> publicationProperties = super.registerPublication(server,
intents);
+        publicationProperties.put(Constants.POJO_ADDRESS_PROPERTY, 
+            server.getDestination().getAddress().getAddress().getValue());
+
+        return publicationProperties;
     }
-}
-    
-    
+
     private String getPojoAddress(ServiceEndpointDescription sd, Class<?> iClass) {
         String address = OsgiUtils.getProperty(sd, Constants.POJO_ADDRESS_PROPERTY);
         if (address == null) {

Modified: cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandlerTest.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandlerTest.java?rev=736631&r1=736630&r2=736631&view=diff
==============================================================================
--- cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandlerTest.java
(original)
+++ cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/HttpServiceConfigurationTypeHandlerTest.java
Thu Jan 22 05:08:40 2009
@@ -1,13 +1,17 @@
 package org.apache.cxf.dosgi.dsw.handlers;
 
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Properties;
 
 import junit.framework.TestCase;
 
-import org.apache.cxf.dosgi.dsw.TestUtils;
+import org.apache.cxf.dosgi.dsw.Constants;
 import org.apache.cxf.dosgi.dsw.service.DistributionProviderImpl;
+import org.apache.cxf.dosgi.dsw.service.ServiceEndpointDescriptionImpl;
 import org.apache.cxf.endpoint.AbstractEndpointFactory;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.feature.AbstractFeature;
@@ -24,7 +28,74 @@
 import org.osgi.service.http.HttpService;
 
 public class HttpServiceConfigurationTypeHandlerTest extends TestCase {
-    public void testServer() {
+    public void testServer() throws Exception {
+        Properties savedProps = new Properties();
+        savedProps.putAll(System.getProperties());
+        try {
+            System.setProperty("org.osgi.service.http.port", "327");
+            
+            BundleContext dswContext = EasyMock.createNiceMock(BundleContext.class);
+            HttpService httpService = EasyMock.createNiceMock(HttpService.class);
+            // expect that the cxf servlet is registered
+            EasyMock.replay(httpService);
+            
+            ServiceReference httpSvcSR = EasyMock.createNiceMock(ServiceReference.class);
+            EasyMock.replay(httpSvcSR);
+            EasyMock.expect(dswContext.getService(httpSvcSR)).andReturn(httpService).anyTimes();
+            EasyMock.replay(dswContext);
+            
+            final ServerFactoryBean sfb = createMockServerFactoryBean();
+            
+            DistributionProviderImpl dp = new DistributionProviderImpl(dswContext);
+            Map<String, Object> handlerProps = new HashMap<String, Object>();
+            HttpServiceConfigurationTypeHandler h = 
+                new HttpServiceConfigurationTypeHandler(dswContext, dp, handlerProps) {
+                    @Override
+                    ServerFactoryBean createServerFactoryBean() {
+                        return sfb;
+                    }
+    
+                    @Override
+                    String[] applyIntents(BundleContext dswContext, BundleContext callingContext,
+                            List<AbstractFeature> features, AbstractEndpointFactory
factory, 
+                            ServiceEndpointDescription sd) {
+                        return new String [] {"a.b.c"};
+                    }            
+            };
+            h.httpServiceReferences.add(httpSvcSR);
+            
+            Runnable myService = new Runnable() {
+                public void run() {
+                    System.out.println("blah");
+                }            
+            };
+                    
+            ServiceReference sr = EasyMock.createNiceMock(ServiceReference.class);
+            BundleContext callingContext = EasyMock.createNiceMock(BundleContext.class);
+            EasyMock.replay(sr);
+            EasyMock.replay(callingContext);
+    
+            Map<String, Object> props = new HashMap<String, Object>();
+            props.put(Constants.POJO_HTTP_SERVICE_CONTEXT, "/myRunnable");
+            ServiceEndpointDescription sd = new ServiceEndpointDescriptionImpl(Runnable.class.getName(),
props);
+            
+            assertEquals("Precondition failed", 0, dp.getExposedServices().size());
+            h.createServer(sr, dswContext, callingContext, sd, Runnable.class, myService);
+            assertEquals(1, dp.getExposedServices().size());
+            assertSame(sr, dp.getExposedServices().iterator().next());
+            
+            String hostName = InetAddress.getLocalHost().getHostName();
+            Map<String, String> expected = new HashMap<String, String>();
+            expected.put("osgi.remote.configuration.type", "pojo");
+            expected.put("osgi.remote.configuration.pojo.address", "http://" + hostName +
":327/myRunnable");
+            expected.put("osgi.intents", "a.b.c");
+            assertEquals(expected, dp.getExposedProperties(sr));
+        } finally {
+            System.setProperties(savedProps);
+        }
+    } 
+    
+    public void testServerUsingDefaultAddress() throws Exception {
         BundleContext dswContext = EasyMock.createNiceMock(BundleContext.class);
         HttpService httpService = EasyMock.createNiceMock(HttpService.class);
         // expect that the cxf servlet is registered
@@ -50,7 +121,7 @@
                 String[] applyIntents(BundleContext dswContext, BundleContext callingContext,
                         List<AbstractFeature> features, AbstractEndpointFactory factory,

                         ServiceEndpointDescription sd) {
-                    return new String [] {"a.b.c"};
+                    return new String [] {};
                 }            
         };
         h.httpServiceReferences.add(httpSvcSR);
@@ -63,25 +134,92 @@
                 
         ServiceReference sr = EasyMock.createNiceMock(ServiceReference.class);
         BundleContext callingContext = EasyMock.createNiceMock(BundleContext.class);
-        ServiceEndpointDescription sd = TestUtils.mockServiceDescription(Runnable.class.getName());
         EasyMock.replay(sr);
         EasyMock.replay(callingContext);
-        EasyMock.replay(sd);        
+
+        Map<String, Object> props = new HashMap<String, Object>();
+        ServiceEndpointDescription sd = new ServiceEndpointDescriptionImpl(Runnable.class.getName(),
props);
         
         assertEquals("Precondition failed", 0, dp.getExposedServices().size());
         h.createServer(sr, dswContext, callingContext, sd, Runnable.class, myService);
         assertEquals(1, dp.getExposedServices().size());
         assertSame(sr, dp.getExposedServices().iterator().next());
         
+        String hostname = InetAddress.getLocalHost().getHostName();
         Map<String, String> expected = new HashMap<String, String>();
         expected.put("osgi.remote.configuration.type", "pojo");
-        // The following doesn't work yet.
-        // expected.put("osgi.remote.configuration.pojo.address", "http://somehost:54321/myRunnable");
-        expected.put("osgi.remote.configuration.pojo.address", "/"); // temporary
-        expected.put("osgi.intents", "a.b.c");
+        expected.put("osgi.remote.configuration.pojo.address", "http://" + hostname + ":80/java/lang/Runnable");
         assertEquals(expected, dp.getExposedProperties(sr));
     }
+
+    public void testServerConfiguredUsingHttps() throws Exception {
+        Properties savedProps = new Properties();
+        savedProps.putAll(System.getProperties());
+        try {
+            System.setProperty("org.osgi.service.http.secure.enabled", "true");
+            System.setProperty("org.osgi.service.http.port.secure", "8443");
+            
+            BundleContext dswContext = EasyMock.createNiceMock(BundleContext.class);
+            HttpService httpService = EasyMock.createNiceMock(HttpService.class);
+            // expect that the cxf servlet is registered
+            EasyMock.replay(httpService);
+            
+            ServiceReference httpSvcSR = EasyMock.createNiceMock(ServiceReference.class);
+            EasyMock.replay(httpSvcSR);
+            EasyMock.expect(dswContext.getService(httpSvcSR)).andReturn(httpService).anyTimes();
+            EasyMock.replay(dswContext);
+            
+            final ServerFactoryBean sfb = createMockServerFactoryBean();
+            
+            DistributionProviderImpl dp = new DistributionProviderImpl(dswContext);
+            Map<String, Object> handlerProps = new HashMap<String, Object>();
+            HttpServiceConfigurationTypeHandler h = 
+                new HttpServiceConfigurationTypeHandler(dswContext, dp, handlerProps) {
+                    @Override
+                    ServerFactoryBean createServerFactoryBean() {
+                        return sfb;
+                    }
+    
+                    @Override
+                    String[] applyIntents(BundleContext dswContext, BundleContext callingContext,
+                            List<AbstractFeature> features, AbstractEndpointFactory
factory, 
+                            ServiceEndpointDescription sd) {
+                        return new String [] {};
+                    }            
+            };
+            h.httpServiceReferences.add(httpSvcSR);
+            
+            Runnable myService = new Runnable() {
+                public void run() {
+                    System.out.println("blah");
+                }            
+            };
+                    
+            ServiceReference sr = EasyMock.createNiceMock(ServiceReference.class);
+            BundleContext callingContext = EasyMock.createNiceMock(BundleContext.class);
+            EasyMock.replay(sr);
+            EasyMock.replay(callingContext);
     
+            Map<String, Object> props = new HashMap<String, Object>();
+            props.put(Constants.CONFIG_TYPE_PROPERTY, Constants.POJO_CONFIG_TYPE);
+            props.put(Constants.POJO_HTTP_SERVICE_CONTEXT, "/myRunnable");
+            ServiceEndpointDescription sd = new ServiceEndpointDescriptionImpl(Runnable.class.getName(),
props);
+            
+            assertEquals("Precondition failed", 0, dp.getExposedServices().size());
+            h.createServer(sr, dswContext, callingContext, sd, Runnable.class, myService);
+            assertEquals(1, dp.getExposedServices().size());
+            assertSame(sr, dp.getExposedServices().iterator().next());
+            
+            String hostName = InetAddress.getLocalHost().getHostName();
+            Map<String, String> expected = new HashMap<String, String>();
+            expected.put("osgi.remote.configuration.type", "pojo");
+            expected.put("osgi.remote.configuration.pojo.address", "https://" + hostName
+ ":8443/myRunnable");
+            assertEquals(expected, dp.getExposedProperties(sr));
+        } finally {
+            System.setProperties(savedProps);
+        }
+    } 
+
     private ServerFactoryBean createMockServerFactoryBean() {
         ReflectionServiceFactoryBean sf = EasyMock.createNiceMock(ReflectionServiceFactoryBean.class);
         EasyMock.replay(sf);
@@ -133,6 +271,8 @@
         return server;
     }
 
+    // TODO these tests still need to be written...
+    /*
     public void testNoHttpService() {
         
     }
@@ -143,4 +283,5 @@
     
     public void testServletUnregistration() {        
     }
+    */
 }

Modified: cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandlerTest.java
URL: http://svn.apache.org/viewvc/cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandlerTest.java?rev=736631&r1=736630&r2=736631&view=diff
==============================================================================
--- cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandlerTest.java
(original)
+++ cxf/sandbox/dosgi/dsw/cxf-dsw/src/test/java/org/apache/cxf/dosgi/dsw/handlers/PojoConfigurationTypeHandlerTest.java
Thu Jan 22 05:08:40 2009
@@ -144,6 +144,47 @@
         expected.put("osgi.intents", "A B");
         assertEquals(expected, dp.getExposedProperties(sr));
     }
+    
+    public void testCreateServerWithAddressProprety() {
+        BundleContext dswContext = EasyMock.createNiceMock(BundleContext.class);
+        EasyMock.replay(dswContext);
+
+        String myService = "Hi";                
+        final ServerFactoryBean sfb = createMockServerFactoryBean();
+        
+        DistributionProviderImpl dp = new DistributionProviderImpl(dswContext);
+        PojoConfigurationTypeHandler p = new PojoConfigurationTypeHandler(dswContext, dp,
handlerProps) {
+            @Override
+            ServerFactoryBean createServerFactoryBean() {
+                return sfb;
+            }
+
+            @Override
+            String[] applyIntents(BundleContext dswContext, BundleContext callingContext,
+                List<AbstractFeature> features, AbstractEndpointFactory factory, ServiceEndpointDescription
sd) {
+                return new String []{};
+            }
+        };
+        
+        ServiceReference sr = EasyMock.createNiceMock(ServiceReference.class);
+        BundleContext callingContext = EasyMock.createNiceMock(BundleContext.class);
+        EasyMock.replay(sr);
+        EasyMock.replay(callingContext);
+        
+        Map<String, Object> props = new HashMap<String, Object>();
+        props.put(Constants.POJO_ADDRESS_PROPERTY, "http://alternate_host:80/myString");
+        ServiceEndpointDescription sd = new ServiceEndpointDescriptionImpl(Runnable.class.getName(),
props);
+        
+        assertEquals("Precondition failed", 0, dp.getExposedServices().size());
+        p.createServer(sr, dswContext, callingContext, sd, String.class, myService);
+        assertEquals(1, dp.getExposedServices().size());
+        assertSame(sr, dp.getExposedServices().iterator().next());
+        
+        Map<String, String> expected = new HashMap<String, String>();
+        expected.put("osgi.remote.configuration.type", "pojo");
+        expected.put("osgi.remote.configuration.pojo.address", "http://alternate_host:80/myString");
+        assertEquals(expected, dp.getExposedProperties(sr));
+    }    
 
     private ServerFactoryBean createMockServerFactoryBean() {
         ReflectionServiceFactoryBean sf = EasyMock.createNiceMock(ReflectionServiceFactoryBean.class);



Mime
View raw message