Author: alessio.soldano(a)jboss.com
Date: 2012-05-25 10:40:23 -0400 (Fri, 25 May 2012)
New Revision: 16317
Added:
stack/cxf/trunk/modules/server/src/test/
stack/cxf/trunk/modules/server/src/test/java/
stack/cxf/trunk/modules/server/src/test/java/org/
stack/cxf/trunk/modules/server/src/test/java/org/jboss/
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/cxf/
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/cxf/configuration/
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/cxf/configuration/BusHolderTest.java
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/Constants.java
stack/cxf/trunk/modules/server/pom.xml
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java
Log:
[JBWS-3504] Adding option for setting policy alternative selector on server side
Modified:
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/Constants.java
===================================================================
---
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/Constants.java 2012-05-25
09:36:59 UTC (rev 16316)
+++
stack/cxf/trunk/modules/client/src/main/java/org/jboss/wsf/stack/cxf/client/Constants.java 2012-05-25
14:40:23 UTC (rev 16317)
@@ -39,4 +39,5 @@
public static final String CXF_QUEUE_HIGH_WATER_MARK_PROP =
"highWaterMark";
public static final String CXF_QUEUE_LOW_WATER_MARK_PROP = "lowWaterMark";
public static final String CXF_QUEUE_DEQUEUE_TIMEOUT_PROP =
"dequeueTimeout";
+ public static final String CXF_POLICY_ALTERNATIVE_SELECTOR =
"cxf.policy.alternativeSelector";
}
Modified: stack/cxf/trunk/modules/server/pom.xml
===================================================================
--- stack/cxf/trunk/modules/server/pom.xml 2012-05-25 09:36:59 UTC (rev 16316)
+++ stack/cxf/trunk/modules/server/pom.xml 2012-05-25 14:40:23 UTC (rev 16317)
@@ -215,7 +215,7 @@
<artifactId>xercesImpl</artifactId>
</dependency>
- <!-- transitve dependencies -->
+ <!-- transitive dependencies -->
<dependency>
<groupId>com.sun.xml.bind</groupId>
<artifactId>jaxb-impl</artifactId>
@@ -253,6 +253,12 @@
<artifactId>juddi-service</artifactId>
<type>sar</type>
</dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
</dependencies>
<!-- Plugins -->
Modified:
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java
===================================================================
---
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java 2012-05-25
09:36:59 UTC (rev 16316)
+++
stack/cxf/trunk/modules/server/src/main/java/org/jboss/wsf/stack/cxf/configuration/BusHolder.java 2012-05-25
14:40:23 UTC (rev 16317)
@@ -36,6 +36,7 @@
import org.apache.cxf.workqueue.AutomaticWorkQueue;
import org.apache.cxf.workqueue.AutomaticWorkQueueImpl;
import org.apache.cxf.workqueue.WorkQueueManager;
+import org.apache.cxf.ws.policy.AlternativeSelector;
import org.apache.cxf.ws.policy.PolicyEngine;
import org.apache.cxf.ws.policy.selector.MaximalAlternativeSelector;
import org.jboss.ws.api.binding.BindingCustomization;
@@ -95,16 +96,14 @@
setSoapTransportFactory(bus, soapTransportFactory);
setResourceResolver(bus, resolver);
- //set MaximalAlternativeSelector on server side [JBWS-3149]
+ Map<String, String> props = getJBossWebservicesMetaDataProperties(dep);
+
if (bus.getExtension(PolicyEngine.class) != null)
{
- bus.getExtension(PolicyEngine.class).setAlternativeSelector(new
MaximalAlternativeSelector());
+
bus.getExtension(PolicyEngine.class).setAlternativeSelector(getAlternativeSelector(props));
}
- if (dep != null)
- {
- setAdditionalWorkQueues(bus,
dep.getAttachment(JBossWebservicesMetaData.class));
- }
+ setAdditionalWorkQueues(bus, props);
}
@@ -172,36 +171,60 @@
* @param bus
* @param wsmd
*/
- protected static void setAdditionalWorkQueues(Bus bus, JBossWebservicesMetaData wsmd)
+ protected static void setAdditionalWorkQueues(Bus bus, Map<String, String>
props)
{
- if (wsmd != null) {
- Map<String, String> props = wsmd.getProperties();
- if (props != null && !props.isEmpty()) {
- Map<String, Map<String, String>> queuesMap = new
HashMap<String, Map<String,String>>();
- for (final String k : props.keySet()) {
- if (k.startsWith(Constants.CXF_QUEUE_PREFIX)) {
- String sk = k.substring(Constants.CXF_QUEUE_PREFIX.length());
- int i = sk.indexOf(".");
- if (i > 0) {
- String queueName = sk.substring(0, i);
- String queueProp = sk.substring(i+1);
- Map<String, String> m = queuesMap.get(queueName);
- if (m == null) {
- m = new HashMap<String, String>();
- queuesMap.put(queueName, m);
- }
- m.put(queueProp, props.get(k));
+ if (props != null && !props.isEmpty()) {
+ Map<String, Map<String, String>> queuesMap = new HashMap<String,
Map<String,String>>();
+ for (final String k : props.keySet()) {
+ if (k.startsWith(Constants.CXF_QUEUE_PREFIX)) {
+ String sk = k.substring(Constants.CXF_QUEUE_PREFIX.length());
+ int i = sk.indexOf(".");
+ if (i > 0) {
+ String queueName = sk.substring(0, i);
+ String queueProp = sk.substring(i+1);
+ Map<String, String> m = queuesMap.get(queueName);
+ if (m == null) {
+ m = new HashMap<String, String>();
+ queuesMap.put(queueName, m);
}
+ m.put(queueProp, props.get(k));
}
}
- WorkQueueManager mgr = bus.getExtension(WorkQueueManager.class);
- for (String queueName : queuesMap.keySet()) {
- AutomaticWorkQueue q = createWorkQueue(queueName,
queuesMap.get(queueName));
- mgr.addNamedWorkQueue(queueName, q);
+ }
+ WorkQueueManager mgr = bus.getExtension(WorkQueueManager.class);
+ for (String queueName : queuesMap.keySet()) {
+ AutomaticWorkQueue q = createWorkQueue(queueName, queuesMap.get(queueName));
+ mgr.addNamedWorkQueue(queueName, q);
+ }
+ }
+ }
+
+ private static AlternativeSelector getAlternativeSelector(Map<String, String>
props) {
+ //default to MaximalAlternativeSelector on server side [JBWS-3149]
+ AlternativeSelector selector = new MaximalAlternativeSelector();
+ if (props != null && !props.isEmpty()) {
+ String className = props.get(Constants.CXF_POLICY_ALTERNATIVE_SELECTOR);
+ if (className != null) {
+ try {
+ Class<?> clazz = Class.forName(className);
+ selector = (AlternativeSelector)clazz.newInstance();
+ } catch (Exception e) {
+
}
}
}
+ return selector;
}
+
+ private static Map<String, String>
getJBossWebservicesMetaDataProperties(Deployment dep) {
+ if (dep != null) {
+ JBossWebservicesMetaData wsmd =
dep.getAttachment(JBossWebservicesMetaData.class);
+ if (wsmd != null) {
+ return wsmd.getProperties();
+ }
+ }
+ return null;
+ }
private static AutomaticWorkQueue createWorkQueue(String name, Map<String,
String> props) {
int mqs = parseInt(props.get(Constants.CXF_QUEUE_MAX_QUEUE_SIZE_PROP), 256);
Added:
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/cxf/configuration/BusHolderTest.java
===================================================================
---
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/cxf/configuration/BusHolderTest.java
(rev 0)
+++
stack/cxf/trunk/modules/server/src/test/java/org/jboss/wsf/stack/cxf/configuration/BusHolderTest.java 2012-05-25
14:40:23 UTC (rev 16317)
@@ -0,0 +1,150 @@
+/*
+ * JBoss, Home of Professional Open Source.
+ * Copyright 2012, Red Hat Middleware LLC, and individual contributors
+ * as indicated by the @author tags. See the copyright.txt file in the
+ * distribution for a full listing of individual contributors.
+ *
+ * This is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2.1 of
+ * the License, or (at your option) any later version.
+ *
+ * This software is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this software; if not, write to the Free
+ * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+ * 02110-1301 USA, or see the FSF site:
http://www.fsf.org.
+ */
+package org.jboss.wsf.stack.cxf.configuration;
+
+import junit.framework.TestCase;
+
+import org.apache.cxf.ws.policy.PolicyEngine;
+import org.apache.cxf.ws.policy.selector.FirstAlternativeSelector;
+import org.apache.cxf.ws.policy.selector.MaximalAlternativeSelector;
+import org.jboss.wsf.spi.deployment.AbstractExtensible;
+import org.jboss.wsf.spi.deployment.Deployment;
+import org.jboss.wsf.spi.deployment.DeploymentState;
+import org.jboss.wsf.spi.deployment.DeploymentType;
+import org.jboss.wsf.spi.deployment.Service;
+import org.jboss.wsf.spi.metadata.webservices.JBossWebservicesMetaData;
+import org.jboss.wsf.stack.cxf.client.Constants;
+import org.jboss.wsf.stack.cxf.metadata.services.DDBeans;
+
+
+/**
+ * A test case for BusHolder
+ *
+ * @author alessio.soldano(a)jboss.com
+ * @since 24-Feb-2011
+ *
+ */
+public class BusHolderTest extends TestCase
+{
+ public void testFirstAlternativeSelector()
+ {
+ final String alternative = FirstAlternativeSelector.class.getName();
+ assertEquals(alternative, setupPropertyAndGetAlternativeSelector(alternative));
+ }
+
+ public void testInvalidAlternativeSelector()
+ {
+ assertEquals(MaximalAlternativeSelector.class.getName(),
setupPropertyAndGetAlternativeSelector("org.jboss.ws.MyInvalidAlternative"));
+ }
+
+ public void testDefaultAlternativeSelector()
+ {
+ assertEquals(MaximalAlternativeSelector.class.getName(),
setupPropertyAndGetAlternativeSelector(null));
+ }
+
+ private static String setupPropertyAndGetAlternativeSelector(String alternative) {
+ Deployment dep = new TestDeployment();
+ if (alternative != null) {
+ JBossWebservicesMetaData wsmd = new JBossWebservicesMetaData(null);
+ wsmd.setProperty(Constants.CXF_POLICY_ALTERNATIVE_SELECTOR, alternative);
+ dep.addAttachment(JBossWebservicesMetaData.class, wsmd);
+ }
+ BusHolder holder = new NonSpringBusHolder(new DDBeans());
+ try {
+ holder.configure(null, null, null, dep);
+ return
holder.getBus().getExtension(PolicyEngine.class).getAlternativeSelector().getClass().getName();
+ } finally {
+ holder.close();
+ }
+ }
+
+ private static class TestDeployment extends AbstractExtensible implements Deployment
{
+
+ @Override
+ public String getSimpleName()
+ {
+ return null;
+ }
+
+ @Override
+ public void setSimpleName(String name)
+ {
+ }
+
+ @Override
+ public ClassLoader getInitialClassLoader()
+ {
+ return null;
+ }
+
+ @Override
+ public void setInitialClassLoader(ClassLoader loader)
+ {
+ }
+
+ @Override
+ public ClassLoader getRuntimeClassLoader()
+ {
+ return null;
+ }
+
+ @Override
+ public void setRuntimeClassLoader(ClassLoader loader)
+ {
+ }
+
+ @Override
+ public DeploymentType getType()
+ {
+ return null;
+ }
+
+ @Override
+ public void setType(DeploymentType type)
+ {
+ }
+
+ @Override
+ public DeploymentState getState()
+ {
+ return null;
+ }
+
+ @Override
+ public void setState(DeploymentState type)
+ {
+ }
+
+ @Override
+ public Service getService()
+ {
+ return null;
+ }
+
+ @Override
+ public void setService(Service service)
+ {
+ }
+
+ }
+
+}