[DOSGI-245] Split cxf provider into rs and ws provider
Project: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/repo Commit: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/commit/f0dea506 Tree: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/tree/f0dea506 Diff: http://git-wip-us.apache.org/repos/asf/cxf-dosgi/diff/f0dea506 Branch: refs/heads/master Commit: f0dea50617f70a08d5fe273f5468fb59b99d7455 Parents: ccf5a7a Author: Christian Schneider <[email protected]> Authored: Tue Jul 5 17:27:02 2016 +0200 Committer: Christian Schneider <[email protected]> Committed: Tue Jul 5 17:27:02 2016 +0200 ---------------------------------------------------------------------- common/pom.xml | 7 +- .../cxf/dosgi/common/intent/IntentManager.java | 3 - .../dosgi/common/intent/IntentManagerImpl.java | 141 ++---- .../cxf/dosgi/common/intent/IntentMap.java | 62 --- .../dosgi/common/qos/IntentManagerImplTest.java | 281 ------------ .../cxf/dosgi/common/qos/IntentMapTest.java | 42 -- cxf-dsw/bnd.bnd | 3 - cxf-dsw/pom.xml | 83 ---- .../dsw/handlers/CXFDistributionProvider.java | 222 ---------- .../AbstractPojoConfigurationTypeHandler.java | 151 ------- .../dsw/handlers/pojo/InterceptorSupport.java | 63 --- .../pojo/PojoConfigurationTypeHandler.java | 174 -------- .../pojo/WsdlConfigurationTypeHandler.java | 162 ------- .../dosgi/dsw/handlers/pojo/WsdlSupport.java | 83 ---- .../rest/JaxRSPojoConfigurationTypeHandler.java | 263 ----------- .../cxf/dosgi/dsw/handlers/rest/JaxRSUtils.java | 122 ----- .../apache/cxf/dosgi/dsw/osgi/Constants.java | 84 ---- .../handlers/CXFDistributionProviderTest.java | 109 ----- .../WsdlConfigurationTypeHandlerTest.java | 67 --- .../dsw/handlers/jaxws/MyJaxWsEchoService.java | 26 -- .../handlers/jaxws/MyJaxWsEchoServiceImpl.java | 27 -- .../pojo/PojoConfigurationTypeHandlerTest.java | 443 ------------------- .../dosgi/dsw/handlers/rest/JaxRSUtilsTest.java | 195 -------- .../handlers/simple/MySimpleEchoService.java | 23 - .../simple/MySimpleEchoServiceImpl.java | 27 -- decorator/pom.xml | 2 +- distribution/features/pom.xml | 2 +- .../features/src/main/resources/features.xml | 23 +- distribution/multi-bundle/pom.xml | 5 +- .../src/main/xsl/filter_features.xslt | 3 + distribution/pom.xml | 4 +- distribution/sources/pom.xml | 4 +- parent/pom.xml | 6 +- pom.xml | 5 +- provider-rs/bnd.bnd | 3 + provider-rs/pom.xml | 61 +++ .../dosgi/dsw/handlers/rest/RsConstants.java | 36 ++ .../cxf/dosgi/dsw/handlers/rest/RsProvider.java | 229 ++++++++++ provider-ws/bnd.bnd | 3 + provider-ws/pom.xml | 61 +++ .../cxf/dosgi/dsw/handlers/ws/WsConstants.java | 46 ++ .../cxf/dosgi/dsw/handlers/ws/WsProvider.java | 244 ++++++++++ .../cxf/dosgi/dsw/handlers/ws/WsdlSupport.java | 82 ++++ .../dsw/handlers/jaxws/MyJaxWsEchoService.java | 26 ++ .../handlers/jaxws/MyJaxWsEchoServiceImpl.java | 27 ++ .../handlers/simple/MySimpleEchoService.java | 23 + .../simple/MySimpleEchoServiceImpl.java | 27 ++ .../ws/PojoConfigurationTypeHandlerTest.java | 415 +++++++++++++++++ samples/ds/client/pom.xml | 2 +- samples/ds/impl/pom.xml | 2 +- samples/ds/interface/pom.xml | 2 +- samples/ds/pom.xml | 4 +- samples/greeter/client/pom.xml | 2 +- samples/greeter/impl/pom.xml | 2 +- samples/greeter/interface/pom.xml | 2 +- .../dosgi/samples/greeter/GreeterService.java | 1 - samples/greeter/pom.xml | 2 +- samples/greeter_rest/client/pom.xml | 2 +- samples/greeter_rest/impl/pom.xml | 2 +- samples/greeter_rest/interface/pom.xml | 2 +- samples/greeter_rest/pom.xml | 2 +- samples/pom.xml | 2 +- samples/security_filter/pom.xml | 2 +- systests2/multi-bundle/pom.xml | 2 +- .../systests2/multi/AbstractDosgiTest.java | 7 +- .../dosgi/systests2/multi/TestCustomIntent.java | 5 +- .../systests2/multi/TestExportRestService.java | 3 +- .../systests2/multi/TestExportService.java | 1 + .../multi/rest/TranslateActivator.java | 1 - systests2/pom.xml | 4 +- 70 files changed, 1386 insertions(+), 2868 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/common/pom.xml ---------------------------------------------------------------------- diff --git a/common/pom.xml b/common/pom.xml index 952f2c1..8e7e136 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -27,7 +27,7 @@ <parent> <groupId>org.apache.cxf.dosgi</groupId> <artifactId>cxf-dosgi-ri-parent</artifactId> - <version>1.9-SNAPSHOT</version> + <version>2.0-SNAPSHOT</version> <relativePath>../parent/pom.xml</relativePath> </parent> @@ -48,11 +48,6 @@ <version>${cxf.version}</version> </dependency> <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-frontend-jaxws</artifactId> - <version>${cxf.version}</version> - </dependency> - <dependency> <groupId>org.apache.geronimo.specs</groupId> <artifactId>geronimo-servlet_${servlet.version}_spec</artifactId> <version>1.0</version> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManager.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManager.java b/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManager.java index 32eedab..baa0b0c 100644 --- a/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManager.java +++ b/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManager.java @@ -25,9 +25,6 @@ import org.apache.cxf.endpoint.AbstractEndpointFactory; import org.apache.cxf.feature.Feature; public interface IntentManager { - @Deprecated - String EXPORTED_INTENTS_OLD = "osgi.remote.requires.intents"; - String INTENT_NAME_PROP = "org.apache.cxf.dosgi.IntentName"; String[] applyIntents(List<Feature> features, AbstractEndpointFactory factory, Map<String, Object> props); http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManagerImpl.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManagerImpl.java b/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManagerImpl.java index 3bbfaab..4cb23fd 100644 --- a/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManagerImpl.java +++ b/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentManagerImpl.java @@ -23,7 +23,6 @@ import static org.osgi.service.component.annotations.ReferenceCardinality.MULTIP import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -32,14 +31,10 @@ import java.util.Set; import org.apache.aries.rsa.spi.IntentUnsatisfiedException; import org.apache.cxf.binding.BindingConfiguration; -import org.apache.cxf.binding.soap.Soap11; -import org.apache.cxf.binding.soap.Soap12; -import org.apache.cxf.binding.soap.SoapBindingConfiguration; -import org.apache.cxf.binding.soap.SoapVersion; +import org.apache.cxf.databinding.DataBinding; import org.apache.cxf.dosgi.common.util.OsgiUtils; import org.apache.cxf.endpoint.AbstractEndpointFactory; import org.apache.cxf.feature.Feature; -import org.apache.cxf.feature.LoggingFeature; import org.osgi.service.component.annotations.Component; import org.osgi.service.component.annotations.Reference; import org.osgi.service.component.annotations.ReferencePolicy; @@ -52,39 +47,13 @@ import org.slf4j.LoggerFactory; public class IntentManagerImpl implements IntentManager { static final Logger LOG = LoggerFactory.getLogger(IntentManagerImpl.class); - private static final String PROVIDED_INTENT_VALUE = "PROVIDED"; private static final int DEFAULT_INTENT_TIMEOUT = 30000; - private final IntentMap intentMap; + private final Map<String, Object> intentMap; private final long maxIntentWaitTime = DEFAULT_INTENT_TIMEOUT; public IntentManagerImpl() { - this(new IntentMap(create())); - } - - public IntentManagerImpl(IntentMap intentMap) { - this.intentMap = intentMap; - } - - public static Map<String, Object> create() { - Map<String, Object> defaults = new HashMap<String, Object>(); - defaults.put("logging", getLoggingFeature()); - Object soap11 = getSoapBinding(Soap11.getInstance()); - defaults.put("SOAP", soap11); - defaults.put("SOAP.1_1", soap11); - defaults.put("SOAP.1_2", getSoapBinding(Soap12.getInstance())); - defaults.put("HTTP", "PROVIDED"); - return defaults; - } - - private static Object getLoggingFeature() { - return new LoggingFeature(); - } - - private static Object getSoapBinding(SoapVersion soapVersion) { - SoapBindingConfiguration soapBindingConfig = new SoapBindingConfiguration(); - soapBindingConfig.setVersion(soapVersion); - return soapBindingConfig; + this.intentMap = new HashMap<String, Object>(); } @Reference // @@ -94,56 +63,46 @@ public class IntentManagerImpl implements IntentManager { target = "(" + IntentManager.INTENT_NAME_PROP + "=*)", // policyOption = ReferencePolicyOption.GREEDY ) - public void addIntent(Object intent, Map<String, ?> props) { + public synchronized void addIntent(Object intent, Map<String, ?> props) { String intentName = (String)props.get(INTENT_NAME_PROP); LOG.info("Adding custom intent " + intentName); intentMap.put(intentName, intent); } - public void removeIntent(Object intent, Map<String, ?> props) { + public synchronized void removeIntent(Object intent, Map<String, ?> props) { String intentName = (String)props.get(INTENT_NAME_PROP); intentMap.remove(intentName); } - public String[] applyIntents(List<Feature> features, AbstractEndpointFactory factory, + public synchronized String[] applyIntents(List<Feature> features, AbstractEndpointFactory factory, Map<String, Object> props) throws IntentUnsatisfiedException { + Set<String> requiredIntents = IntentManagerImpl.getRequestedIntents(props); + List<String> missingIntents = getMissingIntents(requiredIntents); + if (!missingIntents.isEmpty()) { + throw new IntentUnsatisfiedException(missingIntents.iterator().next()); + } Set<String> requestedIntents = IntentManagerImpl.getRequestedIntents(props); Set<String> appliedIntents = new HashSet<String>(); - appliedIntents.addAll(reverseLookup(intentMap, PROVIDED_INTENT_VALUE)); - boolean bindingApplied = false; for (String intentName : requestedIntents) { - bindingApplied |= processIntent(features, factory, intentName, intentMap.get(intentName)); + processIntent(features, factory, intentName, intentMap.get(intentName)); appliedIntents.add(intentName); } - if (!bindingApplied) { - String defaultBindingName = "SOAP"; - processIntent(features, factory, defaultBindingName, intentMap.get(defaultBindingName)); - appliedIntents.add(defaultBindingName); - } - appliedIntents.addAll(addSynonymIntents(appliedIntents, intentMap)); return appliedIntents.toArray(new String[appliedIntents.size()]); } private static Set<String> getRequestedIntents(Map<String, Object> sd) { + Set<String> allIntents = new HashSet<String>(); Collection<String> intents = OsgiUtils .getMultiValueProperty(sd.get(RemoteConstants.SERVICE_EXPORTED_INTENTS)); - Collection<String> intents2 = OsgiUtils - .getMultiValueProperty(sd.get(RemoteConstants.SERVICE_EXPORTED_INTENTS_EXTRA)); - @SuppressWarnings("deprecation") - Collection<String> oldIntents = OsgiUtils - .getMultiValueProperty(sd.get(IntentManager.EXPORTED_INTENTS_OLD)); - Set<String> allIntents = new HashSet<String>(); if (intents != null) { allIntents.addAll(parseIntents(intents)); } + Collection<String> intents2 = OsgiUtils + .getMultiValueProperty(sd.get(RemoteConstants.SERVICE_EXPORTED_INTENTS_EXTRA)); if (intents2 != null) { allIntents.addAll(parseIntents(intents2)); } - if (oldIntents != null) { - allIntents.addAll(parseIntents(oldIntents)); - } - return allIntents; } @@ -158,10 +117,11 @@ public class IntentManagerImpl implements IntentManager { private boolean processIntent(List<Feature> features, AbstractEndpointFactory factory, String intentName, Object intent) throws IntentUnsatisfiedException { - if (intent instanceof String) { - if (PROVIDED_INTENT_VALUE.equalsIgnoreCase((String)intent)) { - return false; - } + if (intent instanceof DataBinding) { + DataBinding dataBinding = (DataBinding) intent; + LOG.info("Applying intent: " + intentName + " via data binding: " + dataBinding); + factory.setDataBinding(dataBinding); + return false; } else if (intent instanceof BindingConfiguration) { BindingConfiguration bindingCfg = (BindingConfiguration)intent; LOG.info("Applying intent: " + intentName + " via binding config: " + bindingCfg); @@ -176,58 +136,21 @@ public class IntentManagerImpl implements IntentManager { LOG.info("No mapping for intent: " + intentName); throw new IntentUnsatisfiedException(intentName); } - return false; } - private static Collection<String> addSynonymIntents(Collection<String> appliedIntents, IntentMap map) { - // E.g. SOAP and SOAP.1_1 are synonyms - List<Object> values = new ArrayList<Object>(); - for (String key : appliedIntents) { - values.add(map.get(key)); - } - return reverseLookup(map, values); - } - - private static Collection<String> reverseLookup(IntentMap im, Object obj) { - return reverseLookup(im, Collections.singleton(obj)); - } - - /** - * Retrieves all keys whose mapped values are found in the given collection. - * - * @param im an intent map - * @param values a collection of potential values - * @return all keys whose mapped values are found in the given collection - */ - private static Collection<String> reverseLookup(IntentMap im, Collection<?> values) { - Set<String> intentsFound = new HashSet<String>(); - for (Map.Entry<String, Object> entry : im.entrySet()) { - if (values.contains(entry.getValue())) { - intentsFound.add(entry.getKey()); - } - } - return intentsFound; - } - - public void assertAllIntentsSupported(Map<String, Object> serviceProperties) { + public synchronized void assertAllIntentsSupported(Map<String, Object> serviceProperties) { long endTime = System.currentTimeMillis() + maxIntentWaitTime; Set<String> requiredIntents = IntentManagerImpl.getRequestedIntents(serviceProperties); - List<String> unsupportedIntents = new ArrayList<String>(); + + List<String> unsupportedIntents; do { - unsupportedIntents.clear(); - for (String ri : requiredIntents) { - if (!intentMap.containsKey(ri)) { - unsupportedIntents.add(ri); - } - } + unsupportedIntents = getMissingIntents(requiredIntents); long remainingSeconds = (endTime - System.currentTimeMillis()) / 1000; if (!unsupportedIntents.isEmpty() && remainingSeconds > 0) { - LOG.debug("Waiting for custom intents " + unsupportedIntents + " timeout in " + LOG.info("Waiting for custom intents " + unsupportedIntents + " timeout in " + remainingSeconds); try { - synchronized (intentMap) { - intentMap.wait(1000); - } + wait(1000); } catch (InterruptedException e) { LOG.warn(e.getMessage(), e); } @@ -239,4 +162,16 @@ public class IntentManagerImpl implements IntentManager { + "intents are not supported by this RSA: " + unsupportedIntents); } } + + private synchronized List<String> getMissingIntents(Set<String> requiredIntents) { + List<String> unsupportedIntents = new ArrayList<String>(); + unsupportedIntents.clear(); + for (String ri : requiredIntents) { + if (!intentMap.containsKey(ri)) { + unsupportedIntents.add(ri); + } + } + return unsupportedIntents; + } + } http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentMap.java ---------------------------------------------------------------------- diff --git a/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentMap.java b/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentMap.java deleted file mode 100644 index 9539c95..0000000 --- a/common/src/main/java/org/apache/cxf/dosgi/common/intent/IntentMap.java +++ /dev/null @@ -1,62 +0,0 @@ -/** - * 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.cxf.dosgi.common.intent; - -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ConcurrentHashMap; - -/** - * Maps intent names to intent objects - * An intent object can be a Feature, a BindingConfiguration or a String - * - * Also supports a default intent map. Custom intents can override the defaults - */ -public class IntentMap extends ConcurrentHashMap<String, Object> { - - private static final long serialVersionUID = 2606460607920520767L; - private Map<String, Object> defaultMap; - - public IntentMap() { - this(new HashMap<String, Object>()); - } - - public IntentMap(Map<String, Object> defaultMap) { - this.defaultMap = defaultMap; - putAll(defaultMap); - } - - @Override - public Object put(String key, Object value) { - Object result = super.put(key, value); - synchronized (this) { - notifyAll(); - } - return result; - } - - @Override - public Object remove(Object key) { - Object old = super.remove(key); - if (defaultMap.containsKey(key)) { - put((String)key, defaultMap.get(key)); - } - return old; - } -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentManagerImplTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentManagerImplTest.java b/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentManagerImplTest.java deleted file mode 100644 index 15fe952..0000000 --- a/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentManagerImplTest.java +++ /dev/null @@ -1,281 +0,0 @@ -/** - * 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.cxf.dosgi.common.qos; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.aries.rsa.spi.IntentUnsatisfiedException; -import org.apache.cxf.binding.BindingConfiguration; -import org.apache.cxf.dosgi.common.intent.IntentManager; -import org.apache.cxf.dosgi.common.intent.IntentManagerImpl; -import org.apache.cxf.dosgi.common.intent.IntentMap; -import org.apache.cxf.endpoint.AbstractEndpointFactory; -import org.apache.cxf.feature.AbstractFeature; -import org.apache.cxf.feature.Feature; -import org.easymock.EasyMock; -import org.easymock.IMocksControl; -import org.junit.Assert; -import org.junit.Test; - -public class IntentManagerImplTest extends Assert { - - @Test - public void testIntents() throws Exception { - Map<String, Object> intents = new HashMap<String, Object>(); - intents.put("A", new TestFeature("A")); - intents.put("SOAP", new TestFeature("SOAP")); - final IntentMap intentMap = new IntentMap(intents); - - IMocksControl control = EasyMock.createNiceControl(); - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "A"); - - List<String> effectiveIntents = Arrays.asList(intentManager.applyIntents(features, factory, props)); - assertEquals(Arrays.asList("A", "SOAP"), effectiveIntents); - } - - @Test - public void testMultiIntents() { - final IntentMap intentMap = new IntentMap(IntentManagerImpl.create()); - intentMap.put("confidentiality.message", new TestFeature("confidentiality.message")); - intentMap.put("transactionality", new TestFeature("transactionality")); - - IMocksControl control = EasyMock.createNiceControl(); - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "transactionality confidentiality.message"); - - List<String> effectiveIntents = Arrays.asList(intentManager.applyIntents(features, factory, props)); - assertTrue(effectiveIntents.contains("transactionality")); - assertTrue(effectiveIntents.contains("confidentiality.message")); - } - - @Test - public void testFailedIntent() { - Map<String, Object> intents = new HashMap<String, Object>(); - intents.put("A", new TestFeature("A")); - final IntentMap intentMap = new IntentMap(intents); - - IMocksControl control = EasyMock.createNiceControl(); - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "A B"); - // ServiceEndpointDescription sd = - // new ServiceEndpointDescriptionImpl(Arrays.asList(String.class.getName()), props); - - try { - intentManager.applyIntents(features, factory, props); - Assert.fail("applyIntents() should have thrown an exception as there was an unsatisfiable intent"); - } catch (IntentUnsatisfiedException iue) { - assertEquals("B", iue.getIntent()); - } - } - - @Test - public void testInferIntents() { - Map<String, Object> intents = new HashMap<String, Object>(); - intents.put("SOAP", new TestFeature("SOAP")); - intents.put("Prov", "PROVIDED"); - AbstractFeature feat1 = new TestFeature("feat1"); - intents.put("A", feat1); - intents.put("A_alt", feat1); - intents.put("B", new TestFeature("B")); - final IntentMap intentMap = new IntentMap(intents); - - IMocksControl control = EasyMock.createNiceControl(); - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "A"); - // ServiceEndpointDescription sd = - // new ServiceEndpointDescriptionImpl(Arrays.asList(String.class.getName()), props); - - List<String> effectiveIntents = Arrays.asList(intentManager.applyIntents(features, factory, props)); - assertEquals(4, effectiveIntents.size()); - assertTrue(effectiveIntents.contains("Prov")); - assertTrue(effectiveIntents.contains("A")); - assertTrue(effectiveIntents.contains("A_alt")); - } - - @Test - public void testDefaultBindingIntent() { - IMocksControl control = EasyMock.createNiceControl(); - - Map<String, Object> intents = new HashMap<String, Object>(); - BindingConfiguration feat1 = control.createMock(BindingConfiguration.class); - intents.put("A", new AbstractFeature() { - }); - intents.put("SOAP", feat1); - intents.put("SOAP.1_1", feat1); - intents.put("SOAP.1_2", control.createMock(BindingConfiguration.class)); - final IntentMap intentMap = new IntentMap(intents); - - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "A"); - // ServiceEndpointDescription sd = - // new ServiceEndpointDescriptionImpl(Arrays.asList(String.class.getName()), props); - - List<String> effectiveIntents = Arrays.asList(intentManager.applyIntents(features, factory, props)); - assertEquals(3, effectiveIntents.size()); - assertTrue(effectiveIntents.contains("A")); - assertTrue(effectiveIntents.contains("SOAP")); - assertTrue(effectiveIntents.contains("SOAP.1_1")); - } - - @Test - public void testExplicitBindingIntent() { - IMocksControl control = EasyMock.createNiceControl(); - - Map<String, Object> intents = new HashMap<String, Object>(); - BindingConfiguration feat1 = control.createMock(BindingConfiguration.class); - intents.put("A", new AbstractFeature() { - }); - intents.put("SOAP", feat1); - intents.put("SOAP.1_1", feat1); - intents.put("SOAP.1_2", control.createMock(BindingConfiguration.class)); - final IntentMap intentMap = new IntentMap(intents); - - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "A SOAP.1_2"); - // ServiceEndpointDescription sd = - // new ServiceEndpointDescriptionImpl(Arrays.asList(String.class.getName()), props); - - List<String> effectiveIntents = Arrays.asList(intentManager.applyIntents(features, factory, props)); - assertEquals(2, effectiveIntents.size()); - assertTrue(effectiveIntents.contains("A")); - assertTrue(effectiveIntents.contains("SOAP.1_2")); - } - - public void testInheritMasterIntentMapDefault() { - List<String> features = runTestInheritMasterIntentMap("A B"); - - assertEquals(2, features.size()); - assertTrue(features.contains("appFeatureA")); - assertTrue(features.contains("masterFeatureB")); - } - - public void testInheritMasterIntentMap() { - List<String> features = runTestInheritMasterIntentMap("A B"); - - assertEquals(2, features.size()); - assertTrue(features.contains("appFeatureA")); - assertTrue(features.contains("masterFeatureB")); - } - - private List<String> runTestInheritMasterIntentMap(String requestedIntents) { - Map<String, Object> masterIntents = new HashMap<String, Object>(); - masterIntents.put("A", new TestFeature("masterFeatureA")); - masterIntents.put("B", new TestFeature("masterFeatureB")); - final IntentMap intentMap = new IntentMap(masterIntents); - intentMap.put("A", new TestFeature("appFeatureA")); - - IMocksControl control = EasyMock.createNiceControl(); - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", requestedIntents); - - IntentManagerImpl intentManager = new IntentManagerImpl(intentMap); - intentManager.applyIntents(features, factory, props); - - List<String> featureNames = new ArrayList<String>(); - for (Feature f : features) { - featureNames.add(f.toString()); - } - return featureNames; - } - - @Test - public void testProvidedIntents() { - Map<String, Object> masterIntents = new HashMap<String, Object>(); - masterIntents.put("SOAP", "SOAP"); - masterIntents.put("A", "Provided"); - masterIntents.put("B", "PROVIDED"); - final IntentMap intentMap = new IntentMap(masterIntents); - - IMocksControl control = EasyMock.createNiceControl(); - List<Feature> features = new ArrayList<Feature>(); - AbstractEndpointFactory factory = control.createMock(AbstractEndpointFactory.class); - control.replay(); - - Map<String, Object> props = new HashMap<String, Object>(); - props.put("osgi.remote.requires.intents", "B A"); - - IntentManager intentManager = new IntentManagerImpl(intentMap); - - Set<String> effectiveIntents = new HashSet<String>(Arrays.asList(intentManager.applyIntents(features, - factory, - props))); - Set<String> expectedIntents = new HashSet<String>(Arrays.asList(new String[] {"A", "B", "SOAP"})); - assertEquals(expectedIntents, effectiveIntents); - } - - private static final class TestFeature extends AbstractFeature { - - private final String name; - - private TestFeature(String n) { - name = n; - } - - @Override - public String toString() { - return name; - } - } -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentMapTest.java ---------------------------------------------------------------------- diff --git a/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentMapTest.java b/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentMapTest.java deleted file mode 100644 index 1bda059..0000000 --- a/common/src/test/java/org/apache/cxf/dosgi/common/qos/IntentMapTest.java +++ /dev/null @@ -1,42 +0,0 @@ -/** - * 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.cxf.dosgi.common.qos; - -import java.util.HashMap; -import java.util.Map; - -import org.apache.cxf.dosgi.common.intent.IntentMap; -import org.junit.Assert; -import org.junit.Test; - -public class IntentMapTest { - - @Test - public void inheritanceTest() { - Map<String, Object> defaultMap = new HashMap<String, Object>(); - defaultMap.put("key1", "defaultValue"); - IntentMap intentMap = new IntentMap(defaultMap); - Assert.assertEquals("defaultValue", intentMap.get("key1")); - intentMap.put("key1", "overridden"); - Assert.assertEquals("overridden", intentMap.get("key1")); - Object curValue = intentMap.remove("key1"); - Assert.assertEquals("overridden", curValue); - Assert.assertEquals("defaultValue", intentMap.get("key1")); - } -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/bnd.bnd ---------------------------------------------------------------------- diff --git a/cxf-dsw/bnd.bnd b/cxf-dsw/bnd.bnd deleted file mode 100644 index 99f067a..0000000 --- a/cxf-dsw/bnd.bnd +++ /dev/null @@ -1,3 +0,0 @@ -Import-Package: javax.servlet;version='[2,4)', javax.servlet.http;version='[2,4)', * - -Private-Package: org.apache.cxf.dosgi.dsw.* http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/pom.xml ---------------------------------------------------------------------- diff --git a/cxf-dsw/pom.xml b/cxf-dsw/pom.xml deleted file mode 100644 index d3f54aa..0000000 --- a/cxf-dsw/pom.xml +++ /dev/null @@ -1,83 +0,0 @@ -<?xml version='1.0' encoding='UTF-8' ?> -<!-- - 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. ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - - <modelVersion>4.0.0</modelVersion> - <artifactId>cxf-dosgi-ri-dsw-cxf</artifactId> - <packaging>bundle</packaging> - <name>CXF dOSGi Distribution provider</name> - - <parent> - <groupId>org.apache.cxf.dosgi</groupId> - <artifactId>cxf-dosgi-ri-parent</artifactId> - <version>1.9-SNAPSHOT</version> - <relativePath>../parent/pom.xml</relativePath> - </parent> - - <properties> - <topDirectoryLocation>..</topDirectoryLocation> - </properties> - - <dependencies> - <dependency> - <groupId>org.apache.cxf.dosgi</groupId> - <artifactId>cxf-dosgi-ri-common</artifactId> - <version>${project.version}</version> - </dependency> - - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-core</artifactId> - <version>${cxf.version}</version> - </dependency> - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-frontend-jaxws</artifactId> - <version>${cxf.version}</version> - </dependency> - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-frontend-jaxrs</artifactId> - <version>${cxf.version}</version> - </dependency> - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-rs-client</artifactId> - <version>${cxf.version}</version> - </dependency> - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-databinding-aegis</artifactId> - <version>${cxf.version}</version> - </dependency> - <dependency> - <groupId>org.apache.cxf</groupId> - <artifactId>cxf-rt-rs-extension-providers</artifactId> - <version>${cxf.version}</version> - </dependency> - - <dependency> - <groupId>org.apache.geronimo.specs</groupId> - <artifactId>geronimo-servlet_${servlet.version}_spec</artifactId> - <version>1.0</version> - </dependency> - - </dependencies> -</project> http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/CXFDistributionProvider.java ---------------------------------------------------------------------- diff --git a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/CXFDistributionProvider.java b/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/CXFDistributionProvider.java deleted file mode 100644 index 287c4f1..0000000 --- a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/CXFDistributionProvider.java +++ /dev/null @@ -1,222 +0,0 @@ -/** - * 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.cxf.dosgi.dsw.handlers; - -import static org.osgi.service.remoteserviceadmin.RemoteConstants.REMOTE_CONFIGS_SUPPORTED; -import static org.osgi.service.remoteserviceadmin.RemoteConstants.REMOTE_INTENTS_SUPPORTED; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Dictionary; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; - -import org.apache.aries.rsa.spi.DistributionProvider; -import org.apache.aries.rsa.spi.Endpoint; -import org.apache.aries.rsa.spi.IntentUnsatisfiedException; -import org.apache.cxf.dosgi.common.httpservice.HttpServiceManager; -import org.apache.cxf.dosgi.common.intent.IntentManager; -import org.apache.cxf.dosgi.common.util.OsgiUtils; -import org.apache.cxf.dosgi.common.util.StringPlus; -import org.apache.cxf.dosgi.dsw.handlers.pojo.PojoConfigurationTypeHandler; -import org.apache.cxf.dosgi.dsw.handlers.pojo.WsdlConfigurationTypeHandler; -import org.apache.cxf.dosgi.dsw.handlers.rest.JaxRSPojoConfigurationTypeHandler; -import org.apache.cxf.dosgi.dsw.osgi.Constants; -import org.osgi.framework.BundleContext; -import org.osgi.service.component.ComponentContext; -import org.osgi.service.component.annotations.Activate; -import org.osgi.service.component.annotations.Component; -import org.osgi.service.component.annotations.Reference; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - - -@Component(configurationPid = "cxf-dsw", property = // -{// - REMOTE_CONFIGS_SUPPORTED + "=" + Constants.WS_CONFIG_TYPE, - REMOTE_CONFIGS_SUPPORTED + "=" + Constants.WSDL_CONFIG_TYPE, - REMOTE_CONFIGS_SUPPORTED + "=" + Constants.RS_CONFIG_TYPE, - REMOTE_CONFIGS_SUPPORTED + "=" + Constants.WS_CONFIG_TYPE_OLD, - REMOTE_INTENTS_SUPPORTED + "=" -}) -public class CXFDistributionProvider implements DistributionProvider { - public static final String[] SUPPORTED_CONFIGS = new String[] // - {// - Constants.WS_CONFIG_TYPE, Constants.WSDL_CONFIG_TYPE, Constants.RS_CONFIG_TYPE, - Constants.WS_CONFIG_TYPE_OLD - }; - - protected static final String DEFAULT_CONFIGURATION_TYPE = Constants.WS_CONFIG_TYPE; - private static final Logger LOG = LoggerFactory.getLogger(CXFDistributionProvider.class); - - - private IntentManager intentManager; - private PojoConfigurationTypeHandler pojoConfigurationTypeHandler; - private JaxRSPojoConfigurationTypeHandler jaxRsPojoConfigurationTypeHandler; - private WsdlConfigurationTypeHandler wsdlConfigurationTypeHandler; - private Set<String> configTypesSet; - private HttpServiceManager httpServiceManager; - - public CXFDistributionProvider() { - configTypesSet = new HashSet<>(Arrays.asList(SUPPORTED_CONFIGS)); - } - - @Reference - public void setHttpServiceManager(HttpServiceManager httpServiceManager) { - this.httpServiceManager = httpServiceManager; - } - - @Reference - public void setIntentManager(IntentManager intentManager) { - this.intentManager = intentManager; - } - - @Activate - public synchronized void activate(ComponentContext compContext) { - Dictionary<String, Object> config = compContext.getProperties(); - init(compContext.getBundleContext(), config); - // String[] supportedIntents = intentMap.keySet().toArray(new String[] {}); - // props.put(Constants.REMOTE_INTENTS_SUPPORTED, supportedIntents); - } - - void init(BundleContext bc, Dictionary<String, Object> config) { - // Disable the fast infoset as it's not compatible (yet) with OSGi - System.setProperty("org.apache.cxf.nofastinfoset", "true"); - LOG.debug("RemoteServiceAdmin Implementation is starting up with {}", config); - System.setProperty("org.apache.cxf.nofastinfoset", "true"); - this.pojoConfigurationTypeHandler = new PojoConfigurationTypeHandler(bc, intentManager, httpServiceManager); - this.jaxRsPojoConfigurationTypeHandler = new JaxRSPojoConfigurationTypeHandler(bc, - intentManager, - httpServiceManager); - this.wsdlConfigurationTypeHandler = new WsdlConfigurationTypeHandler(bc, intentManager, httpServiceManager); - } - - @SuppressWarnings("rawtypes") - @Override - public Endpoint exportService(Object serviceO, - BundleContext serviceContext, - Map<String, Object> effectiveProperties, - Class[] exportedInterfaces) { - List<String> configurationTypes = determineConfigurationTypes(effectiveProperties); - DistributionProvider handler = getHandler(configurationTypes, effectiveProperties); - return handler != null ? handler.exportService(serviceO, serviceContext, - effectiveProperties, exportedInterfaces) : null; - } - - @SuppressWarnings("rawtypes") - @Override - public Object importEndpoint(ClassLoader consumerLoader, BundleContext consumerContext, - Class[] iClass, EndpointDescription endpoint) - throws IntentUnsatisfiedException { - List<String> configurationTypes = determineConfigTypesForImport(endpoint); - DistributionProvider handler = getHandler(configurationTypes, endpoint.getProperties()); - return handler != null ? handler.importEndpoint(consumerLoader, consumerContext, iClass, endpoint) : null; - } - - DistributionProvider getHandler(List<String> configurationTypes, - Map<String, Object> serviceProperties) { - intentManager.assertAllIntentsSupported(serviceProperties); - if (configurationTypes.contains(Constants.WS_CONFIG_TYPE) - || configurationTypes.contains(Constants.WS_CONFIG_TYPE_OLD) - || configurationTypes.contains(Constants.RS_CONFIG_TYPE)) { - boolean jaxrs = isJaxrsRequested(configurationTypes, serviceProperties); - return jaxrs ? jaxRsPojoConfigurationTypeHandler : pojoConfigurationTypeHandler; - } else if (configurationTypes.contains(Constants.WSDL_CONFIG_TYPE)) { - return wsdlConfigurationTypeHandler; - } - LOG.info("None of the configuration types in " + configurationTypes + " is supported."); - return null; - } - - private boolean isJaxrsRequested(Collection<String> types, Map<String, Object> serviceProperties) { - if (types == null) { - return false; - } - - if (types.contains(Constants.RS_CONFIG_TYPE)) { - Collection<String> intentsProperty - = OsgiUtils.getMultiValueProperty(serviceProperties.get(RemoteConstants.SERVICE_EXPORTED_INTENTS)); - boolean hasHttpIntent = false; - boolean hasSoapIntent = false; - if (intentsProperty != null) { - for (String intent : intentsProperty) { - if (intent.contains("SOAP")) { - hasSoapIntent = true; - break; - } - - if (intent.contains("HTTP")) { - hasHttpIntent = true; - } - } - } - if ((hasHttpIntent && !hasSoapIntent) || intentsProperty == null) { - return true; - } - } - return false; - } - - /** - * determine which configuration types should be used / if the requested are - * supported - */ - List<String> determineConfigurationTypes(Map<String, Object> serviceProperties) { - String[] requestedConfigurationTypes = StringPlus.normalize(serviceProperties - .get(RemoteConstants.SERVICE_EXPORTED_CONFIGS)); - if (requestedConfigurationTypes == null || requestedConfigurationTypes.length == 0) { - return Collections.singletonList(DEFAULT_CONFIGURATION_TYPE); - } - - List<String> configurationTypes = new ArrayList<String>(); - for (String rct : requestedConfigurationTypes) { - if (configTypesSet.contains(rct)) { - configurationTypes.add(rct); - } - } - LOG.info("Configuration types selected for export: {}.", configurationTypes); - return configurationTypes; - } - - private List<String> determineConfigTypesForImport(EndpointDescription endpoint) { - List<String> remoteConfigurationTypes = endpoint.getConfigurationTypes(); - - List<String> usableConfigurationTypes = new ArrayList<String>(); - for (String ct : SUPPORTED_CONFIGS) { - if (remoteConfigurationTypes.contains(ct)) { - usableConfigurationTypes.add(ct); - } - } - - LOG.info("Ignoring endpoint {} as it has no compatible configuration types: {}.", - endpoint.getId(), remoteConfigurationTypes); - return usableConfigurationTypes; - } - - public String[] getSupportedTypes() { - return SUPPORTED_CONFIGS; - } - -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/AbstractPojoConfigurationTypeHandler.java ---------------------------------------------------------------------- diff --git a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/AbstractPojoConfigurationTypeHandler.java b/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/AbstractPojoConfigurationTypeHandler.java deleted file mode 100644 index 363b843..0000000 --- a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/AbstractPojoConfigurationTypeHandler.java +++ /dev/null @@ -1,151 +0,0 @@ -/** - * 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.cxf.dosgi.dsw.handlers.pojo; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; - -import org.apache.aries.rsa.spi.DistributionProvider; -import org.apache.aries.rsa.spi.Endpoint; -import org.apache.cxf.Bus; -import org.apache.cxf.BusFactory; -import org.apache.cxf.dosgi.common.httpservice.HttpServiceManager; -import org.apache.cxf.dosgi.common.intent.IntentManager; -import org.apache.cxf.dosgi.common.util.OsgiUtils; -import org.apache.cxf.dosgi.common.util.ServerWrapper; -import org.apache.cxf.dosgi.common.util.StringPlus; -import org.apache.cxf.dosgi.dsw.osgi.Constants; -import org.apache.cxf.endpoint.AbstractEndpointFactory; -import org.apache.cxf.endpoint.Server; -import org.apache.cxf.frontend.ServerFactoryBean; -import org.osgi.framework.BundleContext; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; - -public abstract class AbstractPojoConfigurationTypeHandler implements DistributionProvider { - protected BundleContext bundleContext; - protected IntentManager intentManager; - protected HttpServiceManager httpServiceManager; - - public AbstractPojoConfigurationTypeHandler(BundleContext dswBC, IntentManager intentManager, - HttpServiceManager httpServiceManager) { - this.bundleContext = dswBC; - this.intentManager = intentManager; - this.httpServiceManager = httpServiceManager; - } - - protected EndpointDescription createEndpointDesc(Map<String, Object> props, - String[] importedConfigs, - String address, - String[] intents) { - props.put(RemoteConstants.SERVICE_IMPORTED_CONFIGS, importedConfigs); - for (String configurationType : importedConfigs) { - if (Constants.WS_CONFIG_TYPE.equals(configurationType)) { - props.put(Constants.WS_ADDRESS_PROPERTY, address); - } else if (Constants.WS_CONFIG_TYPE_OLD.equals(configurationType)) { - props.put(Constants.WS_ADDRESS_PROPERTY_OLD, address); - props.put(Constants.WS_ADDRESS_PROPERTY, address); - } - } - String[] sIntents = StringPlus.normalize(props.get(RemoteConstants.SERVICE_INTENTS)); - String[] allIntents = mergeArrays(intents, sIntents); - props.put(RemoteConstants.SERVICE_INTENTS, allIntents); - props.put(RemoteConstants.ENDPOINT_ID, address); - return new EndpointDescription(props); - } - - public static String[] mergeArrays(String[] a1, String[] a2) { - if (a1 == null) { - return a2; - } - if (a2 == null) { - return a1; - } - - List<String> list = new ArrayList<String>(a1.length + a2.length); - Collections.addAll(list, a1); - for (String s : a2) { - if (!list.contains(s)) { - list.add(s); - } - } - - return list.toArray(new String[list.size()]); - } - - protected String getClientAddress(Map<String, Object> sd) { - return OsgiUtils.getFirstNonEmptyStringProperty(sd, RemoteConstants.ENDPOINT_ID, - Constants.WS_ADDRESS_PROPERTY, - Constants.WS_ADDRESS_PROPERTY_OLD, - Constants.RS_ADDRESS_PROPERTY); - } - - protected String getServerAddress(Map<String, Object> sd, Class<?> iClass) { - String address = getClientAddress(sd); - return address == null ? httpServiceManager.getDefaultAddress(iClass) : address; - } - - public String getServletContextRoot(Map<String, Object> sd) { - return OsgiUtils.getFirstNonEmptyStringProperty(sd, - Constants.WS_HTTP_SERVICE_CONTEXT, - Constants.WS_HTTP_SERVICE_CONTEXT_OLD, - Constants.WSDL_HTTP_SERVICE_CONTEXT, - Constants.RS_HTTP_SERVICE_CONTEXT); - } - - protected Bus createBus(Long sid, BundleContext callingContext, String contextRoot) { - Bus bus = BusFactory.newInstance().createBus(); - if (contextRoot != null) { - httpServiceManager.registerServlet(bus, contextRoot, callingContext, sid); - } - return bus; - } - - protected Endpoint createServerFromFactory(ServerFactoryBean factory, EndpointDescription epd) { - ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - try { - Thread.currentThread().setContextClassLoader(ServerFactoryBean.class.getClassLoader()); - Server server = factory.create(); - return new ServerWrapper(epd, server); - } finally { - Thread.currentThread().setContextClassLoader(oldClassLoader); - } - } - - protected static void addWsInterceptorsFeaturesProps(AbstractEndpointFactory factory, BundleContext callingContext, - Map<String, Object> sd) { - InterceptorSupport.addInterceptors(factory, callingContext, sd, Constants.WS_IN_INTERCEPTORS_PROP_KEY); - InterceptorSupport.addInterceptors(factory, callingContext, sd, Constants.WS_OUT_INTERCEPTORS_PROP_KEY); - InterceptorSupport.addInterceptors(factory, callingContext, sd, Constants.WS_OUT_FAULT_INTERCEPTORS_PROP_KEY); - InterceptorSupport.addInterceptors(factory, callingContext, sd, Constants.WS_IN_FAULT_INTERCEPTORS_PROP_KEY); - InterceptorSupport.addFeatures(factory, callingContext, sd, Constants.WS_FEATURES_PROP_KEY); - addContextProperties(factory, sd, Constants.WS_CONTEXT_PROPS_PROP_KEY); - } - - private static void addContextProperties(AbstractEndpointFactory factory, Map<String, Object> sd, String propName) { - @SuppressWarnings("unchecked") - Map<String, Object> props = (Map<String, Object>)sd.get(propName); - if (props != null) { - factory.getProperties(true).putAll(props); - } - } - -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/InterceptorSupport.java ---------------------------------------------------------------------- diff --git a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/InterceptorSupport.java b/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/InterceptorSupport.java deleted file mode 100644 index 1965157..0000000 --- a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/InterceptorSupport.java +++ /dev/null @@ -1,63 +0,0 @@ -/** - * 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.cxf.dosgi.dsw.handlers.pojo; - -import java.util.List; -import java.util.Map; - -import org.apache.cxf.dosgi.common.util.ClassUtils; -import org.apache.cxf.endpoint.AbstractEndpointFactory; -import org.apache.cxf.feature.AbstractFeature; -import org.apache.cxf.helpers.CastUtils; -import org.apache.cxf.interceptor.Interceptor; -import org.osgi.framework.BundleContext; - -public final class InterceptorSupport { - private InterceptorSupport() { - } - - public static void addInterceptors(AbstractEndpointFactory factory, BundleContext callingContext, - Map<String, Object> sd, String propName) { - List<Object> providers = ClassUtils.loadProviderClasses(callingContext, sd, propName); - boolean in = propName.contains("in.interceptors"); - boolean out = propName.contains("out.interceptors"); - boolean inFault = propName.contains("in.fault.interceptors"); - boolean outFault = propName.contains("out.fault.interceptors"); - for (Object provider : providers) { - Interceptor<?> interceptor = (Interceptor<?>) provider; - if (in) { - factory.getInInterceptors().add(interceptor); - } else if (out) { - factory.getOutInterceptors().add(interceptor); - } else if (inFault) { - factory.getInFaultInterceptors().add(interceptor); - } else if (outFault) { - factory.getOutFaultInterceptors().add(interceptor); - } - } - } - - public static void addFeatures(AbstractEndpointFactory factory, BundleContext callingContext, - Map<String, Object> sd, String propName) { - List<Object> providers = ClassUtils.loadProviderClasses(callingContext, sd, propName); - if (!providers.isEmpty()) { - factory.getFeatures().addAll(CastUtils.cast(providers, AbstractFeature.class)); - } - } -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/PojoConfigurationTypeHandler.java ---------------------------------------------------------------------- diff --git a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/PojoConfigurationTypeHandler.java b/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/PojoConfigurationTypeHandler.java deleted file mode 100644 index 2a57c91..0000000 --- a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/PojoConfigurationTypeHandler.java +++ /dev/null @@ -1,174 +0,0 @@ -/** - * 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.cxf.dosgi.dsw.handlers.pojo; - -import java.util.Map; - -import javax.jws.WebService; - -import org.apache.aries.rsa.spi.Endpoint; -import org.apache.aries.rsa.spi.IntentUnsatisfiedException; -import org.apache.cxf.Bus; -import org.apache.cxf.aegis.databinding.AegisDatabinding; -import org.apache.cxf.databinding.DataBinding; -import org.apache.cxf.dosgi.common.httpservice.HttpServiceManager; -import org.apache.cxf.dosgi.common.intent.IntentManager; -import org.apache.cxf.dosgi.common.proxy.ProxyFactory; -import org.apache.cxf.dosgi.dsw.osgi.Constants; -import org.apache.cxf.frontend.ClientProxyFactoryBean; -import org.apache.cxf.frontend.ServerFactoryBean; -import org.apache.cxf.jaxb.JAXBDataBinding; -import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; -import org.apache.cxf.jaxws.JaxWsServerFactoryBean; -import org.osgi.framework.BundleContext; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class PojoConfigurationTypeHandler extends AbstractPojoConfigurationTypeHandler { - - private static final Logger LOG = LoggerFactory.getLogger(PojoConfigurationTypeHandler.class); - - public PojoConfigurationTypeHandler(BundleContext dswBC, - IntentManager intentManager, - HttpServiceManager httpServiceManager) { - super(dswBC, intentManager, httpServiceManager); - } - - public String[] getSupportedTypes() { - return new String[] {Constants.WS_CONFIG_TYPE, Constants.WS_CONFIG_TYPE_OLD}; - } - - @SuppressWarnings("rawtypes") - public Object importEndpoint(ClassLoader consumerLoader, - BundleContext consumerContext, - Class[] interfaces, - EndpointDescription endpoint) throws IntentUnsatisfiedException { - Class<?> iClass = interfaces[0]; - Map<String, Object> sd = endpoint.getProperties(); - String address = getClientAddress(sd); - if (address == null) { - LOG.warn("Remote address is unavailable"); - // TODO: fire Event - return null; - } - - LOG.info("Creating a " + iClass.getName() + " client, endpoint address is " + address); - - ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - try { - ClientProxyFactoryBean factory = createClientProxyFactoryBean(sd, iClass); - factory.getServiceFactory().setDataBinding(getDataBinding(sd, iClass)); - factory.setServiceClass(iClass); - factory.setAddress(address); - addWsInterceptorsFeaturesProps(factory.getClientFactoryBean(), consumerContext, sd); - WsdlSupport.setWsdlProperties(factory.getClientFactoryBean(), bundleContext, sd, false); - - intentManager.applyIntents(factory.getFeatures(), factory.getClientFactoryBean(), sd); - - Thread.currentThread().setContextClassLoader(ClientProxyFactoryBean.class.getClassLoader()); - return ProxyFactory.create(factory.create(), iClass); - } catch (Exception e) { - LOG.warn("proxy creation failed", e); - } finally { - Thread.currentThread().setContextClassLoader(oldClassLoader); - } - return null; - } - - @SuppressWarnings("rawtypes") - public Endpoint exportService(Object serviceO, - BundleContext serviceContext, - Map<String, Object> endpointProps, - Class[] exportedInterfaces) throws IntentUnsatisfiedException { - Class<?> iClass = exportedInterfaces[0]; - String address = getPojoAddress(endpointProps, iClass); - ServerFactoryBean factory = createServerFactoryBean(endpointProps, iClass); - factory.setDataBinding(getDataBinding(endpointProps, iClass)); - String contextRoot = getServletContextRoot(endpointProps); - - final Long sid = (Long) endpointProps.get(RemoteConstants.ENDPOINT_SERVICE_ID); - Bus bus = createBus(sid, serviceContext, contextRoot); - factory.setBus(bus); - factory.setServiceClass(iClass); - factory.setAddress(address); - - factory.setServiceBean(serviceO); - addWsInterceptorsFeaturesProps(factory, serviceContext, endpointProps); - WsdlSupport.setWsdlProperties(factory, serviceContext, endpointProps, false); - String[] intents = intentManager.applyIntents(factory.getFeatures(), factory, endpointProps); - - String completeEndpointAddress = httpServiceManager.getAbsoluteAddress(contextRoot, address); - EndpointDescription epd = createEndpointDesc(endpointProps, - new String[]{Constants.WS_CONFIG_TYPE}, - completeEndpointAddress, intents); - return createServerFromFactory(factory, epd); - } - - private String getPojoAddress(Map<String, Object> sd, Class<?> iClass) { - String address = getClientAddress(sd); - if (address != null) { - return address; - } - - // If the property is not of type string this will cause an ClassCastException which - // will be propagated to the ExportRegistration exception property. - Object port = sd.get(Constants.WS_PORT_PROPERTY); - if (port == null) { - port = "9000"; - } - - address = "http://localhost:" + port + "/" + iClass.getName().replace('.', '/'); - LOG.info("Using a default address: " + address); - return address; - } - - private DataBinding getDataBinding(Map<String, Object> sd, Class<?> iClass) { - Object dataBindingBeanProp = sd.get(Constants.WS_DATABINDING_BEAN_PROP_KEY); - if (dataBindingBeanProp instanceof DataBinding) { - return (DataBinding)dataBindingBeanProp; - } - return isJAXB(sd, iClass) ? new JAXBDataBinding() : new AegisDatabinding(); - } - - private boolean isJAXB(Map<String, Object> sd, Class<?> iClass) { - String dataBindingName = (String)sd.get(Constants.WS_DATABINDING_PROP_KEY); - return (iClass.getAnnotation(WebService.class) != null - || Constants.WS_DATA_BINDING_JAXB.equals(dataBindingName)) - && !Constants.WS_DATA_BINDING_AEGIS.equals(dataBindingName); - } - - // Isolated so that it can be substituted for testing - protected ClientProxyFactoryBean createClientProxyFactoryBean(Map<String, Object> sd, Class<?> iClass) { - return isJAXWS(sd, iClass) ? new JaxWsProxyFactoryBean() : new ClientProxyFactoryBean(); - } - - // Isolated so that it can be substituted for testing - protected ServerFactoryBean createServerFactoryBean(Map<String, Object> sd, Class<?> iClass) { - return isJAXWS(sd, iClass) ? new JaxWsServerFactoryBean() : new ServerFactoryBean(); - } - - private boolean isJAXWS(Map<String, Object> sd, Class<?> iClass) { - String frontEnd = (String)sd.get(Constants.WS_FRONTEND_PROP_KEY); - return (iClass.getAnnotation(WebService.class) != null - || Constants.WS_FRONTEND_JAXWS.equals(frontEnd)) - && !Constants.WS_FRONTEND_SIMPLE.equals(frontEnd); - } -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlConfigurationTypeHandler.java ---------------------------------------------------------------------- diff --git a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlConfigurationTypeHandler.java b/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlConfigurationTypeHandler.java deleted file mode 100644 index d3bca3e..0000000 --- a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlConfigurationTypeHandler.java +++ /dev/null @@ -1,162 +0,0 @@ -/** - * 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.cxf.dosgi.dsw.handlers.pojo; - -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Map; - -import javax.xml.namespace.QName; -import javax.xml.ws.Service; - -import org.apache.aries.rsa.spi.Endpoint; -import org.apache.cxf.Bus; -import org.apache.cxf.common.util.PackageUtils; -import org.apache.cxf.databinding.DataBinding; -import org.apache.cxf.dosgi.common.httpservice.HttpServiceManager; -import org.apache.cxf.dosgi.common.intent.IntentManager; -import org.apache.cxf.dosgi.common.proxy.ProxyFactory; -import org.apache.cxf.dosgi.common.util.OsgiUtils; -import org.apache.cxf.dosgi.dsw.osgi.Constants; -import org.apache.cxf.jaxb.JAXBDataBinding; -import org.apache.cxf.jaxws.JaxWsServerFactoryBean; -import org.osgi.framework.BundleContext; -import org.osgi.service.remoteserviceadmin.EndpointDescription; -import org.osgi.service.remoteserviceadmin.RemoteConstants; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -public class WsdlConfigurationTypeHandler extends AbstractPojoConfigurationTypeHandler { - - private static final Logger LOG = LoggerFactory.getLogger(WsdlConfigurationTypeHandler.class); - - public WsdlConfigurationTypeHandler(BundleContext dswBC, - IntentManager intentManager, - HttpServiceManager httpServiceManager) { - super(dswBC, intentManager, httpServiceManager); - } - - public String[] getSupportedTypes() { - return new String[] {Constants.WSDL_CONFIG_TYPE}; - } - - @SuppressWarnings("rawtypes") - public Object importEndpoint(ClassLoader consumerLoader, - BundleContext consumerContext, - Class[] interfaces, - EndpointDescription endpoint) { - Class<?> iClass = interfaces[0]; - String wsdlAddressProp = getWsdlAddress(endpoint, iClass); - if (wsdlAddressProp == null) { - LOG.warn("WSDL address is unavailable"); - return null; - } - - URL wsdlAddress; - try { - wsdlAddress = new URL(wsdlAddressProp); - } catch (MalformedURLException ex) { - LOG.warn("WSDL address is malformed"); - return null; - } - - LOG.info("Creating a " + endpoint.getInterfaces().toArray()[0] + " client, wsdl address is " - + OsgiUtils.getProperty(endpoint, Constants.WSDL_CONFIG_PREFIX)); - - String serviceNs = OsgiUtils.getProperty(endpoint, Constants.WSDL_SERVICE_NAMESPACE); - if (serviceNs == null) { - serviceNs = PackageUtils.getNamespace(PackageUtils.getPackageName(iClass)); - } - String serviceName = OsgiUtils.getProperty(endpoint, Constants.WSDL_SERVICE_NAME); - if (serviceName == null) { - serviceName = iClass.getSimpleName(); - } - QName serviceQname = WsdlSupport.getServiceQName(iClass, endpoint.getProperties(), - Constants.WSDL_SERVICE_NAMESPACE, - Constants.WSDL_SERVICE_NAME); - QName portQname = WsdlSupport.getPortQName(serviceQname.getNamespaceURI(), - endpoint.getProperties(), Constants.WSDL_PORT_NAME); - Service service = createWebService(wsdlAddress, serviceQname); - Object port = portQname == null ? service.getPort(iClass) : service.getPort(portQname, iClass); - Object proxy = ProxyFactory.create(port, iClass); - // MARC: FIXME!!!! getDistributionProvider().addRemoteService(serviceReference); - return proxy; - } - - // Isolated so that it can be overridden for test purposes. - Service createWebService(URL wsdlAddress, QName serviceQname) { - return Service.create(wsdlAddress, serviceQname); - } - - @SuppressWarnings("rawtypes") - public Endpoint exportService(Object serviceO, - BundleContext serviceContext, - Map<String, Object> sd, - Class[] exportedInterfaces) { - Class<?> iClass = exportedInterfaces[0]; - String location = OsgiUtils.getProperty(sd, Constants.WSDL_LOCATION); - if (location == null) { - throw new RuntimeException("WSDL location property is unavailable"); - } - URL wsdlURL = serviceContext.getBundle().getResource(location); - if (wsdlURL == null) { - throw new RuntimeException("WSDL resource at " + location + " is unavailable"); - } - - String address = getServerAddress(sd, iClass); - String contextRoot = getServletContextRoot(sd); - if (address == null && contextRoot == null) { - throw new RuntimeException("Remote address is unavailable"); - } - - LOG.info("Creating a " + iClass.getName() + " endpoint from CXF PublishHook, address is " + address); - - DataBinding databinding = new JAXBDataBinding(); - JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean(); - final Long sid = (Long) sd.get(RemoteConstants.ENDPOINT_SERVICE_ID); - Bus bus = createBus(sid, serviceContext, contextRoot); - factory.setBus(bus); - factory.setServiceClass(iClass); - factory.setAddress(address != null ? address : "/"); - factory.getServiceFactory().setDataBinding(databinding); - factory.setServiceBean(serviceO); - - addWsInterceptorsFeaturesProps(factory, serviceContext, sd); - - WsdlSupport.setWsdlProperties(factory, serviceContext, sd, true); - - String[] intents = intentManager.applyIntents(factory.getFeatures(), factory, sd); - - EndpointDescription epd = createEndpointDesc(sd, - new String[]{Constants.WS_CONFIG_TYPE}, - address, intents); - return createServerFromFactory(factory, epd); - } - - private String getWsdlAddress(EndpointDescription endpoint, Class<?> iClass) { - String address = OsgiUtils.getProperty(endpoint, Constants.WSDL_CONFIG_PREFIX); - if (address == null) { - address = httpServiceManager.getDefaultAddress(iClass); - if (address != null) { - address += "?wsdl"; - } - } - return address; - } -} http://git-wip-us.apache.org/repos/asf/cxf-dosgi/blob/f0dea506/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlSupport.java ---------------------------------------------------------------------- diff --git a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlSupport.java b/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlSupport.java deleted file mode 100644 index 2118b33..0000000 --- a/cxf-dsw/src/main/java/org/apache/cxf/dosgi/dsw/handlers/pojo/WsdlSupport.java +++ /dev/null @@ -1,83 +0,0 @@ -/** - * 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.cxf.dosgi.dsw.handlers.pojo; - -import java.net.URL; -import java.util.Map; - -import javax.xml.namespace.QName; - -import org.apache.cxf.common.util.PackageUtils; -import org.apache.cxf.dosgi.common.util.OsgiUtils; -import org.apache.cxf.dosgi.dsw.osgi.Constants; -import org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory; -import org.osgi.framework.BundleContext; - -public final class WsdlSupport { - - private WsdlSupport() { - } - - public static void setWsdlProperties(AbstractWSDLBasedEndpointFactory factory, BundleContext context, - Map<String, Object> sd, - boolean wsdlType) { - String location = OsgiUtils.getProperty(sd, wsdlType ? Constants.WSDL_LOCATION : Constants.WS_WSDL_LOCATION); - if (location != null) { - URL wsdlURL = context.getBundle().getResource(location); - if (wsdlURL != null) { - factory.setWsdlURL(wsdlURL.toString()); - } - QName serviceName = getServiceQName(null, sd, - wsdlType ? Constants.WSDL_SERVICE_NAMESPACE : Constants.WS_WSDL_SERVICE_NAMESPACE, - wsdlType ? Constants.WSDL_SERVICE_NAME : Constants.WS_WSDL_SERVICE_NAME); - if (serviceName != null) { - factory.setServiceName(serviceName); - QName portName = getPortQName(serviceName.getNamespaceURI(), sd, - wsdlType ? Constants.WSDL_PORT_NAME : Constants.WS_WSDL_PORT_NAME); - if (portName != null) { - factory.setEndpointName(portName); - } - } - } - } - - protected static QName getServiceQName(Class<?> iClass, Map<String, Object> sd, String nsPropName, - String namePropName) { - String serviceNs = OsgiUtils.getProperty(sd, nsPropName); - String serviceName = OsgiUtils.getProperty(sd, namePropName); - if (iClass == null && (serviceNs == null || serviceName == null)) { - return null; - } - if (serviceNs == null) { - serviceNs = PackageUtils.getNamespace(PackageUtils.getPackageName(iClass)); - } - if (serviceName == null) { - serviceName = iClass.getSimpleName(); - } - return new QName(serviceNs, serviceName); - } - - protected static QName getPortQName(String ns, Map<String, Object> sd, String propName) { - String portName = OsgiUtils.getProperty(sd, propName); - if (portName == null) { - return null; - } - return new QName(ns, portName); - } -}
