You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2014/11/28 12:36:42 UTC

[1/2] tomee git commit: making @WebServiceRef more consistent

Repository: tomee
Updated Branches:
  refs/heads/tomee-1.7.x fc6160f17 -> b72144c03


making @WebServiceRef more consistent


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/92e2c562
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/92e2c562
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/92e2c562

Branch: refs/heads/tomee-1.7.x
Commit: 92e2c5627c48b9e198c21d557fc45469b43b20bf
Parents: fc6160f
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Nov 28 12:14:03 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Nov 28 12:14:03 2014 +0100

----------------------------------------------------------------------
 .../openejb/assembler/classic/Assembler.java    | 34 ++++++++++++
 .../assembler/classic/util/ServiceInfos.java    | 50 ++++++++---------
 .../apache/openejb/config/sys/MapFactory.java   |  8 +--
 .../openejb/observer/ObserverManager.java       |  3 +-
 .../client/WebServiceInjectionConfigurator.java | 20 +++----
 .../cxf/config/WSS4JInInterceptorFactory.java   | 24 +--------
 .../cxf/config/WSS4JInterceptorFactoryBase.java | 56 ++++++++++++++++++++
 .../cxf/config/WSS4JOutInterceptorFactory.java  | 28 ++++++++++
 .../server/cxf/WebServiceInjectionTest.java     | 36 ++++++++++---
 9 files changed, 192 insertions(+), 67 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index 29c7588..6b77b86 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -123,6 +123,7 @@ import org.apache.openejb.util.PropertyPlaceHolderHelper;
 import org.apache.openejb.util.References;
 import org.apache.openejb.util.SafeToolkit;
 import org.apache.openejb.util.SuperProperties;
+import org.apache.openejb.util.URISupport;
 import org.apache.openejb.util.URLs;
 import org.apache.openejb.util.classloader.ClassLoaderAwareHandler;
 import org.apache.openejb.util.classloader.URLClassLoaderFirst;
@@ -187,6 +188,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.net.MalformedURLException;
+import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -623,6 +625,12 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
     }
 
     private AppContext createApplication(final AppInfo appInfo, ClassLoader classLoader, final boolean start) throws OpenEJBException, IOException, NamingException {
+        try {
+            mergeServices(appInfo);
+        } catch (final URISyntaxException e) {
+            logger.info("Can't merge resources.xml services and appInfo.properties");
+        }
+
         // The path is used in the UrlCache, command line deployer, JNDI name templates, tomcat integration and a few other places
         if (appInfo.appId == null) {
             throw new IllegalArgumentException("AppInfo.appId cannot be null");
@@ -935,6 +943,32 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
         }
     }
 
+    public static void mergeServices(final AppInfo appInfo) throws URISyntaxException {
+        for (final ServiceInfo si : appInfo.services) { // used lazily by JaxWsServiceObjectFactory, we could do the same for resources
+            if (!appInfo.properties.containsKey(si.id)) {
+                final Map<String, String> query = new HashMap<String, String>();
+                if (si.types != null && !si.types.isEmpty()) {
+                    query.put("type", si.types.iterator().next());
+                }
+                if (si.className != null) {
+                    query.put("class-name", si.className);
+                }
+                if (si.factoryMethod != null) {
+                    query.put("factory-name", si.factoryMethod);
+                }
+                if (si.constructorArgs != null) {
+                    query.put("constructor", Join.join(",", si.constructorArgs));
+                }
+                appInfo.properties.put(si.id, "new://Service?" + URISupport.createQueryString(query));
+                if (si.properties != null) {
+                    for (final String k : si.properties.stringPropertyNames()) {
+                        appInfo.properties.setProperty(si.id + "." + k, si.properties.getProperty(k));
+                    }
+                }
+            }
+        }
+    }
+
     private static List<CommonInfoObject> listCommonInfoObjectsForAppInfo(final AppInfo appInfo) {
         final List<CommonInfoObject> vfs = new ArrayList<CommonInfoObject>(
             appInfo.clients.size() + appInfo.connectors.size() +

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java
index 95eea6f..b0b2fbb 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/util/ServiceInfos.java
@@ -134,48 +134,48 @@ public final class ServiceInfos {
     }
 
     public static Object build(final Collection<ServiceInfo> services, final ServiceInfo info, final ObjectRecipe serviceRecipe) {
+        if ("org.apache.openejb.config.sys.MapFactory".equals(info.className)) {
+            return info.properties;
+        }
+
         if (!info.properties.containsKey("properties")) {
             info.properties.put("properties", new UnsetPropertiesRecipe());
         }
 
-        // we can't ask to have a setter for existing code
+        // we can't ask for having a setter for existing code
         serviceRecipe.allow(Option.FIELD_INJECTION);
         serviceRecipe.allow(Option.PRIVATE_PROPERTIES);
 
-        if ("org.apache.openejb.config.sys.MapFactory".equals(info.className)) {
-            serviceRecipe.setProperty("prop", info.properties);
-        } else {
-            for (final Map.Entry<Object, Object> entry : info.properties.entrySet()) { // manage links
-                final String key = entry.getKey().toString();
-                final Object value = entry.getValue();
-                if (value instanceof String) {
-                    final String valueStr = value.toString();
-                    if (valueStr.startsWith("$")) {
-                        serviceRecipe.setProperty(key, resolve(services, valueStr.substring(1)));
-                    } else if (valueStr.startsWith("@")) {
-                        final Context jndiContext = SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+        for (final Map.Entry<Object, Object> entry : info.properties.entrySet()) { // manage links
+            final String key = entry.getKey().toString();
+            final Object value = entry.getValue();
+            if (value instanceof String) {
+                final String valueStr = value.toString();
+                if (valueStr.startsWith("$")) {
+                    serviceRecipe.setProperty(key, resolve(services, valueStr.substring(1)));
+                } else if (valueStr.startsWith("@")) {
+                    final Context jndiContext = SystemInstance.get().getComponent(ContainerSystem.class).getJNDIContext();
+                    try {
+                        serviceRecipe.setProperty(key, jndiContext.lookup(JndiConstants.OPENEJB_RESOURCE_JNDI_PREFIX + valueStr.substring(1)));
+                    } catch (final NamingException e) {
                         try {
-                            serviceRecipe.setProperty(key, jndiContext.lookup(JndiConstants.OPENEJB_RESOURCE_JNDI_PREFIX + valueStr.substring(1)));
-                        } catch (final NamingException e) {
-                            try {
-                                serviceRecipe.setProperty(key, jndiContext.lookup(valueStr.substring(1)));
-                            } catch (final NamingException e1) {
-                                Logger.getInstance(LogCategory.OPENEJB, ServiceInfos.class).warning("Value " + valueStr + " starting with @ but doesn't point to an existing resource, using raw value");
-                                serviceRecipe.setProperty(key, value);
-                            }
+                            serviceRecipe.setProperty(key, jndiContext.lookup(valueStr.substring(1)));
+                        } catch (final NamingException e1) {
+                            Logger.getInstance(LogCategory.OPENEJB, ServiceInfos.class).warning("Value " + valueStr + " starting with @ but doesn't point to an existing resource, using raw value");
+                            serviceRecipe.setProperty(key, value);
                         }
-                    } else {
-                        serviceRecipe.setProperty(key, value);
                     }
                 } else {
-                    serviceRecipe.setProperty(key, entry.getValue());
+                    serviceRecipe.setProperty(key, value);
                 }
+            } else {
+                serviceRecipe.setProperty(key, entry.getValue());
             }
         }
 
         final Object service = serviceRecipe.create();
 
-        SystemInstance.get().addObserver(service);
+        SystemInstance.get().addObserver(service); // TODO: remove it? in all case the observer should remove itself when done
         Assembler.logUnusedProperties(serviceRecipe, info);
 
         return service;

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/container/openejb-core/src/main/java/org/apache/openejb/config/sys/MapFactory.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/config/sys/MapFactory.java b/container/openejb-core/src/main/java/org/apache/openejb/config/sys/MapFactory.java
index 8327100..0f58b2d 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/config/sys/MapFactory.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/config/sys/MapFactory.java
@@ -21,11 +21,13 @@ import java.util.Map;
 import java.util.Properties;
 
 public final class MapFactory {
-    private MapFactory() {
-        // no-op
+    private Properties props = new Properties();
+
+    public Map<?, ?> create() {
+        return props;
     }
 
-    public static Map<?, ?> create(final Properties props) {
+    public Properties getProps() {
         return props;
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java
----------------------------------------------------------------------
diff --git a/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java b/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java
index 0053a21..ded4e62 100644
--- a/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java
+++ b/container/openejb-loader/src/main/java/org/apache/openejb/observer/ObserverManager.java
@@ -61,7 +61,8 @@ public class ObserverManager {
         }
 
         try {
-            if (observers.add(new Observer(observer))) {
+            final Observer wrapper = new Observer(observer);
+            if (wrapper.after.size() + wrapper.before.size() + wrapper.methods.size() > 0 && observers.add(wrapper)) {
                 methods.clear();
                 fireEvent(new ObserverAdded(observer));
                 return true;

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
index 5feceea..609b7c1 100644
--- a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/client/WebServiceInjectionConfigurator.java
@@ -20,9 +20,7 @@ package org.apache.openejb.server.cxf.client;
 import org.apache.cxf.endpoint.Client;
 import org.apache.cxf.frontend.ClientProxy;
 import org.apache.openejb.OpenEJBException;
-import org.apache.openejb.assembler.classic.Assembler;
 import org.apache.openejb.assembler.classic.OpenEjbConfiguration;
-import org.apache.openejb.assembler.classic.OpenEjbConfigurationFactory;
 import org.apache.openejb.assembler.classic.ServiceInfo;
 import org.apache.openejb.config.ConfigurationFactory;
 import org.apache.openejb.config.sys.Openejb;
@@ -39,8 +37,6 @@ import java.util.List;
 import java.util.Properties;
 
 import static java.util.Arrays.asList;
-import static org.apache.openejb.server.cxf.ConfigureCxfSecurity.getPropsFromProperties;
-import static org.apache.openejb.server.cxf.ConfigureCxfSecurity.setupWSS4JChain;
 import static org.apache.openejb.server.cxf.transport.util.CxfUtil.configureInterceptors;
 
 /**
@@ -61,7 +57,9 @@ public class WebServiceInjectionConfigurator implements JaxWsServiceReference.We
     @Override
     public void customize(final Object o, final Properties properties) {
         try {
-            configure(ClientProxy.getClient(o), properties);
+            if (!javax.xml.ws.Service.class.isInstance(o)) {
+                configure(ClientProxy.getClient(o), properties);
+            }
         } catch (final Exception e) {
             Logger.getInstance(LogCategory.CXF, WebServiceInjectionConfigurator.class.getName())
                     .error(e.getMessage(), e);
@@ -74,11 +72,6 @@ public class WebServiceInjectionConfigurator implements JaxWsServiceReference.We
         }
 
         for (final String suffix : asList("", client.getEndpoint().getEndpointInfo().getName().toString() + ".")) {
-            // wss4j which is historically quite particular
-            setupWSS4JChain(client,
-                    getPropsFromProperties(properties, "cxf.jaxws.client.wss4j.in." + suffix),
-                    getPropsFromProperties(properties, "cxf.jaxws.client.wss4j.out." + suffix));
-
             // here (ie at runtime) we have no idea which services were linked to the app
             // so using tomee.xml ones for now (not that shocking since we externalize the config with this class)
             final OpenEjbConfiguration config = SystemInstance.get().getComponent(OpenEjbConfiguration.class);
@@ -104,6 +97,13 @@ public class WebServiceInjectionConfigurator implements JaxWsServiceReference.We
 
         final Collection<ServiceInfo> info = new ArrayList<ServiceInfo>(services.size());
         for (final Service s : services) {
+            final String prefix = s.getId() + ".";
+            for (final String key : properties.stringPropertyNames()) {
+                if (key.startsWith(prefix)) {
+                    s.getProperties().put(key.substring(prefix.length()), properties.getProperty(key));
+                }
+            }
+
             try {
                 info.add(cf.configureService(s, ServiceInfo.class));
             } catch (final OpenEJBException e) {

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInInterceptorFactory.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInInterceptorFactory.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInInterceptorFactory.java
index 6d938c1..b78bdd4 100644
--- a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInInterceptorFactory.java
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInInterceptorFactory.java
@@ -18,31 +18,11 @@ package org.apache.openejb.server.cxf.config;
 
 import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
 
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Properties;
-
 /**
  * @version $Rev$ $Date$
  */
-public class WSS4JInInterceptorFactory {
-
-    private Properties properties;
-
-    public Properties getProperties() {
-        return properties;
-    }
-
-    public void setProperties(final Properties properties) {
-        this.properties = properties;
-    }
-
+public class WSS4JInInterceptorFactory extends WSS4JInterceptorFactoryBase {
     public WSS4JInInterceptor create() {
-        final Map<String, Object> map = new HashMap<String, Object>();
-        for (final Map.Entry<Object, Object> entry : properties.entrySet()) {
-            map.put(entry.getKey().toString(), entry.getValue());
-        }
-        properties.clear();
-        return new WSS4JInInterceptor(map);
+        return new WSS4JInInterceptor(getAndDestroyMap());
     }
 }

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInterceptorFactoryBase.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInterceptorFactoryBase.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInterceptorFactoryBase.java
new file mode 100644
index 0000000..4b7be87
--- /dev/null
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JInterceptorFactoryBase.java
@@ -0,0 +1,56 @@
+/*
+ * 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.openejb.server.cxf.config;
+
+import org.apache.xbean.recipe.ExecutionContext;
+import org.apache.xbean.recipe.ObjectRecipe;
+import org.apache.xbean.recipe.Recipe;
+import org.apache.xbean.recipe.RecipeHelper;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WSS4JInterceptorFactoryBase {
+
+    private Properties properties;
+
+    public void setProperties(Properties properties) {
+        this.properties = properties;
+    }
+
+    protected Map<String, Object> getAndDestroyMap() {
+        final Map<String, Object> map = new HashMap<String, Object>();
+        for (Map.Entry<Object, Object> entry : properties.entrySet()) {
+            map.put(entry.getKey().toString(), entry.getValue());
+        }
+
+        // avoid warnings
+        final Recipe recipe = ExecutionContext.getContext().getStack().getLast();
+        if (ObjectRecipe.class.isInstance(recipe)) {
+            final ObjectRecipe or = ObjectRecipe.class.cast(recipe);
+            if (or.getUnsetProperties() != null) {
+                or.getUnsetProperties().clear();
+            }
+        }
+
+        return map;
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JOutInterceptorFactory.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JOutInterceptorFactory.java b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JOutInterceptorFactory.java
new file mode 100644
index 0000000..6728ab6
--- /dev/null
+++ b/server/openejb-cxf/src/main/java/org/apache/openejb/server/cxf/config/WSS4JOutInterceptorFactory.java
@@ -0,0 +1,28 @@
+/*
+ * 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.openejb.server.cxf.config;
+
+import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class WSS4JOutInterceptorFactory extends WSS4JInterceptorFactoryBase {
+    public WSS4JOutInterceptor create() {
+        return new WSS4JOutInterceptor(getAndDestroyMap());
+    }
+}

http://git-wip-us.apache.org/repos/asf/tomee/blob/92e2c562/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
----------------------------------------------------------------------
diff --git a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
index 13c6088..c4f1606 100644
--- a/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
+++ b/server/openejb-cxf/src/test/java/org/apache/openejb/server/cxf/WebServiceInjectionTest.java
@@ -17,14 +17,18 @@
 package org.apache.openejb.server.cxf;
 
 import org.apache.cxf.endpoint.Client;
-import org.apache.cxf.feature.LoggingFeature;
 import org.apache.cxf.frontend.ClientProxy;
+import org.apache.cxf.interceptor.Interceptor;
 import org.apache.cxf.interceptor.LoggingOutInterceptor;
+import org.apache.cxf.message.Message;
+import org.apache.cxf.ws.security.wss4j.WSS4JInInterceptor;
+import org.apache.cxf.ws.security.wss4j.WSS4JOutInterceptor;
+import org.apache.openejb.config.sys.MapFactory;
 import org.apache.openejb.jee.WebApp;
 import org.apache.openejb.junit.ApplicationComposer;
+import org.apache.openejb.server.cxf.config.WSS4JInInterceptorFactory;
 import org.apache.openejb.testing.ApplicationConfiguration;
 import org.apache.openejb.testing.Classes;
-import org.apache.openejb.testing.Configuration;
 import org.apache.openejb.testing.EnableServices;
 import org.apache.openejb.testing.Module;
 import org.apache.openejb.testng.PropertiesBuilder;
@@ -34,7 +38,7 @@ import org.junit.runner.RunWith;
 import javax.ejb.Singleton;
 import javax.jws.WebService;
 import javax.xml.ws.WebServiceRef;
-
+import java.util.Iterator;
 import java.util.Properties;
 
 import static org.junit.Assert.assertEquals;
@@ -58,8 +62,16 @@ public class WebServiceInjectionTest {
         // assertEquals("ok", api.test()); // local call so skip it but check config which is actually the only interesting thing
         final Client client = ClientProxy.getClient(api);
         assertNotNull(client);
-        assertEquals(1, client.getOutInterceptors().size());
-        assertTrue(LoggingOutInterceptor.class.isInstance(client.getOutInterceptors().iterator().next()));
+        assertEquals(2, client.getOutInterceptors().size());
+        assertEquals(1, client.getInInterceptors().size());
+        final Iterator<Interceptor<? extends Message>> iterator = client.getOutInterceptors().iterator();
+        assertTrue(LoggingOutInterceptor.class.isInstance(iterator.next()));
+        final Interceptor<? extends Message> wss4jout = iterator.next();
+        assertTrue(WSS4JOutInterceptor.class.isInstance(wss4jout));
+        assertEquals("d", WSS4JOutInterceptor.class.cast(wss4jout).getProperties().get("c"));
+        final Interceptor<? extends Message> wss4jin = client.getInInterceptors().iterator().next();
+        assertTrue(WSS4JInInterceptor.class.isInstance(wss4jin));
+        assertEquals("b", WSS4JInInterceptor.class.cast(wss4jin).getProperties().get("a"));
     }
 
     @ApplicationConfiguration
@@ -67,8 +79,20 @@ public class WebServiceInjectionTest {
         // return new PropertiesBuilder().p("cxf.jaxws.client.out-interceptors", LoggingOutInterceptor.class.getName()).build();
         // return new PropertiesBuilder().p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}MyWebservicePort.out-interceptors", LoggingOutInterceptor.class.getName()).build();
         return new PropertiesBuilder()
-                .p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}MyWebservicePort.out-interceptors", "loo")
+                .p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}MyWebservicePort.in-interceptors", "wss4jin")
+                .p("cxf.jaxws.client.{http://cxf.server.openejb.apache.org/}MyWebservicePort.out-interceptors", "loo,wss4jout")
+
                 .p("loo", "new://Service?class-name=" + LoggingOutInterceptor.class.getName())
+
+                .p("wss4jin", "new://Service?class-name=" + WSS4JInInterceptorFactory.class.getName() + "&factory-name=create")
+                .p("wss4jin.a", "b")
+
+                .p("wss4jout", "new://Service?class-name=" + WSS4JOutInterceptor.class.getName() + "&constructor=properties")
+                .p("wss4jout.properties", "$properties")
+
+                .p("properties", "new://Service?class-name=" + MapFactory.class.getName())
+                .p("properties.c", "d")
+
                 .build();
     }
 


[2/2] tomee git commit: missing test to get something useful

Posted by rm...@apache.org.
missing test to get something useful


Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/b72144c0
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/b72144c0
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/b72144c0

Branch: refs/heads/tomee-1.7.x
Commit: b72144c035b3c00cbcd1b835b7d7afa51a61b984
Parents: 92e2c56
Author: Romain Manni-Bucau <rm...@apache.org>
Authored: Fri Nov 28 12:31:00 2014 +0100
Committer: Romain Manni-Bucau <rm...@apache.org>
Committed: Fri Nov 28 12:31:00 2014 +0100

----------------------------------------------------------------------
 .../main/java/org/apache/openejb/assembler/classic/Assembler.java  | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/b72144c0/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
----------------------------------------------------------------------
diff --git a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
index 6b77b86..a0ebd92 100644
--- a/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
+++ b/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
@@ -956,7 +956,7 @@ public class Assembler extends AssemblerTool implements org.apache.openejb.spi.A
                 if (si.factoryMethod != null) {
                     query.put("factory-name", si.factoryMethod);
                 }
-                if (si.constructorArgs != null) {
+                if (si.constructorArgs != null && !si.constructorArgs.isEmpty()) {
                     query.put("constructor", Join.join(",", si.constructorArgs));
                 }
                 appInfo.properties.put(si.id, "new://Service?" + URISupport.createQueryString(query));