Make more camel-spring-xxx modules install in karaf.
Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/9d7499d2 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/9d7499d2 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/9d7499d2 Branch: refs/heads/master Commit: 9d7499d27283bdf74b2261d4094a4eba1af5b79e Parents: de1c208 Author: Claus Ibsen <davscl...@apache.org> Authored: Sat Mar 12 14:50:10 2016 +0100 Committer: Claus Ibsen <davscl...@apache.org> Committed: Sat Mar 12 14:50:10 2016 +0100 ---------------------------------------------------------------------- components/camel-spring-security/pom.xml | 184 +++++++++---------- .../security/SpringSecurityAccessPolicy.java | 1 - .../security/config/BeanDefinitionParser.java | 114 ++++++++++++ ...SpringSecurityAuthorizationPolicyParser.java | 1 - .../SpringSecurityAuthorizationPolicyTest.java | 3 +- .../spring/security/commonSecurity.xml | 10 +- parent/pom.xml | 3 +- .../features/src/main/resources/features.xml | 8 +- 8 files changed, 209 insertions(+), 115 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/components/camel-spring-security/pom.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring-security/pom.xml b/components/camel-spring-security/pom.xml index c21099c..3d39506 100644 --- a/components/camel-spring-security/pom.xml +++ b/components/camel-spring-security/pom.xml @@ -15,109 +15,95 @@ 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/xsd/maven-4.0.0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <artifactId>components</artifactId> - <groupId>org.apache.camel</groupId> - <version>2.17-SNAPSHOT</version> - </parent> +<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/xsd/maven-4.0.0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <artifactId>components</artifactId> + <groupId>org.apache.camel</groupId> + <version>2.17-SNAPSHOT</version> + </parent> - <artifactId>camel-spring-security</artifactId> - <packaging>bundle</packaging> - <name>Camel :: Spring Security </name> - <description>Camel Spring Security support</description> + <artifactId>camel-spring-security</artifactId> + <packaging>bundle</packaging> + <name>Camel :: Spring Security</name> + <description>Camel Spring Security support</description> - <properties> - <camel.osgi.export.pkg>org.apache.camel.component.spring.security.*</camel.osgi.export.pkg> - <camel.osgi.import.before.defaults>org.springframework.security.*;version="[3,4)"</camel.osgi.import.before.defaults> - </properties> + <properties> + <camel.osgi.export.pkg>org.apache.camel.component.spring.security.*</camel.osgi.export.pkg> + <camel.osgi.import.before.defaults>org.springframework.security.*;version="[4,5)"</camel.osgi.import.before.defaults> + </properties> - <dependencies> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-core</artifactId> - </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-spring</artifactId> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-core</artifactId> - <exclusions> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-core</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-expression</artifactId> - </exclusion> - <exclusion> - <groupId>org.springframework</groupId> - <artifactId>spring-support</artifactId> - </exclusion> - </exclusions> - </dependency> - <dependency> - <groupId>org.springframework.security</groupId> - <artifactId>spring-security-config</artifactId> - </dependency> - <dependency> - <groupId>commons-logging</groupId> - <artifactId>commons-logging</artifactId> - </dependency> - - <!-- test dependencies --> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-test-spring</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.apache.camel</groupId> - <artifactId>camel-core-xml</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>junit</groupId> - <artifactId>junit</artifactId> - <scope>test</scope> - </dependency> - <dependency> - <groupId>org.slf4j</groupId> - <artifactId>slf4j-log4j12</artifactId> - <scope>test</scope> - </dependency> + <dependencies> - </dependencies> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core</artifactId> + </dependency> - <build> - <defaultGoal>install</defaultGoal> - <plugins> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>build-helper-maven-plugin</artifactId> - <executions> - <execution> - <id>attach-artifacts</id> - <phase>package</phase> - <goals> - <goal>attach-artifact</goal> - </goals> - <configuration> - <artifacts> - <artifact> - <file>./src/main/resources/schema/camel-spring-security.xsd</file> - <type>xsd</type> - </artifact> - </artifacts> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-core</artifactId> + </dependency> + <dependency> + <groupId>org.springframework.security</groupId> + <artifactId>spring-security-config</artifactId> + </dependency> + + <dependency> + <groupId>commons-logging</groupId> + <artifactId>commons-logging</artifactId> + </dependency> + + <!-- test dependencies --> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-test-spring</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.apache.camel</groupId> + <artifactId>camel-core-xml</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>junit</groupId> + <artifactId>junit</artifactId> + <scope>test</scope> + </dependency> + <dependency> + <groupId>org.slf4j</groupId> + <artifactId>slf4j-log4j12</artifactId> + <scope>test</scope> + </dependency> + + </dependencies> + + <build> + <defaultGoal>install</defaultGoal> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>build-helper-maven-plugin</artifactId> + <executions> + <execution> + <id>attach-artifacts</id> + <phase>package</phase> + <goals> + <goal>attach-artifact</goal> + </goals> + <configuration> + <artifacts> + <artifact> + <file>./src/main/resources/schema/camel-spring-security.xsd</file> + <type>xsd</type> + </artifact> + </artifacts> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> </project> http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java index df35f4b..f601365 100644 --- a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java +++ b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAccessPolicy.java @@ -16,7 +16,6 @@ */ package org.apache.camel.component.spring.security; - import java.util.List; import org.springframework.security.access.ConfigAttribute; http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/BeanDefinitionParser.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/BeanDefinitionParser.java b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/BeanDefinitionParser.java new file mode 100644 index 0000000..fcf4288 --- /dev/null +++ b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/BeanDefinitionParser.java @@ -0,0 +1,114 @@ +/** + * 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.camel.component.spring.security.config; + +import org.springframework.beans.factory.support.BeanDefinitionBuilder; +import org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser; +import org.springframework.core.Conventions; +import org.springframework.util.Assert; +import org.springframework.util.StringUtils; +import org.w3c.dom.Attr; +import org.w3c.dom.Element; +import org.w3c.dom.NamedNodeMap; + +/** + * A base class for a parser for a bean. + * + * @version + */ +public class BeanDefinitionParser extends AbstractSingleBeanDefinitionParser { + private final Class<?> type; + private final boolean assignId; + + /** + * Bean definition parser + * + * @param type the type, can be null + * @param assignId whether to allow assigning id from the id attribute on the type + * (there must be getter/setter id on type class). + */ + public BeanDefinitionParser(Class<?> type, boolean assignId) { + this.type = type; + this.assignId = assignId; + } + + protected Class<?> getBeanClass(Element element) { + return type; + } + + protected boolean isAssignId() { + return assignId; + } + + protected boolean isEligibleAttribute(String attributeName) { + return attributeName != null && !ID_ATTRIBUTE.equals(attributeName) + && !attributeName.equals("xmlns") && !attributeName.startsWith("xmlns:"); + } + + protected void doParse(Element element, BeanDefinitionBuilder builder) { + NamedNodeMap attributes = element.getAttributes(); + for (int x = 0; x < attributes.getLength(); x++) { + Attr attribute = (Attr) attributes.item(x); + String name = attribute.getLocalName(); + String fullName = attribute.getName(); + // assign id if we want them + if (fullName.equals("id") && isAssignId()) { + if (attribute.getValue() != null) { + builder.addPropertyValue("id", attribute.getValue()); + } + // assign other attributes if eligible + } else if (!fullName.startsWith("xmlns:") && !fullName.equals("xmlns") && isEligibleAttribute(name)) { + String propertyName = extractPropertyName(name); + Assert.state(StringUtils.hasText(propertyName), + "Illegal property name returned from 'extractPropertyName(String)': cannot be null or empty."); + builder.addPropertyValue(propertyName, attribute.getValue()); + } + } + postProcess(builder, element); + } + + + /** + * Extract a JavaBean property name from the supplied attribute name. + * <p>The default implementation uses the + * {@link Conventions#attributeNameToPropertyName(String)} + * method to perform the extraction. + * <p>The name returned must obey the standard JavaBean property name + * conventions. For example for a class with a setter method + * '<code>setBingoHallFavourite(String)</code>', the name returned had + * better be '<code>bingoHallFavourite</code>' (with that exact casing). + * + * @param attributeName the attribute name taken straight from the + * XML element being parsed (never <code>null</code>) + * @return the extracted JavaBean property name (must never be <code>null</code>) + */ + protected String extractPropertyName(String attributeName) { + return Conventions.attributeNameToPropertyName(attributeName); + } + + /** + * Hook method that derived classes can implement to inspect/change a + * bean definition after parsing is complete. + * <p>The default implementation does nothing. + * + * @param beanDefinition the parsed (and probably totally defined) bean definition being built + * @param element the XML element that was the source of the bean definition's metadata + */ + protected void postProcess(BeanDefinitionBuilder beanDefinition, Element element) { + } + +} http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java index dbd3a54..9bc1c3e 100644 --- a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java +++ b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/config/SpringSecurityAuthorizationPolicyParser.java @@ -20,7 +20,6 @@ import org.w3c.dom.Element; import org.apache.camel.component.spring.security.SpringSecurityAccessPolicy; import org.apache.camel.component.spring.security.SpringSecurityAuthorizationPolicy; -import org.apache.camel.spring.handler.BeanDefinitionParser; import org.apache.camel.util.ObjectHelper; import org.springframework.beans.factory.support.BeanDefinitionBuilder; http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java ---------------------------------------------------------------------- diff --git a/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java b/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java index 3e43b4a..b8229c1 100644 --- a/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java +++ b/components/camel-spring-security/src/test/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicyTest.java @@ -112,8 +112,7 @@ public class SpringSecurityAuthorizationPolicyTest extends CamelSpringTestSuppor @Override protected AbstractXmlApplicationContext createApplicationContext() { - return new ClassPathXmlApplicationContext( - "/org/apache/camel/component/spring/security/SpringSecurityCamelContext.xml"); + return new ClassPathXmlApplicationContext("/org/apache/camel/component/spring/security/SpringSecurityCamelContext.xml"); } } http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/components/camel-spring-security/src/test/resources/org/apache/camel/component/spring/security/commonSecurity.xml ---------------------------------------------------------------------- diff --git a/components/camel-spring-security/src/test/resources/org/apache/camel/component/spring/security/commonSecurity.xml b/components/camel-spring-security/src/test/resources/org/apache/camel/component/spring/security/commonSecurity.xml index 75dafa6..849e312 100644 --- a/components/camel-spring-security/src/test/resources/org/apache/camel/component/spring/security/commonSecurity.xml +++ b/components/camel-spring-security/src/test/resources/org/apache/camel/component/spring/security/commonSecurity.xml @@ -25,12 +25,10 @@ http://www.springframework.org/schema/security/spring-security.xsd"> <bean id="accessDecisionManager" class="org.springframework.security.access.vote.AffirmativeBased"> - <property name="allowIfAllAbstainDecisions" value="true"/> - <property name="decisionVoters"> - <list> - <bean class="org.springframework.security.access.vote.RoleVoter"/> - </list> - </property> + <constructor-arg index="0"> + <bean class="org.springframework.security.access.vote.RoleVoter"/> + </constructor-arg> + <property name="allowIfAllAbstainDecisions" value="true"/> </bean> <spring-security:authentication-manager alias="authenticationManager"> http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/parent/pom.xml ---------------------------------------------------------------------- diff --git a/parent/pom.xml b/parent/pom.xml index ef07002..969c594 100644 --- a/parent/pom.xml +++ b/parent/pom.xml @@ -517,7 +517,8 @@ <spring42-version>4.2.5.RELEASE</spring42-version> <spring4-version>4.2.5.RELEASE</spring4-version> <spring-osgi-version>1.2.1</spring-osgi-version> - <spring-security-version>3.2.8.RELEASE</spring-security-version> + <spring-security-version>4.0.4.RELEASE</spring-security-version> + <spring-security-bundle-version>4.0.3.RELEASE_1</spring-security-bundle-version> <spring-ws-bundle-version>2.2.4.RELEASE_1</spring-ws-bundle-version> <spring-ws-version>2.2.4.RELEASE</spring-ws-version> <spymemcached-bundle-version>2.5_2</spymemcached-bundle-version> <!-- FIXME cmueller: not in sync! --> http://git-wip-us.apache.org/repos/asf/camel/blob/9d7499d2/platforms/karaf/features/src/main/resources/features.xml ---------------------------------------------------------------------- diff --git a/platforms/karaf/features/src/main/resources/features.xml b/platforms/karaf/features/src/main/resources/features.xml index b27b53a..c974bb2 100644 --- a/platforms/karaf/features/src/main/resources/features.xml +++ b/platforms/karaf/features/src/main/resources/features.xml @@ -1515,13 +1515,11 @@ <bundle>mvn:org.apache.camel/camel-spring-redis/${project.version}</bundle> </feature> <feature name='camel-spring-security' version='${project.version}' resolver='(obr)' start-level='50'> - <details>spring-security doesn't support importing spring 4.x </details> <feature>http</feature> + <feature version='${project.version}'>camel-core</feature> <feature version='${spring-version-range}'>spring</feature> - <feature version='${spring-version-range}'>spring-web</feature> - <bundle dependency='true'>mvn:org.springframework.security/spring-security-core/${spring-security-version}</bundle> - <bundle dependency='true'>mvn:org.springframework.security/spring-security-config/${spring-security-version}</bundle> - <bundle dependency='true'>mvn:org.springframework.security/spring-security-web/${spring-security-version}</bundle> + <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.spring-security-core/${spring-security-bundle-version}</bundle> + <bundle dependency='true'>mvn:org.apache.servicemix.bundles/org.apache.servicemix.bundles.spring-security-config/${spring-security-bundle-version}</bundle> <bundle>mvn:org.apache.camel/camel-spring-security/${project.version}</bundle> </feature> <feature name='camel-spring-ws' version='${project.version}' resolver='(obr)' start-level='50'>