From 4efbcaa4ab71c1a04d3b8314f77f90ea958cf022 Mon Sep 17 00:00:00 2001
From: Chamila Adhikarinayake
Date: Thu, 18 Dec 2025 13:31:53 +0530
Subject: [PATCH] Initial Commit
---
.../org.wso2.carbon.feature.mgt.core/pom.xml | 28 +-
.../pom.xml | 10 +-
.../org.wso2.carbon.p2.touchpoint/pom.xml | 4 +-
.../main/java/javax/cache/CacheManager.java | 17 +-
.../caching/impl/CarbonCacheManager.java | 29 +-
.../pom.xml | 2 +-
core/org.wso2.carbon.base/pom.xml | 14 +-
.../base/api/ServerConfigurationService.java | 1 +
.../base/internal/CarbonBaseActivator.java | 10 +-
.../wso2/carbon/base/CarbonBaseUtilsTest.java | 2 +-
.../carbon/base/ServerConfigurationTest.java | 1 +
.../src/test/resources/testng.xml | 32 +
.../bootstrap/CarbonSecurityManager.java | 10 +-
.../org.wso2.carbon.coordination.core/pom.xml | 1 -
core/org.wso2.carbon.core.common/pom.xml | 2 +-
core/org.wso2.carbon.core.services/pom.xml | 6 +-
core/org.wso2.carbon.core/pom.xml | 30 +-
.../carbon/core/init/CarbonServerManager.java | 59 +-
.../core/internal/CarbonCoreActivator.java | 40 +-
.../core/internal/CarbonCoreDataHolder.java | 16 +
.../carbon/core/transports/CarbonServlet.java | 10 +-
.../carbon/core/util/KeyStoreUtilTest.java | 215 ++++
core/org.wso2.carbon.http.bridge/pom.xml | 2 +-
.../ndatasource/core/DataSourceService.java | 8 +
core/org.wso2.carbon.osgi.security/pom.xml | 10 +-
.../pom.xml | 10 -
.../log4j2/plugins/AppNameConverterTest.java | 14 +-
core/org.wso2.carbon.registry.api/pom.xml | 3 +
core/org.wso2.carbon.registry.core/pom.xml | 41 +-
.../registry/app/RemoteRegistryService.java | 2 +
.../core/jdbc/EmbeddedRegistryService.java | 4 +-
.../jdbc/InMemoryEmbeddedRegistryService.java | 3 +
.../core/secure/AuthorizeRoleListener.java | 8 +
.../src/test/resources/testng.xml | 29 +
.../src/main/java/java/sql/NClob.java | 25 -
.../src/main/java/java/sql/RowId.java | 25 -
.../src/main/java/java/sql/SQLXML.java | 25 -
core/org.wso2.carbon.securevault/pom.xml | 5 +-
.../pom.xml | 3 +
.../server/admin/service/ServerAdmin.java | 8 +
core/org.wso2.carbon.tomcat.ext/pom.xml | 12 +-
core/org.wso2.carbon.tomcat/pom.xml | 7 +-
core/org.wso2.carbon.ui/pom.xml | 43 +-
.../carbon/ui/BundleEntryHttpContext.java | 114 ++
.../carbon/ui/CarbonSSOSessionManager.java | 8 +
.../carbon/ui/CarbonSecuredHttpContext.java | 7 +-
.../org/wso2/carbon/ui/CarbonUILoginUtil.java | 14 +-
.../carbon/ui/ContextPathServletAdaptor.java | 382 ++++++
.../carbon/ui/CustomTilesInitializer.java | 26 +
.../ui/CustomTilesInitializerListener.java | 65 +
.../ui/DefaultComponentEntryHttpContext.java | 1 -
.../wso2/carbon/ui/FilterServletAdaptor.java | 89 ++
.../java/org/wso2/carbon/ui/JspServlet.java | 1 +
.../ui/SecuredComponentEntryHttpContext.java | 1 -
.../org/wso2/carbon/ui/TilesJspServlet.java | 99 +-
.../wso2/carbon/ui/UIResourceRegistry.java | 57 +-
.../wso2/carbon/ui/action/ActionHelper.java | 25 +-
.../ui/deployment/UIBundleDeployer.java | 24 +-
.../ui/internal/CarbonUIServiceComponent.java | 88 +-
.../carbon/ui/util/UIResourceProvider.java | 4 +-
.../{tiles/main_defs.xml => tiles.xml} | 0
.../resources/web/WEB-INF/tlds/tiles-jsp.tld | 1136 +++++++++--------
.../src/main/resources/web/WEB-INF/web.xml | 18 +-
core/org.wso2.carbon.user.core/pom.xml | 5 +
.../carbon/user/core/common/DefaultRealm.java | 8 +
core/org.wso2.carbon.utils/pom.xml | 3 +
core/pom.xml | 4 +-
.../org.wso2.carbon.roles.mgt/pom.xml | 2 +-
core/server-role-manager/pom.xml | 1 -
.../features/feature-licensed/1.0.0/pom.xml | 3 +-
.../features/feature-unlicensed/pom.xml | 3 +-
.../features/feature1/1.0.0/pom.xml | 3 +-
.../features/feature1/1.0.1/pom.xml | 3 +-
.../features/feature2/1.0.0/pom.xml | 3 +-
.../features/feature2/1.0.1/pom.xml | 3 +-
.../features/feature3/1.0.0/pom.xml | 3 +-
.../features/feature3/1.0.1/pom.xml | 3 +-
.../licensed-unlicensed-features/pom.xml | 3 +-
.../sample-feature-repo1/repository/pom.xml | 3 +-
.../tests-integration/tests/pom.xml | 33 +-
.../CarbonServerBasicOperationTestCase.java | 11 +-
.../addressing-1.6.1-wso2v116-SNAPSHOT.mar | Bin 0 -> 31565 bytes
.../kernel/carbon-home/bin/wso2server.sh | 2 +-
distribution/kernel/pom.xml | 31 +-
.../org.wso2.carbon.styles.feature/pom.xml | 1 +
.../product/modules/p2-profile-gen/pom.xml | 8 +
.../pom.xml | 13 +-
features/org.wso2.carbon.core.feature/pom.xml | 1 +
.../pom.xml | 277 ++--
.../pom.xml | 6 +
.../org.wso2.carbon.core.ui.feature/pom.xml | 2 +
.../org.wso2.carbon.hazelcast.feature/pom.xml | 1 +
parent/pom.xml | 439 ++++---
samples/pom.xml | 2 +-
.../org.wso2.carbon.student.mgt.ui/pom.xml | 1 -
.../pom.xml | 7 +-
.../pom.xml | 3 +-
.../pom.xml | 3 +-
samples/student-manager/features/pom.xml | 4 -
samples/student-manager/pom.xml | 2 +-
samples/student-manager/repository/pom.xml | 1 +
tests/caching/pom.xml | 4 +-
102 files changed, 2743 insertions(+), 1147 deletions(-)
create mode 100644 core/org.wso2.carbon.base/src/test/resources/testng.xml
create mode 100644 core/org.wso2.carbon.core/src/test/java/org/wso2/carbon/core/util/KeyStoreUtilTest.java
create mode 100644 core/org.wso2.carbon.registry.core/src/test/resources/testng.xml
delete mode 100644 core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/NClob.java
delete mode 100644 core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/RowId.java
delete mode 100644 core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/SQLXML.java
create mode 100644 core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/BundleEntryHttpContext.java
create mode 100644 core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/ContextPathServletAdaptor.java
create mode 100644 core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializer.java
create mode 100644 core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializerListener.java
create mode 100644 core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/FilterServletAdaptor.java
rename core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/{tiles/main_defs.xml => tiles.xml} (100%)
create mode 100644 distribution/integration/tests-integration/tests/src/test/resources/client/modules/addressing-1.6.1-wso2v116-SNAPSHOT.mar
diff --git a/core/feature-manager/org.wso2.carbon.feature.mgt.core/pom.xml b/core/feature-manager/org.wso2.carbon.feature.mgt.core/pom.xml
index 8ad8294e3e2..c2a843181a3 100644
--- a/core/feature-manager/org.wso2.carbon.feature.mgt.core/pom.xml
+++ b/core/feature-manager/org.wso2.carbon.feature.mgt.core/pom.xml
@@ -40,7 +40,7 @@
org.wso2.carbon.utils
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.artifact.repository
@@ -48,7 +48,7 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
@@ -68,7 +68,7 @@
org.eclipse.equinox.http.servlet
- org.eclipse.osgi
+ org.eclipse.platform
org.eclipse.equinox.jsp.jasper
@@ -90,39 +90,39 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.common
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.core
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.director
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.engine
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata.repository
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.repository
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.simpleconfigurator
@@ -162,6 +162,10 @@
org.wso2.carbon.feature.mgt.core.*
+
+
+ osgi.service;objectClass=org.eclipse.equinox.p2.core.IProvisioningAgentProvider
+
diff --git a/core/feature-manager/org.wso2.carbon.feature.mgt.services/pom.xml b/core/feature-manager/org.wso2.carbon.feature.mgt.services/pom.xml
index 3c28f34f958..54f341d1013 100644
--- a/core/feature-manager/org.wso2.carbon.feature.mgt.services/pom.xml
+++ b/core/feature-manager/org.wso2.carbon.feature.mgt.services/pom.xml
@@ -54,23 +54,23 @@
org.wso2.carbon.feature.mgt.core
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.core
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.engine
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.repository
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.common
diff --git a/core/feature-manager/org.wso2.carbon.p2.touchpoint/pom.xml b/core/feature-manager/org.wso2.carbon.p2.touchpoint/pom.xml
index 092fc6a3513..1b77f11487a 100644
--- a/core/feature-manager/org.wso2.carbon.p2.touchpoint/pom.xml
+++ b/core/feature-manager/org.wso2.carbon.p2.touchpoint/pom.xml
@@ -16,11 +16,11 @@
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.common
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.engine
diff --git a/core/javax.cache/src/main/java/javax/cache/CacheManager.java b/core/javax.cache/src/main/java/javax/cache/CacheManager.java
index ba48b75ecb3..9e8eddda562 100644
--- a/core/javax.cache/src/main/java/javax/cache/CacheManager.java
+++ b/core/javax.cache/src/main/java/javax/cache/CacheManager.java
@@ -7,8 +7,6 @@
package javax.cache;
-import javax.transaction.UserTransaction;
-
/**
* A CacheManager is used for looking up Caches and controls their lifecycle. It represents a collection of caches.
*
@@ -127,13 +125,14 @@ public interface CacheManager {
*/
boolean removeCache(String cacheName);
- /**
- * This method will return a UserTransaction.
- *
- * @return the UserTransaction.
- * @throws UnsupportedOperationException if JTA is not supported
- */
- UserTransaction getUserTransaction();
+ // TODO javax.transaction package is no longer available. Need to find a way to add this back
+// /**
+// * This method will return a UserTransaction.
+// *
+// * @return the UserTransaction.
+// * @throws UnsupportedOperationException if JTA is not supported
+// */
+// UserTransaction getUserTransaction();
/**
* Indicates whether a optional feature is supported by this CacheManager.
diff --git a/core/javax.cache/src/main/java/org/wso2/carbon/caching/impl/CarbonCacheManager.java b/core/javax.cache/src/main/java/org/wso2/carbon/caching/impl/CarbonCacheManager.java
index 66329c8344e..14f27cf9ddc 100644
--- a/core/javax.cache/src/main/java/org/wso2/carbon/caching/impl/CarbonCacheManager.java
+++ b/core/javax.cache/src/main/java/org/wso2/carbon/caching/impl/CarbonCacheManager.java
@@ -17,16 +17,10 @@
*/
package org.wso2.carbon.caching.impl;
-import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.base.ServerConfiguration;
+import org.wso2.carbon.context.CarbonContext;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
-import javax.cache.Cache;
-import javax.cache.CacheBuilder;
-import javax.cache.CacheException;
-import javax.cache.CacheManager;
-import javax.cache.OptionalFeature;
-import javax.cache.Status;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
@@ -34,6 +28,13 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
+import javax.cache.Cache;
+import javax.cache.CacheBuilder;
+import javax.cache.CacheException;
+import javax.cache.CacheManager;
+import javax.cache.OptionalFeature;
+import javax.cache.Status;
+
import static org.wso2.carbon.caching.impl.CachingConstants.ILLEGAL_STATE_EXCEPTION_MESSAGE;
/**
@@ -202,13 +203,13 @@ boolean removeLocalCaches() {
return this.caches.isEmpty();
}
- @Override
- public javax.transaction.UserTransaction getUserTransaction() {
- Util.checkAccess(ownerTenantDomain, ownerTenantId);
- checkStatusStarted();
- touch();
- return null; //To change body of implemented methods use File | Settings | File Templates.
- }
+// @Override
+// public javax.transaction.UserTransaction getUserTransaction() {
+// Util.checkAccess(ownerTenantDomain, ownerTenantId);
+// checkStatusStarted();
+// touch();
+// return null; //To change body of implemented methods use File | Settings | File Templates.
+// }
@Override
public boolean isSupported(OptionalFeature optionalFeature) {
diff --git a/core/org.wso2.carbon.application.deployer/pom.xml b/core/org.wso2.carbon.application.deployer/pom.xml
index a18d3c3f103..c9e451aa455 100644
--- a/core/org.wso2.carbon.application.deployer/pom.xml
+++ b/core/org.wso2.carbon.application.deployer/pom.xml
@@ -37,7 +37,7 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
diff --git a/core/org.wso2.carbon.base/pom.xml b/core/org.wso2.carbon.base/pom.xml
index ec034afc811..8cd7923070d 100644
--- a/core/org.wso2.carbon.base/pom.xml
+++ b/core/org.wso2.carbon.base/pom.xml
@@ -36,7 +36,6 @@
org.apache.felix
maven-bundle-plugin
-
true
@@ -48,7 +47,7 @@
org.wso2.carbon.base.*; version="1.0.0"
- javax.activation.*;version="[0.0.0, 1.0.0)",
+ javax.activation.*;version="[1.0.0, 2.0.0)",
javax.servlet; version="${imp.pkg.version.javax.servlet}",
javax.servlet.http; version="${imp.pkg.version.javax.servlet}",
org.wso2.securevault.*,
@@ -59,6 +58,9 @@
*;resolution:=optional
+
+ osgi.service;objectClass=org.wso2.carbon.base.api.ServerConfigurationService
+
@@ -67,12 +69,19 @@
maven-surefire-plugin
true
+
+ --add-opens=java.base/java.lang=ALL-UNNAMED
+ --add-opens=java.base/java.util=ALL-UNNAMED
+
org.wso2.org.ops4j.pax.logging:pax-logging-api
org.apache.logging.log4j.jul.LogManager
+
+ src/test/resources/testng.xml
+
@@ -118,6 +127,7 @@
org.eclipse.equinox
javax.servlet
+
org.wso2.orbit.xerces
xercesImpl
diff --git a/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/api/ServerConfigurationService.java b/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/api/ServerConfigurationService.java
index ba5d1238c4e..76987f80810 100644
--- a/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/api/ServerConfigurationService.java
+++ b/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/api/ServerConfigurationService.java
@@ -1,5 +1,6 @@
package org.wso2.carbon.base.api;
+import org.osgi.service.component.annotations.Component;
import org.w3c.dom.Element;
import java.util.Set;
diff --git a/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/internal/CarbonBaseActivator.java b/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/internal/CarbonBaseActivator.java
index 6d1cec0bbb3..cd53af91503 100644
--- a/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/internal/CarbonBaseActivator.java
+++ b/core/org.wso2.carbon.base/src/main/java/org/wso2/carbon/base/internal/CarbonBaseActivator.java
@@ -22,16 +22,19 @@
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
import org.osgi.framework.ServiceRegistration;
-import org.wso2.carbon.base.CarbonBaseConstants;
import org.wso2.carbon.base.CarbonBaseUtils;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.base.ServerConfigurationException;
import org.wso2.carbon.base.api.ServerConfigurationService;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
import javax.servlet.ServletException;
-import java.io.*;
/**
* Activator of the {@link org.wso2.carbon.base} bundle
@@ -52,7 +55,6 @@ public void start(BundleContext bundleContext) throws Exception {
System.setProperty("portOffset", portOffset);
//register carbon server confg as an OSGi service
registration = bundleContext.registerService(ServerConfigurationService.class.getName(), carbonServerConfiguration, null);
-
}
@Override
diff --git a/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/CarbonBaseUtilsTest.java b/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/CarbonBaseUtilsTest.java
index 2f0937898cb..2d2a5729106 100644
--- a/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/CarbonBaseUtilsTest.java
+++ b/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/CarbonBaseUtilsTest.java
@@ -50,7 +50,7 @@ public void setSecurityManager() {
String resourcePath = resourceURL.getPath();
resourcePath = resourcePath + "policy-test.policy";
System.setProperty("java.security.policy", resourcePath);
- System.setSecurityManager(new SecurityManager());
+// System.setSecurityManager(new SecurityManager());
}
}
diff --git a/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/ServerConfigurationTest.java b/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/ServerConfigurationTest.java
index 9ee214c727e..f2abc748d79 100644
--- a/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/ServerConfigurationTest.java
+++ b/core/org.wso2.carbon.base/src/test/java/org/wso2/carbon/base/ServerConfigurationTest.java
@@ -54,6 +54,7 @@ public void createInstance() throws ServerConfigurationException, NoSuchFieldExc
IllegalAccessException {
assertFalse(getIsInitialized(ServerConfiguration.getInstance(), "isInitialized"));
InputStream inputStream = readFile("carbon.xml");
+ //TODO carbon.home is not set
ServerConfiguration.getInstance().forceInit(inputStream);
assertTrue(getIsInitialized(ServerConfiguration.getInstance(), "isInitialized"));
}
diff --git a/core/org.wso2.carbon.base/src/test/resources/testng.xml b/core/org.wso2.carbon.base/src/test/resources/testng.xml
new file mode 100644
index 00000000000..10e44e3d88c
--- /dev/null
+++ b/core/org.wso2.carbon.base/src/test/resources/testng.xml
@@ -0,0 +1,32 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/core/org.wso2.carbon.bootstrap/src/main/java/org/wso2/carbon/bootstrap/CarbonSecurityManager.java b/core/org.wso2.carbon.bootstrap/src/main/java/org/wso2/carbon/bootstrap/CarbonSecurityManager.java
index d1f2977fb74..fe5129217d0 100644
--- a/core/org.wso2.carbon.bootstrap/src/main/java/org/wso2/carbon/bootstrap/CarbonSecurityManager.java
+++ b/core/org.wso2.carbon.bootstrap/src/main/java/org/wso2/carbon/bootstrap/CarbonSecurityManager.java
@@ -18,8 +18,6 @@
package org.wso2.carbon.bootstrap;
-import sun.security.util.SecurityConstants;
-
import java.security.AccessControlContext;
import java.security.AccessControlException;
import java.security.Policy;
@@ -33,7 +31,9 @@
public class CarbonSecurityManager extends SecurityManager {
private List deniedProperties = new ArrayList();
-
+ // String replacement of sun.security.util.SecurityConstants.MODIFY_THREADGROUP_PERMISSION
+ private static final RuntimePermission MODIFY_THREADGROUP_PERMISSION =
+ new RuntimePermission("modifyThreadGroup");
public CarbonSecurityManager() {
super();
String deniedSystemPropertyString = System.getProperty("denied.system.properties");
@@ -86,7 +86,7 @@ public void checkAccess(ThreadGroup g) {
throw new NullPointerException("thread group can't be null");
}
- checkPermission(SecurityConstants.MODIFY_THREADGROUP_PERMISSION);
+ checkPermission(MODIFY_THREADGROUP_PERMISSION);
}
/**
@@ -100,7 +100,7 @@ public void checkAccess(Thread t) {
throw new NullPointerException("thread can't be null");
}
- checkPermission(SecurityConstants.MODIFY_THREADGROUP_PERMISSION);
+ checkPermission(MODIFY_THREADGROUP_PERMISSION);
}
diff --git a/core/org.wso2.carbon.coordination.core/pom.xml b/core/org.wso2.carbon.coordination.core/pom.xml
index 7e3ceeeabb1..200d9e8329e 100644
--- a/core/org.wso2.carbon.coordination.core/pom.xml
+++ b/core/org.wso2.carbon.coordination.core/pom.xml
@@ -89,7 +89,6 @@
org.apache.felix
maven-bundle-plugin
- 1.4.0
true
diff --git a/core/org.wso2.carbon.core.common/pom.xml b/core/org.wso2.carbon.core.common/pom.xml
index 5928d5b058b..a8cabfd088e 100644
--- a/core/org.wso2.carbon.core.common/pom.xml
+++ b/core/org.wso2.carbon.core.common/pom.xml
@@ -57,7 +57,7 @@
!org.wso2.carbon.core.common.*,
- javax.activation.*;version="[0.0.0, 1.0.0)"
+ javax.activation.*;version="[1.0.0, 2.0.0)"
diff --git a/core/org.wso2.carbon.core.services/pom.xml b/core/org.wso2.carbon.core.services/pom.xml
index 6e3c52e6053..b7e1163c160 100644
--- a/core/org.wso2.carbon.core.services/pom.xml
+++ b/core/org.wso2.carbon.core.services/pom.xml
@@ -37,7 +37,11 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.equinox
+ javax.servlet
+
+
+ org.eclipse.platform
org.eclipse.osgi.services
diff --git a/core/org.wso2.carbon.core/pom.xml b/core/org.wso2.carbon.core/pom.xml
index aea60f45b3b..610bd0dda3c 100644
--- a/core/org.wso2.carbon.core/pom.xml
+++ b/core/org.wso2.carbon.core/pom.xml
@@ -37,13 +37,24 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
- org.eclipse.osgi.services
+ org.eclipse.equinox
+ javax.servlet
+ ${version.equinox.javax.servlet}
- org.eclipse.equinox
- org.eclipse.equinox.http.helper
+ org.eclipse.platform
+ org.eclipse.osgi.services
+
+
+ org.eclipse.jetty.toolchain
+ jetty-servlet
+
+
+
+
+
+
junit
junit
@@ -118,6 +129,11 @@
com.google.code.gson
gson
+
+ org.mockito
+ mockito-core
+ test
+
org.apache.tomcat
tomcat-catalina-ha
@@ -243,6 +259,9 @@
naming-factory|naming-resources|commons-collections;scope=compile|runtime;inline=false
+
+ osgi.service;objectClass=org.wso2.carbon.utils.ConfigurationContextService
+
true
*
@@ -269,6 +288,9 @@
org.apache.logging.log4j.jul.LogManager
+
+ src/test/resources/testng.xml
+
diff --git a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
index f9d5dc02b1d..acf0dcdcc81 100644
--- a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
+++ b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/init/CarbonServerManager.java
@@ -36,19 +36,21 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.core.runtime.adaptor.EclipseStarter;
-import org.eclipse.equinox.http.helper.FilterServletAdaptor;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceEvent;
import org.osgi.framework.ServiceReference;
+import org.osgi.framework.ServiceRegistration;
import org.osgi.service.http.HttpContext;
import org.osgi.service.http.HttpService;
-import org.osgi.service.http.NamespaceException;
+import org.osgi.service.http.context.ServletContextHelper;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.base.CarbonBaseConstants;
import org.wso2.carbon.base.CarbonContextHolderBase;
import org.wso2.carbon.base.api.ServerConfigurationService;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.core.CarbonAxisConfigurator;
import org.wso2.carbon.core.CarbonConfigurationContextFactory;
import org.wso2.carbon.core.CarbonThreadCleanup;
@@ -61,10 +63,9 @@
import org.wso2.carbon.core.deployment.RegistryBasedRepositoryUpdater;
import org.wso2.carbon.core.internal.CarbonCoreDataHolder;
import org.wso2.carbon.core.internal.CarbonCoreServiceComponent;
-import org.wso2.carbon.core.multitenancy.GenericArtifactUnloader;
import org.wso2.carbon.core.internal.HTTPGetProcessorListener;
+import org.wso2.carbon.core.multitenancy.GenericArtifactUnloader;
import org.wso2.carbon.core.multitenancy.MultitenantServerManager;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
import org.wso2.carbon.core.multitenancy.utils.TenantAxisUtils;
import org.wso2.carbon.core.security.CarbonJMXAuthenticator;
import org.wso2.carbon.core.transports.CarbonServlet;
@@ -92,8 +93,6 @@
import org.wso2.carbon.utils.deployment.GhostDeployerUtils;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
-import javax.servlet.Filter;
-import javax.servlet.ServletException;
import java.io.File;
import java.io.IOException;
import java.io.OutputStream;
@@ -102,6 +101,7 @@
import java.util.Date;
import java.util.Dictionary;
import java.util.Enumeration;
+import java.util.Hashtable;
import java.util.Map;
import java.util.Timer;
import java.util.TimerTask;
@@ -116,6 +116,10 @@
import java.util.logging.Logger;
import java.util.logging.SimpleFormatter;
+import javax.servlet.Filter;
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
import static org.apache.axis2.transport.TransportListener.HOST_ADDRESS;
/**
@@ -487,9 +491,10 @@ private void initializeCarbon() {
}
HttpService httpService = CarbonCoreDataHolder.getInstance().getHttpService();
+ // TODO might want to do this differently
HttpContext defaultHttpContext = httpService.createDefaultHttpContext();
- registerCarbonServlet(httpService, defaultHttpContext);
+ registerCarbonServlet(defaultHttpContext);
RealmService realmService = CarbonCoreDataHolder.getInstance().getRealmService();
UserRealm teannt0Realm = realmService.getBootstrapRealm();
@@ -539,8 +544,8 @@ private void initializeCarbon() {
}
}
- private void registerCarbonServlet(HttpService httpService, HttpContext defaultHttpContext)
- throws ServletException, NamespaceException, InvalidSyntaxException {
+ private void registerCarbonServlet(HttpContext defaultHttpContext) throws InvalidSyntaxException {
+
if (!"false".equals(serverConfig.getFirstProperty("RequireCarbonServlet"))) {
CarbonServlet carbonServlet = new CarbonServlet(serverConfigContext);
String servicePath = "/services";
@@ -552,11 +557,30 @@ private void registerCarbonServlet(HttpService httpService, HttpContext defaultH
servicePath = "/" + servicePath;
}
ServiceReference filterServiceReference = bundleContext.getServiceReference(Filter.class.getName());
+
+ Dictionary resourceProps = new Hashtable<>();
+ resourceProps.put("osgi.http.whiteboard.context.name", "serviceContext");
+ resourceProps.put("osgi.http.whiteboard.context.path", servicePath);
+ resourceProps.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, servicePath + "/*");
+ ServiceRegistration servletContextHelperServiceRegistration =
+ bundleContext.registerService(ServletContextHelper.class, (ServletContextHelper) defaultHttpContext,
+ resourceProps);
+ CarbonCoreDataHolder.getInstance().addServiceRegistration(servletContextHelperServiceRegistration);
+
+ Dictionary carbonServletProperties = new Hashtable<>();
+ carbonServletProperties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/*");
+ carbonServletProperties.put("osgi.http.whiteboard.context.select", "(osgi.http.whiteboard.context.name=serviceContext)");
+ ServiceRegistration servletServiceRegistration =
+ bundleContext.registerService(Servlet.class, carbonServlet, carbonServletProperties);
+ CarbonCoreDataHolder.getInstance().addServiceRegistration(servletServiceRegistration);
+
if (filterServiceReference != null) {
Filter filter = (Filter) bundleContext.getService(filterServiceReference);
- httpService.registerServlet(servicePath, new FilterServletAdaptor(filter, null, carbonServlet), null, defaultHttpContext);
- } else {
- httpService.registerServlet(servicePath, carbonServlet, null, defaultHttpContext);
+ Dictionary props = new Hashtable<>();
+ props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, servicePath);
+ ServiceRegistration filterServiceRegistration =
+ bundleContext.registerService(Filter.class, filter, props);
+ CarbonCoreDataHolder.getInstance().addServiceRegistration(filterServiceRegistration);
}
HTTPGetProcessorListener getProcessorListener =
new HTTPGetProcessorListener(carbonServlet, bundleContext);
@@ -941,17 +965,8 @@ public void stop() throws Exception {
((Map) property).clear();
}
- // un-registering the carbonServlet
- String servicePath = "/services"; // default path
- String path = serverConfigContext.getServicePath();
- if (path != null) {
- servicePath = path.trim();
- }
- if (!servicePath.startsWith("/")) {
- servicePath = "/" + servicePath;
- }
try {
- CarbonCoreDataHolder.getInstance().getHttpService().unregister(servicePath);
+ CarbonCoreDataHolder.getInstance().unregisterServiceRegistrations();
} catch (Exception e) {
log.error("Failed to Un-register Servlets ", e);
}
diff --git a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
index 3d61f6575bb..1dfb2cc62bb 100644
--- a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
+++ b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreActivator.java
@@ -38,10 +38,10 @@ public class CarbonCoreActivator implements BundleActivator {
public void start(BundleContext context) throws Exception {
// Need permissions in order to activate Carbon Core
- SecurityManager secMan = System.getSecurityManager();
- if (secMan != null) {
- secMan.checkPermission(new ManagementPermission("control"));
- }
+// SecurityManager secMan = System.getSecurityManager();
+// if (secMan != null) {
+// secMan.checkPermission(new ManagementPermission("control"));
+// }
// We assume it's super tenant during the deployment time
PrivilegedCarbonContext privilegedCarbonContext = PrivilegedCarbonContext
.getThreadLocalCarbonContext();
@@ -70,12 +70,32 @@ public void start(BundleContext context) throws Exception {
System.getProperty("user.language") + "-" + System.getProperty("user.country") +
", " + System.getProperty("user.timezone"));
- String cryptoProviderIdentifier = getPreferredJceProviderIdentifier();
- String cryptoProviderClass = getPreferredJceProviderClass(cryptoProviderIdentifier);
- Security.addProvider((Provider) Class.forName(cryptoProviderClass).getDeclaredConstructor().newInstance());
- if(log.isDebugEnabled()){
- log.debug(cryptoProviderClass + " security provider is successfully registered in JVM.");
- }
+// String providerName = ServerConfiguration.getInstance().getFirstProperty(ServerConstants.JCE_PROVIDER);
+// Provider provider;
+// if (StringUtils.isBlank(providerName) || providerName.equals(ServerConstants.JCE_PROVIDER_BC)) {
+// provider = (Provider) (Class.forName("org.bouncycastle.jce.provider.BouncyCastleProvider")).
+// getDeclaredConstructor().newInstance();
+//
+// // Add BouncyCastle JSSE provider and preferred named groups for outbound communication.
+// String jsseProviderName = ServerConfiguration.getInstance().getFirstProperty(ServerConstants.JSSE_PROVIDER);
+// if (ServerConstants.JSSE_PROVIDER_BC.equals(jsseProviderName)) {
+// Provider jsseProvider = (Provider)
+// (Class.forName("org.bouncycastle.jsse.provider.BouncyCastleJsseProvider")).
+// getDeclaredConstructor().newInstance();
+// Security.insertProviderAt(jsseProvider, 1);
+// }
+//
+// } else if (providerName.equals(ServerConstants.JCE_PROVIDER_BCFIPS)) {
+// provider = (Provider) (Class.forName("org.bouncycastle.jcajce.provider.BouncyCastleFipsProvider")).
+// getDeclaredConstructor().newInstance();
+//
+// } else {
+// throw new NoSuchProviderException("Configured JCE provider is not supported.");
+// }
+// Security.addProvider(provider);
+// if (log.isDebugEnabled()) {
+// log.debug(providerName + " security provider is successfully registered in JVM.");
+// }
}
public void stop(BundleContext context) throws Exception {
diff --git a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreDataHolder.java b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreDataHolder.java
index 00c1e8272b3..86cb2276f7c 100644
--- a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreDataHolder.java
+++ b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/internal/CarbonCoreDataHolder.java
@@ -20,7 +20,9 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
import org.osgi.service.http.HttpService;
+import org.osgi.service.http.context.ServletContextHelper;
import org.wso2.carbon.base.api.ServerConfigurationService;
import org.wso2.carbon.crypto.api.CryptoService;
import org.wso2.carbon.registry.core.service.RegistryService;
@@ -47,6 +49,8 @@ public class CarbonCoreDataHolder {
private ServerConfigurationService serverConfigurationService;
private TenantRegistryLoader tenantRegistryLoader;
+ private List> serviceRegistrations = new ArrayList<>();
+
private List coordinatedActivities = new ArrayList() ;
private CryptoService cryptoService;
@@ -166,4 +170,16 @@ public CryptoService getCryptoService() {
return cryptoService;
}
+
+ public void addServiceRegistration(ServiceRegistration> serviceRegistration) {
+
+ serviceRegistrations.add(serviceRegistration);
+ }
+
+ public void unregisterServiceRegistrations() {
+
+ for (ServiceRegistration> serviceRegistration : serviceRegistrations) {
+ serviceRegistration.unregister();
+ }
+ }
}
diff --git a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/transports/CarbonServlet.java b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/transports/CarbonServlet.java
index d322bb36a45..c9471794ffe 100644
--- a/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/transports/CarbonServlet.java
+++ b/core/org.wso2.carbon.core/src/main/java/org/wso2/carbon/core/transports/CarbonServlet.java
@@ -83,15 +83,21 @@ public void init(ServletConfig config) throws ServletException {
configContext.setProperty("GETRequestProcessorMap", getRequestProcessors);
initParams();
String isMeteringEnabledStr = ServerConfiguration.getInstance().getFirstProperty("EnableMetering");
- if(isMeteringEnabledStr!=null){
+ if (isMeteringEnabledStr != null) {
isMeteringEnabled = Boolean.parseBoolean(isMeteringEnabledStr);
}
- if(isMeteringEnabled){
+ if (isMeteringEnabled) {
requestDataPersister = new RequestDataPersisterTask();
new Thread(requestDataPersister).start();
requestDataPersisterScheduler.scheduleWithFixedDelay(requestDataPersister, 5,
5, TimeUnit.SECONDS);
}
+ contextRoot = this.configContext.getContextRoot();
+ }
+
+ public ServletConfig getServletConfig() {
+
+ return servletConfig;
}
private void populateGetRequestProcessors() throws ServletException {
diff --git a/core/org.wso2.carbon.core/src/test/java/org/wso2/carbon/core/util/KeyStoreUtilTest.java b/core/org.wso2.carbon.core/src/test/java/org/wso2/carbon/core/util/KeyStoreUtilTest.java
new file mode 100644
index 00000000000..3b0c93d272b
--- /dev/null
+++ b/core/org.wso2.carbon.core/src/test/java/org/wso2/carbon/core/util/KeyStoreUtilTest.java
@@ -0,0 +1,215 @@
+/*
+ * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com).
+ *
+ * WSO2 LLC. 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.wso2.carbon.core.util;
+
+import org.apache.axiom.om.OMElement;
+import org.mockito.Mock;
+import org.mockito.MockedStatic;
+import org.testng.annotations.BeforeClass;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+import org.wso2.carbon.CarbonException;
+import org.wso2.carbon.base.CarbonBaseConstants;
+import org.wso2.carbon.base.ServerConfiguration;
+import org.wso2.carbon.base.api.ServerConfigurationService;
+import org.wso2.carbon.core.RegistryResources;
+import org.wso2.carbon.core.internal.CarbonCoreDataHolder;
+import org.wso2.carbon.utils.ServerConstants;
+
+import java.nio.file.Paths;
+
+import javax.xml.namespace.QName;
+
+import static org.mockito.Mockito.mockStatic;
+import static org.mockito.Mockito.when;
+import static org.mockito.MockitoAnnotations.initMocks;
+import static org.testng.Assert.assertEquals;
+import static org.testng.Assert.fail;
+
+public class KeyStoreUtilTest {
+
+ private static final String basedir = Paths.get("").toAbsolutePath().toString();
+ private static final String testDir = Paths.get(basedir, "src", "test", "resources").toString();
+
+ @Mock
+ private ServerConfigurationService serverConfigurationService;
+ @Mock
+ private CarbonCoreDataHolder carbonCoreDataHolder;
+
+ @BeforeClass
+ public void setUp() throws Exception {
+
+ initMocks(this);
+ System.setProperty(CarbonBaseConstants.CARBON_HOME,
+ Paths.get(System.getProperty("user.dir"), "src", "test", "resources").toString());
+ }
+
+ @DataProvider(name = "PrimaryStoreDataProvider")
+ public Object[][] primaryStoreDataProvider() {
+ return new Object[][] {
+ {"wso2carbon.jks", true},
+ {"", false},
+ {"nonexistent.jks", false}
+ };
+ }
+
+ @Test(dataProvider = "PrimaryStoreDataProvider")
+ public void isPrimaryStore(String keyStoreId, boolean expectedResult) {
+
+ String primaryKeystoreFile = testDir + "/wso2carbon.jks";
+ try (MockedStatic carbonCoreDataHolder = mockStatic(CarbonCoreDataHolder.class)) {
+
+ carbonCoreDataHolder.when(CarbonCoreDataHolder::getInstance).thenReturn(this.carbonCoreDataHolder);
+ when(this.carbonCoreDataHolder.getServerConfigurationService()).thenReturn(serverConfigurationService);
+ when(serverConfigurationService.getFirstProperty(
+ RegistryResources.SecurityManagement.SERVER_PRIMARY_KEYSTORE_FILE)).thenReturn(primaryKeystoreFile);
+ assertEquals(KeyStoreUtil.isPrimaryStore(keyStoreId), expectedResult);
+ }
+ }
+
+ @DataProvider(name = "TrustStoreDataProvider")
+ public Object[][] trustStoreDataProvider() {
+ return new Object[][] {
+ {"client-truststore.p12", true},
+ {"", false},
+ {"nonexistent.jks", false}
+ };
+ }
+
+ @Test(dataProvider = "TrustStoreDataProvider")
+ public void isTrustStore(String keyStoreId, boolean expectedResult) {
+
+ String trustStoreFile = testDir + "/client-truststore.p12";
+ try (MockedStatic carbonCoreDataHolder = mockStatic(CarbonCoreDataHolder.class)) {
+
+ carbonCoreDataHolder.when(CarbonCoreDataHolder::getInstance).thenReturn(this.carbonCoreDataHolder);
+ when(this.carbonCoreDataHolder.getServerConfigurationService()).thenReturn(serverConfigurationService);
+ when(serverConfigurationService.getFirstProperty(
+ RegistryResources.SecurityManagement.SERVER_TRUSTSTORE_FILE)).thenReturn(trustStoreFile);
+ assertEquals(KeyStoreUtil.isTrustStore(keyStoreId), expectedResult);
+ }
+ }
+
+ @DataProvider(name = "KeyStoreNameDataProvider")
+ public Object[][] keyStoreNameDataProvider() {
+
+ return new Object[][] {
+ {"CUSTOM/myKeyStore", true},
+ {"CUSTOM/@#$_keyStore", true},
+ {"abcd", false},
+ {"", false},
+ {" ", false},
+ };
+ }
+
+ @Test(dataProvider = "KeyStoreNameDataProvider")
+ public void testIsCustomKeyStore(String keyStoreName, boolean expectedResult) {
+
+ assertEquals(KeyStoreUtil.isCustomKeyStore(keyStoreName), expectedResult);
+ }
+
+ @DataProvider(name = "QNameWithCarbonNSDataProvider")
+ public String[] qNameWithCarbonNSDataProvider() {
+
+ return new String[] {
+ "localPart",
+ "",
+ };
+ }
+
+ @Test(dataProvider = "QNameWithCarbonNSDataProvider")
+ public void testGetQNameWithCarbonNS(String localPart) {
+
+ QName qName = KeyStoreUtil.getQNameWithCarbonNS(localPart);
+ assertEquals(ServerConstants.CARBON_SERVER_XML_NAMESPACE, qName.getNamespaceURI());
+ assertEquals(localPart, qName.getLocalPart());
+ }
+
+ @DataProvider(name = "CustomKeyStoreConfigDataProvider")
+ public String[][] customKeyStoreConfigDataProvider() {
+
+ return new String[][] {
+ {"custom.jks", "Location", basedir + "/./repository/resources/security/custom.jks"},
+ {"custom.jks", "Type", "JKS"},
+ {"custom.jks", "Password", "customPassword"},
+ {"custom.jks", "KeyAlias", "customAlias"},
+ {"custom.jks", "KeyPassword", "customKeyPass"},
+ {"testKey.jks", "Location", basedir + "/./repository/resources/security/testKey.jks"},
+ {"testKey.jks", "Type", "JKS"},
+ {"testKey.jks", "Password", "testPass"},
+ {"testKey.jks", "KeyAlias", "testKey"},
+ {"testKey.jks", "KeyPassword", "testKeyPass"}
+ };
+ }
+
+ // This test covers both getCustomKeyStoreConfigElement and getCustomKeyStoreConfig methods
+ @Test(dataProvider = "CustomKeyStoreConfigDataProvider")
+ public void testReadCustomKeyStoreConfigs(String keyStoreName, String configName, String expectedValue) {
+
+ try {
+ String serverConfigPath = Paths.get(testDir, "carbon.xml").toString();
+ ServerConfiguration serverConfiguration = ServerConfiguration.getInstance();
+ serverConfiguration.forceInit(serverConfigPath);
+ OMElement keyStoreConfigElement = KeyStoreUtil.getCustomKeyStoreConfigElement(keyStoreName, serverConfiguration);
+ assertEquals(KeyStoreUtil.getCustomKeyStoreConfig(keyStoreConfigElement, configName), expectedValue);
+ } catch (Exception e) {
+ System.out.println("Exception occurred: " + e.getMessage());
+ e.printStackTrace();
+ fail();
+ }
+ }
+
+ @DataProvider(name = "CorrectKeyStoreConfigDataProvider")
+ public String[] correctKeyStoreConfigDataProvider() {
+
+ return new String[] {
+ "Location",
+ "Type",
+ "Password",
+ "KeyAlias",
+ "KeyPassword"
+ };
+ }
+
+ @Test(dataProvider = "CorrectKeyStoreConfigDataProvider")
+ public void testValidateCorrectKeyStoreConfigNames(String configName) {
+
+ try {
+ KeyStoreUtil.validateKeyStoreConfigName(configName);
+ } catch (CarbonException e) {
+ fail();
+ }
+ }
+
+ @DataProvider(name = "IncorrectKeyStoreConfigDataProvider")
+ public String[] incorrectKeyStoreConfigDataProvider() {
+
+ return new String[] {
+ "ABCD",
+ "",
+ " "
+ };
+ }
+
+ @Test(dataProvider = "IncorrectKeyStoreConfigDataProvider", expectedExceptions = CarbonException.class)
+ public void testValidateIncorrectKeyStoreConfigName(String configName) throws Exception {
+
+ KeyStoreUtil.validateKeyStoreConfigName(configName);
+ }
+}
diff --git a/core/org.wso2.carbon.http.bridge/pom.xml b/core/org.wso2.carbon.http.bridge/pom.xml
index cd04527f8ae..b6b396c80ad 100644
--- a/core/org.wso2.carbon.http.bridge/pom.xml
+++ b/core/org.wso2.carbon.http.bridge/pom.xml
@@ -54,7 +54,7 @@
org.wso2.carbon.bridge
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.http.servlet
diff --git a/core/org.wso2.carbon.ndatasource.core/src/main/java/org/wso2/carbon/ndatasource/core/DataSourceService.java b/core/org.wso2.carbon.ndatasource.core/src/main/java/org/wso2/carbon/ndatasource/core/DataSourceService.java
index 2ec5ac60802..31ec0719bae 100644
--- a/core/org.wso2.carbon.ndatasource.core/src/main/java/org/wso2/carbon/ndatasource/core/DataSourceService.java
+++ b/core/org.wso2.carbon.ndatasource.core/src/main/java/org/wso2/carbon/ndatasource/core/DataSourceService.java
@@ -18,11 +18,19 @@
import java.util.ArrayList;
import java.util.List;
+import org.osgi.annotation.bundle.Capability;
import org.wso2.carbon.ndatasource.common.DataSourceException;
/**
* This class represents the data source OSGi service.
*/
+@Capability(
+ namespace = "osgi.service",
+ attribute = {
+ "objectClass=org.wso2.carbon.ndatasource.core.DataSourceService",
+ "service.scope=singleton"
+ }
+)
public class DataSourceService {
public List getAllDataSources() throws DataSourceException {
diff --git a/core/org.wso2.carbon.osgi.security/pom.xml b/core/org.wso2.carbon.osgi.security/pom.xml
index 299b23772b6..8767a007132 100644
--- a/core/org.wso2.carbon.osgi.security/pom.xml
+++ b/core/org.wso2.carbon.osgi.security/pom.xml
@@ -39,13 +39,13 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
-
- org.eclipse.equinox
- org.eclipse.equinox.http.helper
-
+
+
+
+
junit
junit
diff --git a/core/org.wso2.carbon.pax-logging-log4j2-plugins/pom.xml b/core/org.wso2.carbon.pax-logging-log4j2-plugins/pom.xml
index 58e3f0f94b6..cd8774abb53 100644
--- a/core/org.wso2.carbon.pax-logging-log4j2-plugins/pom.xml
+++ b/core/org.wso2.carbon.pax-logging-log4j2-plugins/pom.xml
@@ -63,16 +63,6 @@
mockito-core
test
-
- org.powermock
- powermock-module-testng
- test
-
-
- org.powermock
- powermock-api-mockito2
- test
-
org.apache.logging.log4j
log4j-jul
diff --git a/core/org.wso2.carbon.pax-logging-log4j2-plugins/src/test/java/org/wso2/carbon/log4j2/plugins/AppNameConverterTest.java b/core/org.wso2.carbon.pax-logging-log4j2-plugins/src/test/java/org/wso2/carbon/log4j2/plugins/AppNameConverterTest.java
index 4dafc9798c5..a6ce6895308 100644
--- a/core/org.wso2.carbon.pax-logging-log4j2-plugins/src/test/java/org/wso2/carbon/log4j2/plugins/AppNameConverterTest.java
+++ b/core/org.wso2.carbon.pax-logging-log4j2-plugins/src/test/java/org/wso2/carbon/log4j2/plugins/AppNameConverterTest.java
@@ -21,32 +21,20 @@
import org.apache.logging.log4j.core.impl.Log4jLogEvent;
import org.apache.logging.log4j.message.Message;
import org.apache.logging.log4j.message.SimpleMessage;
-import org.powermock.modules.testng.PowerMockTestCase;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
-import org.wso2.carbon.context.PrivilegedCarbonContext;
-
-import java.io.File;
import static org.testng.Assert.assertEquals;
/**
* Tests AppNameConverter class.
*/
-public class AppNameConverterTest extends PowerMockTestCase {
+public class AppNameConverterTest {
private AppNameConverter appNameConverter;
private LogEvent logEvent;
private static final String APP_NAME = "appName";
- public AppNameConverterTest() {
- System.setProperty("carbon.home", new File(".").getAbsolutePath());
- PrivilegedCarbonContext cc = PrivilegedCarbonContext.getThreadLocalCarbonContext();
- cc.setTenantDomain("carbon.super");
- cc.setTenantId(-1234);
- PrivilegedCarbonContext.startTenantFlow();
- }
-
/**
* Creates a log event to test appending of the AppName.
*/
diff --git a/core/org.wso2.carbon.registry.api/pom.xml b/core/org.wso2.carbon.registry.api/pom.xml
index 8bb5d432ac7..c4a153ed89b 100644
--- a/core/org.wso2.carbon.registry.api/pom.xml
+++ b/core/org.wso2.carbon.registry.api/pom.xml
@@ -46,6 +46,9 @@
!javax.servlet.http,
org.wso2.carbon.registry.api.*;version=1.0.1,
+
+ !*
+
diff --git a/core/org.wso2.carbon.registry.core/pom.xml b/core/org.wso2.carbon.registry.core/pom.xml
index 964eb47c953..ac95d17865a 100644
--- a/core/org.wso2.carbon.registry.core/pom.xml
+++ b/core/org.wso2.carbon.registry.core/pom.xml
@@ -54,7 +54,7 @@
org.wso2.carbon.user.*,
org.wso2.carbon.utils.*,
!javax.xml.namespace,
- javax.activation.*;version="[0.0.0, 1.0.0)",
+ javax.activation.*;version="[1.0.0, 2.0.0)",
org.apache.abdera.*; version="${imp.pkg.version.abdera}",
javax.xml.namespace; version=0.0.0,
javax.servlet; version="${imp.pkg.version.javax.servlet}",
@@ -68,6 +68,11 @@
*;resolution:=optional
*
+
+ osgi.service;objectClass=org.wso2.carbon.registry.core.service.RegistryService,
+ osgi.service;objectClass=org.wso2.carbon.registry.api.RegistryService,
+ osgi.service;objectClass=org.wso2.carbon.registry.core.service.TenantRegistryLoader
+
acegi-security;scope=compile|runtime;inline=false
@@ -102,7 +107,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-0
@@ -126,7 +132,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-1
@@ -150,7 +157,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-2
@@ -174,7 +182,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-3
@@ -198,7 +207,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-4
@@ -226,7 +236,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-5
@@ -254,7 +265,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-6
@@ -282,7 +294,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-7
@@ -310,7 +323,8 @@
false
- pertest
+ 1
+ false
-enableassertions
false
${project.build.directory}/surefire-reports-8
@@ -376,9 +390,14 @@
annotations
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
+
+
+
+
+
junit
junit
diff --git a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/app/RemoteRegistryService.java b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/app/RemoteRegistryService.java
index d4cc7baa286..40a620805a2 100644
--- a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/app/RemoteRegistryService.java
+++ b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/app/RemoteRegistryService.java
@@ -19,6 +19,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.osgi.service.component.annotations.Component;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.registry.core.Registry;
import org.wso2.carbon.registry.core.RegistryConstants;
@@ -42,6 +43,7 @@
* to create remote registry instances for user sessions. The class acts in a manner that is similar
* to an {@link EmbeddedRegistryService}.
*/
+//@Component(service = RegistryService.class)
public class RemoteRegistryService implements RegistryService {
private static final Log log = LogFactory.getLog(RemoteRegistryService.class);
diff --git a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/EmbeddedRegistryService.java b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/EmbeddedRegistryService.java
index da4a63516e4..dc38fd42161 100644
--- a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/EmbeddedRegistryService.java
+++ b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/EmbeddedRegistryService.java
@@ -18,6 +18,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.osgi.service.component.annotations.Component;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.registry.core.RegistryConstants;
import org.wso2.carbon.registry.core.clustering.NodeGroupLock;
@@ -25,7 +26,6 @@
import org.wso2.carbon.registry.core.config.RegistryContext;
import org.wso2.carbon.registry.core.dataaccess.DataAccessManager;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
-import org.wso2.carbon.registry.core.internal.RegistryCoreServiceComponent;
import org.wso2.carbon.registry.core.jdbc.dataaccess.JDBCDataAccessManager;
import org.wso2.carbon.registry.core.jdbc.realm.RegistryRealm;
import org.wso2.carbon.registry.core.jdbc.utils.Transaction;
@@ -35,7 +35,6 @@
import org.wso2.carbon.user.api.UserStoreException;
import org.wso2.carbon.user.core.UserRealm;
import org.wso2.carbon.user.core.service.RealmService;
-import org.wso2.carbon.user.core.util.UserCoreUtil;
import org.wso2.carbon.utils.multitenancy.MultitenantConstants;
import org.wso2.carbon.utils.multitenancy.MultitenantUtils;
@@ -71,6 +70,7 @@
* @see EmbeddedRegistry
* @see UserRegistry
*/
+//@Component(service = RegistryService.class)
public class EmbeddedRegistryService implements RegistryService {
private static final Log log = LogFactory.getLog(EmbeddedRegistryService.class);
diff --git a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/InMemoryEmbeddedRegistryService.java b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/InMemoryEmbeddedRegistryService.java
index 27552d76c1f..cb2c9de1a3f 100644
--- a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/InMemoryEmbeddedRegistryService.java
+++ b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/jdbc/InMemoryEmbeddedRegistryService.java
@@ -16,9 +16,11 @@
package org.wso2.carbon.registry.core.jdbc;
+import org.osgi.service.component.annotations.Component;
import org.wso2.carbon.registry.core.config.RegistryContext;
import org.wso2.carbon.registry.core.exceptions.RegistryException;
import org.wso2.carbon.registry.core.jdbc.realm.InMemoryRealmService;
+import org.wso2.carbon.registry.core.service.RegistryService;
import org.wso2.carbon.user.api.RealmConfiguration;
import org.wso2.carbon.user.core.service.RealmService;
@@ -28,6 +30,7 @@
* This is an extension to the {@link EmbeddedRegistryService} which is tailored to expose {@link
* InMemoryEmbeddedRegistry} instances as OSGi services.
*/
+//@Component(service = RegistryService.class)
public class InMemoryEmbeddedRegistryService extends EmbeddedRegistryService {
private RealmService realmService;
diff --git a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/secure/AuthorizeRoleListener.java b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/secure/AuthorizeRoleListener.java
index 03c934118e4..cdb6a415f55 100644
--- a/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/secure/AuthorizeRoleListener.java
+++ b/core/org.wso2.carbon.registry.core/src/main/java/org/wso2/carbon/registry/core/secure/AuthorizeRoleListener.java
@@ -20,6 +20,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.osgi.annotation.bundle.Capability;
import org.wso2.carbon.registry.core.ActionConstants;
import org.wso2.carbon.registry.core.config.RegistryContext;
import org.wso2.carbon.registry.core.utils.RegistryUtils;
@@ -37,6 +38,13 @@
* permissions to registry resource permissions and thereby manage accessibility to various resource
* paths based on the amount of permissions available to a given role.
*/
+@Capability(
+ namespace = "osgi.service",
+ attribute = {
+ "objectClass=org.wso2.carbon.user.core.listener.AuthorizationManagerListener",
+ "service.scope=singleton"
+ }
+)
public class AuthorizeRoleListener extends AbstractAuthorizationManagerListener
implements AuthorizationManagerListener {
diff --git a/core/org.wso2.carbon.registry.core/src/test/resources/testng.xml b/core/org.wso2.carbon.registry.core/src/test/resources/testng.xml
new file mode 100644
index 00000000000..9e60b4c8c4c
--- /dev/null
+++ b/core/org.wso2.carbon.registry.core/src/test/resources/testng.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/NClob.java b/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/NClob.java
deleted file mode 100644
index 7571e44674a..00000000000
--- a/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/NClob.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2005-2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. 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 java.sql;
-
-/**
- * Dummy implementation of NClob in JDK6
- */
-public interface NClob {
-}
diff --git a/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/RowId.java b/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/RowId.java
deleted file mode 100644
index bd125b8bc40..00000000000
--- a/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/RowId.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2005-2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. 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 java.sql;
-
-/**
- * Dummy implementation of RowId in JDK6
- */
-public interface RowId {
-}
diff --git a/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/SQLXML.java b/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/SQLXML.java
deleted file mode 100644
index 0947067d332..00000000000
--- a/core/org.wso2.carbon.registry.xboot/src/main/java/java/sql/SQLXML.java
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (c) 2005-2009, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
- *
- * WSO2 Inc. 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 java.sql;
-
-/**
- * Dummy implementation of SQLXML in JDK6
- */
-public interface SQLXML {
-}
diff --git a/core/org.wso2.carbon.securevault/pom.xml b/core/org.wso2.carbon.securevault/pom.xml
index ec5baafdbe7..3c59e336e08 100644
--- a/core/org.wso2.carbon.securevault/pom.xml
+++ b/core/org.wso2.carbon.securevault/pom.xml
@@ -36,7 +36,7 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
@@ -86,6 +86,9 @@
*;resolution:=optional
*
+
+ osgi.service;objectClass=org.wso2.carbon.securevault.SecretCallbackHandlerService
+
diff --git a/core/org.wso2.carbon.server.admin.common/pom.xml b/core/org.wso2.carbon.server.admin.common/pom.xml
index 17f7bbb614f..7a8aac1ef13 100644
--- a/core/org.wso2.carbon.server.admin.common/pom.xml
+++ b/core/org.wso2.carbon.server.admin.common/pom.xml
@@ -55,6 +55,9 @@
org.wso2.carbon.server.admin.common.*
+
+ !*
+
diff --git a/core/org.wso2.carbon.server.admin/src/main/java/org/wso2/carbon/server/admin/service/ServerAdmin.java b/core/org.wso2.carbon.server.admin/src/main/java/org/wso2/carbon/server/admin/service/ServerAdmin.java
index 3c07b2b46b8..cd0a9e6e13d 100644
--- a/core/org.wso2.carbon.server.admin/src/main/java/org/wso2/carbon/server/admin/service/ServerAdmin.java
+++ b/core/org.wso2.carbon.server.admin/src/main/java/org/wso2/carbon/server/admin/service/ServerAdmin.java
@@ -24,6 +24,7 @@
import org.apache.axis2.transport.http.HTTPConstants;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.osgi.annotation.bundle.Capability;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.base.api.ServerConfigurationService;
@@ -55,6 +56,13 @@
/**
* Admin service to manage server related operations
*/
+@Capability(
+ namespace = "osgi.service",
+ attribute = {
+ "objectClass=org.wso2.carbon.server.admin.common.IServerAdmin",
+ "service.scope=singleton"
+ }
+)
public class ServerAdmin extends AbstractAdmin implements ServerAdminMBean, IServerAdmin {
private static final Log log = LogFactory.getLog(ServerAdmin.class);
private static final int SECONDS_PER_DAY = 3600 * 24;
diff --git a/core/org.wso2.carbon.tomcat.ext/pom.xml b/core/org.wso2.carbon.tomcat.ext/pom.xml
index c82ea8ae81b..0190c4db9c2 100644
--- a/core/org.wso2.carbon.tomcat.ext/pom.xml
+++ b/core/org.wso2.carbon.tomcat.ext/pom.xml
@@ -36,7 +36,7 @@
org.eclipse.osgi
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.common
@@ -91,16 +91,6 @@
mockito-core
test
-
- org.powermock
- powermock-api-mockito2
- test
-
-
- org.powermock
- powermock-module-testng
- test
-
org.osgi
org.osgi.service.component.annotations
diff --git a/core/org.wso2.carbon.tomcat/pom.xml b/core/org.wso2.carbon.tomcat/pom.xml
index 4e562c3156a..99b285b9bfe 100644
--- a/core/org.wso2.carbon.tomcat/pom.xml
+++ b/core/org.wso2.carbon.tomcat/pom.xml
@@ -36,11 +36,11 @@
org.eclipse.osgi
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.http.servlet
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.common
@@ -119,6 +119,9 @@
*;resolution:=optional
*
+
+ osgi.service;objectClass=org.wso2.carbon.tomcat.api.CarbonTomcatService
+
diff --git a/core/org.wso2.carbon.ui/pom.xml b/core/org.wso2.carbon.ui/pom.xml
index 6466424036b..095060c5370 100644
--- a/core/org.wso2.carbon.ui/pom.xml
+++ b/core/org.wso2.carbon.ui/pom.xml
@@ -37,21 +37,32 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.equinox
+ javax.servlet
+ ${version.equinox.javax.servlet}
+
+
+ org.eclipse.platform
org.eclipse.osgi.services
+
+
+ org.eclipse.jetty.toolchain
+ jetty-servlet
+
+
org.apache.ws.commons.axiom.wso2
axiom
- org.apache.tiles.wso2
+ org.wso2.orbit.org.apache.tiles
tiles-jsp
-
- org.apache.tiles
- tiles-jsp
-
+
+
+
+
commons-digester
commons-digester
@@ -62,6 +73,17 @@
+
+
+
+
+
+
+
+
+
+
+
org.wso2.carbon
org.wso2.carbon.core
@@ -111,7 +133,7 @@
axis2
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.http.servlet
@@ -146,10 +168,6 @@
-
- org.eclipse.equinox
- javax.servlet
-
commons-lang.wso2
commons-lang
@@ -222,8 +240,7 @@
javax.servlet.http; version="${imp.pkg.version.javax.servlet}",
javax.servlet.jsp; version="${imp.pkg.version.javax.servlet.jsp}"
javax.servlet.jsp.tagext; version="${imp.pkg.version.javax.servlet.jsp}",
- org.eclipse.equinox.http.helper,
- org.apache.tiles.*;version="2.0.5",
+ org.apache.tiles.*;version="3.0.7",
org.wso2.carbon.registry.core.service,
org.owasp.csrfguard.tag.*; version="${orbit.version.csrfguard}",
org.owasp.encoder.*;version="${owasp.encoder.wso2.imp.pkg.version}",
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/BundleEntryHttpContext.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/BundleEntryHttpContext.java
new file mode 100644
index 00000000000..db6bb09e365
--- /dev/null
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/BundleEntryHttpContext.java
@@ -0,0 +1,114 @@
+package org.wso2.carbon.ui;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashSet;
+import java.util.Set;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.osgi.framework.Bundle;
+import org.osgi.service.http.HttpContext;
+import org.osgi.service.http.context.ServletContextHelper;
+
+public class BundleEntryHttpContext extends ServletContextHelper implements HttpContext {
+ private Bundle bundle;
+ private String bundlePath;
+
+ public BundleEntryHttpContext(Bundle bundle) {
+ this.bundle = bundle;
+ }
+
+ public BundleEntryHttpContext(Bundle b, String bundlePath) {
+ this(b);
+ if (bundlePath != null) {
+ if (bundlePath.endsWith("/")) {
+ bundlePath = bundlePath.substring(0, bundlePath.length() - 1);
+ }
+
+ if (bundlePath.length() == 0) {
+ bundlePath = null;
+ }
+ }
+
+ this.bundlePath = bundlePath;
+ }
+
+ public String getMimeType(String arg0) {
+ return null;
+ }
+
+ public boolean handleSecurity(HttpServletRequest arg0, HttpServletResponse arg1) throws IOException {
+ return true;
+ }
+
+ public URL getResource(String resourceName) {
+ if (this.bundlePath != null) {
+ resourceName = this.bundlePath + resourceName;
+ }
+
+ int lastSlash = resourceName.lastIndexOf(47);
+ if (lastSlash == -1) {
+ return null;
+ } else {
+ String path = resourceName.substring(0, lastSlash);
+ if (path.length() == 0) {
+ path = "/";
+ }
+
+ String file = this.sanitizeEntryName(resourceName.substring(lastSlash + 1));
+ Enumeration entryPaths = this.bundle.findEntries(path, file, false);
+ return entryPaths != null && entryPaths.hasMoreElements() ? (URL)entryPaths.nextElement() : null;
+ }
+ }
+
+ private String sanitizeEntryName(String name) {
+ StringBuffer buffer = null;
+
+ for(int i = 0; i < name.length(); ++i) {
+ char c = name.charAt(i);
+ switch (c) {
+ case '*':
+ case '\\':
+ if (buffer == null) {
+ buffer = new StringBuffer(name.length() + 16);
+ buffer.append(name.substring(0, i));
+ }
+
+ buffer.append('\\').append(c);
+ break;
+ default:
+ if (buffer != null) {
+ buffer.append(c);
+ }
+ }
+ }
+
+ return buffer == null ? name : buffer.toString();
+ }
+
+ public Set getResourcePaths(String path) {
+ if (this.bundlePath != null) {
+ path = this.bundlePath + path;
+ }
+
+ Enumeration entryPaths = this.bundle.findEntries(path, (String)null, false);
+ if (entryPaths == null) {
+ return null;
+ } else {
+ Set result = new HashSet();
+
+ while(entryPaths.hasMoreElements()) {
+ URL entryURL = (URL)entryPaths.nextElement();
+ String entryPath = entryURL.getFile();
+ if (this.bundlePath == null) {
+ result.add(entryPath);
+ } else {
+ result.add(entryPath.substring(this.bundlePath.length()));
+ }
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSSOSessionManager.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSSOSessionManager.java
index 3ab2212678d..554775bea92 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSSOSessionManager.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSSOSessionManager.java
@@ -19,6 +19,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.osgi.annotation.bundle.Capability;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
@@ -41,6 +42,13 @@
* This class maintains two maps to maintain valid sessions and invalid sessions. This class is
* implemented as a singleton because there should be only one SSOSessionManager per instance.
*/
+@Capability(
+ namespace = "osgi.service",
+ attribute = {
+ "objectClass=org.wso2.carbon.ui.CarbonSSOSessionManager",
+ "service.scope=singleton"
+ }
+)
public class CarbonSSOSessionManager {
private static Log log = LogFactory.getLog(CarbonSSOSessionManager.class);
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSecuredHttpContext.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSecuredHttpContext.java
index 8806d125655..18be6d524d5 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSecuredHttpContext.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonSecuredHttpContext.java
@@ -274,10 +274,11 @@ public boolean handleSecurity(HttpServletRequest request, HttpServletResponse re
}
if (request.getSession().isNew()) {
if (skipLoginPage) {
- response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath, "/carbon/admin/login_action.jsp",
- request));
+ response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
+ "/admin/login_action.jsp", request));
} else {
- response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath, "/carbon/admin/login.jsp", request));
+ response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath, "/admin/login.jsp",
+ request));
}
return false;
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonUILoginUtil.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonUILoginUtil.java
index 92397bbffe9..4c78a12aab4 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonUILoginUtil.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CarbonUILoginUtil.java
@@ -165,10 +165,10 @@ protected static boolean saveOriginalUrl(CarbonUIAuthenticator authenticator,
} else {
if (skipLoginPage) {
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
- "/carbon/admin/login_action.jsp", request));
+ "/admin/login_action.jsp", request));
} else {
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
- "/carbon/admin/login.jsp", request));
+ "/admin/login.jsp", request));
}
}
@@ -468,6 +468,7 @@ protected static boolean handleLogin(CarbonUIAuthenticator authenticator,
response.addCookie(rmeCookie);
}
} catch (Exception e) {
+ // TODO might need to remove contextPath
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath, indexPageURL
+ (indexPageURL.indexOf('?') == -1 ? "?" : "&") + "loginStatus=false", request));
if (log.isDebugEnabled()) {
@@ -488,6 +489,7 @@ protected static boolean handleLogin(CarbonUIAuthenticator authenticator,
indexPageURL = indexPageURL.substring(5);
}
+ // TODO might need to remove contextPath
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath, indexPageURL
+ (indexPageURL.indexOf('?') == -1 ? "?" : "&") + "loginStatus=true", request));
}
@@ -507,16 +509,16 @@ protected static boolean handleLogin(CarbonUIAuthenticator authenticator,
if (e.getCause().getMessage().contains(ACCOUNT_LOCK_ERROR_CODE) || e.getCause().getMessage()
.contains(ACCOUNT_LOCK_ERROR_MESSAGE)) {
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
- "/carbon/admin/login.jsp?loginStatus=false&errorCode=error" +
+ "/admin/login.jsp?loginStatus=false&errorCode=error" +
".code.17003", request));
return false;
} else if (e.getCause().getMessage().contains(USER_NOT_FOUND_ERROR_CODE)) {
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
- "/carbon/admin/login.jsp?loginStatus=false&errorCode=error.code.17001", request));
+ "/admin/login.jsp?loginStatus=false&errorCode=error.code.17001", request));
return false;
} else if (e.getCause().getMessage().contains(INVALID_CREDENTIALS_ERROR_CODE)) {
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
- "/carbon/admin/login.jsp?loginStatus=false&errorCode=error.code.17002", request));
+ "/admin/login.jsp?loginStatus=false&errorCode=error.code.17002", request));
return false;
}
}
@@ -525,7 +527,7 @@ protected static boolean handleLogin(CarbonUIAuthenticator authenticator,
return false;
} else {
response.sendRedirect(CarbonUIUtil.resolveAdminConsoleBaseURL(contextPath,
- "/carbon/admin/login.jsp?loginStatus=false", request));
+ "/admin/login.jsp?loginStatus=false", request));
return false;
}
} catch (Exception e1) {
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/ContextPathServletAdaptor.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/ContextPathServletAdaptor.java
new file mode 100644
index 00000000000..d2764e23b75
--- /dev/null
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/ContextPathServletAdaptor.java
@@ -0,0 +1,382 @@
+package org.wso2.carbon.ui;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.lang.reflect.Method;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.EventListener;
+import java.util.Map;
+import java.util.Set;
+import javax.servlet.Filter;
+import javax.servlet.FilterRegistration;
+import javax.servlet.RequestDispatcher;
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRegistration;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.SessionCookieConfig;
+import javax.servlet.SessionTrackingMode;
+import javax.servlet.descriptor.JspConfigDescriptor;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletRequestWrapper;
+
+public class ContextPathServletAdaptor implements Servlet {
+ private Servlet delegate;
+ String contextPath;
+
+ public ContextPathServletAdaptor(Servlet delegate, String contextPath) {
+ this.delegate = delegate;
+ this.contextPath = contextPath != null && !contextPath.equals("/") ? contextPath : "";
+ }
+
+ public void init(ServletConfig config) throws ServletException {
+ this.delegate.init(new ContextPathServletAdaptor.ServletConfigAdaptor(config));
+ }
+
+ public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
+ this.delegate.service(new ContextPathServletAdaptor.HttpServletRequestAdaptor((HttpServletRequest)request), response);
+ }
+
+ public void destroy() {
+ this.delegate.destroy();
+ }
+
+ public ServletConfig getServletConfig() {
+ return this.delegate.getServletConfig();
+ }
+
+ public String getServletInfo() {
+ return this.delegate.getServletInfo();
+ }
+
+ private class RequestDispatcherAdaptor implements RequestDispatcher {
+ private RequestDispatcher requestDispatcher;
+
+ public RequestDispatcherAdaptor(RequestDispatcher requestDispatcher) {
+ this.requestDispatcher = requestDispatcher;
+ }
+
+ public void forward(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
+ if (req instanceof ContextPathServletAdaptor.HttpServletRequestAdaptor) {
+ req = ((ContextPathServletAdaptor.HttpServletRequestAdaptor)req).getRequest();
+ }
+
+ this.requestDispatcher.forward(req, resp);
+ }
+
+ public void include(ServletRequest req, ServletResponse resp) throws ServletException, IOException {
+ if (req instanceof ContextPathServletAdaptor.HttpServletRequestAdaptor) {
+ req = ((ContextPathServletAdaptor.HttpServletRequestAdaptor)req).getRequest();
+ }
+
+ this.requestDispatcher.include(req, resp);
+ }
+ }
+
+ private class HttpServletRequestAdaptor extends HttpServletRequestWrapper {
+ static final String INCLUDE_REQUEST_URI_ATTRIBUTE = "javax.servlet.include.request_uri";
+ static final String INCLUDE_CONTEXT_PATH_ATTRIBUTE = "javax.servlet.include.context_path";
+ static final String INCLUDE_SERVLET_PATH_ATTRIBUTE = "javax.servlet.include.servlet_path";
+ static final String INCLUDE_PATH_INFO_ATTRIBUTE = "javax.servlet.include.path_info";
+ private boolean isRequestDispatcherInclude;
+
+ public HttpServletRequestAdaptor(HttpServletRequest req) {
+ super(req);
+ this.isRequestDispatcherInclude = req.getAttribute(INCLUDE_REQUEST_URI_ATTRIBUTE) != null;
+ }
+
+ public String getServletPath() {
+ if (this.isRequestDispatcherInclude) {
+ return super.getServletPath();
+ } else {
+ String fullPath = super.getServletPath();
+ return fullPath.substring(
+ ContextPathServletAdaptor.this.contextPath.length());
+ }
+ }
+
+ public String getContextPath() {
+ return this.isRequestDispatcherInclude ? super.getContextPath() : super.getContextPath() + ContextPathServletAdaptor.this.contextPath;
+ }
+
+ public Object getAttribute(String attributeName) {
+ if (this.isRequestDispatcherInclude) {
+ String servletPath;
+ if (attributeName.equals(INCLUDE_CONTEXT_PATH_ATTRIBUTE)) {
+ servletPath = (String)super.getAttribute(INCLUDE_CONTEXT_PATH_ATTRIBUTE);
+ if (servletPath != null && !servletPath.equals("/")) {
+ return servletPath + ContextPathServletAdaptor.this.contextPath;
+ }
+
+ return ContextPathServletAdaptor.this.contextPath;
+ }
+
+ if (attributeName.equals(INCLUDE_SERVLET_PATH_ATTRIBUTE)) {
+ servletPath = (String)super.getAttribute(INCLUDE_SERVLET_PATH_ATTRIBUTE);
+ return servletPath.substring(
+ ContextPathServletAdaptor.this.contextPath.length());
+ }
+ }
+
+ return super.getAttribute(attributeName);
+ }
+
+ public RequestDispatcher getRequestDispatcher(String arg0) {
+ return ContextPathServletAdaptor.this.new RequestDispatcherAdaptor(super.getRequestDispatcher(
+ ContextPathServletAdaptor.this.contextPath + arg0));
+ }
+ }
+
+ private class ServletContextAdaptor implements ServletContext {
+ private ServletContext delegate;
+
+ public ServletContextAdaptor(ServletContext delegate) {
+ this.delegate = delegate;
+ }
+
+ public RequestDispatcher getRequestDispatcher(String path) {
+ return ContextPathServletAdaptor.this.contextPath.equals("/") ? ContextPathServletAdaptor.this.new RequestDispatcherAdaptor(this.delegate.getRequestDispatcher(path)) : ContextPathServletAdaptor.this.new RequestDispatcherAdaptor(this.delegate.getRequestDispatcher(
+ ContextPathServletAdaptor.this.contextPath + path));
+ }
+
+ public URL getResource(String name) throws MalformedURLException {
+ return this.delegate.getResource(name);
+ }
+
+ public InputStream getResourceAsStream(String name) {
+ return this.delegate.getResourceAsStream(name);
+ }
+
+ public Set getResourcePaths(String name) {
+ return this.delegate.getResourcePaths(name);
+ }
+
+ public Object getAttribute(String arg0) {
+ return this.delegate.getAttribute(arg0);
+ }
+
+ public Enumeration getAttributeNames() {
+ return this.delegate.getAttributeNames();
+ }
+
+ public ServletContext getContext(String arg0) {
+ return this.delegate.getContext(arg0);
+ }
+
+ public String getInitParameter(String arg0) {
+ return this.delegate.getInitParameter(arg0);
+ }
+
+ public Enumeration getInitParameterNames() {
+ return this.delegate.getInitParameterNames();
+ }
+
+ public boolean setInitParameter(String s, String s1) {
+ return this.delegate.setInitParameter(s, s1);
+ }
+
+ public int getMajorVersion() {
+ return this.delegate.getMajorVersion();
+ }
+
+ public String getMimeType(String arg0) {
+ return this.delegate.getMimeType(arg0);
+ }
+
+ public int getMinorVersion() {
+ return this.delegate.getMinorVersion();
+ }
+
+ public int getEffectiveMajorVersion() {
+ return this.delegate.getEffectiveMajorVersion();
+ }
+
+ public int getEffectiveMinorVersion() {
+ return this.delegate.getEffectiveMinorVersion();
+ }
+
+ public RequestDispatcher getNamedDispatcher(String arg0) {
+ return ContextPathServletAdaptor.this.new RequestDispatcherAdaptor(this.delegate.getNamedDispatcher(arg0));
+ }
+
+ public String getRealPath(String arg0) {
+ return this.delegate.getRealPath(arg0);
+ }
+
+ public String getServerInfo() {
+ return this.delegate.getServerInfo();
+ }
+
+ /** @deprecated */
+ public Servlet getServlet(String arg0) throws ServletException {
+ return this.delegate.getServlet(arg0);
+ }
+
+ public String getServletContextName() {
+ return this.delegate.getServletContextName();
+ }
+
+ public ServletRegistration.Dynamic addServlet(String s, String s1) {
+ return this.delegate.addServlet(s, s1);
+ }
+
+ public ServletRegistration.Dynamic addServlet(String s, Servlet servlet) {
+ return this.delegate.addServlet(s, servlet);
+ }
+
+ public ServletRegistration.Dynamic addServlet(String s, Class extends Servlet> aClass) {
+ return this.delegate.addServlet(s, aClass);
+ }
+
+ public T createServlet(Class tClass) throws ServletException {
+ return this.delegate.createServlet(tClass);
+ }
+
+ public ServletRegistration getServletRegistration(String s) {
+ return this.delegate.getServletRegistration(s);
+ }
+
+ public Map getServletRegistrations() {
+ return this.delegate.getServletRegistrations();
+ }
+
+ public FilterRegistration.Dynamic addFilter(String s, String s1) {
+ return this.delegate.addFilter(s, s1);
+ }
+
+ public FilterRegistration.Dynamic addFilter(String s, Filter filter) {
+ return this.delegate.addFilter(s, filter);
+ }
+
+ public FilterRegistration.Dynamic addFilter(String s, Class extends Filter> aClass) {
+ return this.delegate.addFilter(s, aClass);
+ }
+
+ public T createFilter(Class tClass) throws ServletException {
+ return this.delegate.createFilter(tClass);
+ }
+
+ public FilterRegistration getFilterRegistration(String s) {
+ return this.delegate.getFilterRegistration(s);
+ }
+
+ public Map getFilterRegistrations() {
+ return this.delegate.getFilterRegistrations();
+ }
+
+ public SessionCookieConfig getSessionCookieConfig() {
+ return this.delegate.getSessionCookieConfig();
+ }
+
+ public void setSessionTrackingModes(Set sessionTrackingModes) throws IllegalStateException, IllegalArgumentException {
+ this.delegate.setSessionTrackingModes(sessionTrackingModes);
+ }
+
+ public Set getDefaultSessionTrackingModes() {
+ return this.delegate.getDefaultSessionTrackingModes();
+ }
+
+ public Set getEffectiveSessionTrackingModes() {
+ return this.delegate.getEffectiveSessionTrackingModes();
+ }
+
+ public void addListener(Class extends EventListener> aClass) {
+ this.delegate.addListener(aClass);
+ }
+
+ public void addListener(String s) {
+ this.delegate.addListener(s);
+ }
+
+ public void addListener(T t) {
+ this.delegate.addListener(t);
+ }
+
+ public T createListener(Class tClass) throws ServletException {
+ return this.delegate.createListener(tClass);
+ }
+
+ public void declareRoles(String... strings) {
+ this.delegate.declareRoles(strings);
+ }
+
+ public ClassLoader getClassLoader() {
+ return this.delegate.getClassLoader();
+ }
+
+ public JspConfigDescriptor getJspConfigDescriptor() {
+ return this.delegate.getJspConfigDescriptor();
+ }
+
+ /** @deprecated */
+ public Enumeration getServletNames() {
+ return this.delegate.getServletNames();
+ }
+
+ /** @deprecated */
+ public Enumeration getServlets() {
+ return this.delegate.getServlets();
+ }
+
+ /** @deprecated */
+ public void log(Exception arg0, String arg1) {
+ this.delegate.log(arg0, arg1);
+ }
+
+ public void log(String arg0, Throwable arg1) {
+ this.delegate.log(arg0, arg1);
+ }
+
+ public void log(String arg0) {
+ this.delegate.log(arg0);
+ }
+
+ public void removeAttribute(String arg0) {
+ this.delegate.removeAttribute(arg0);
+ }
+
+ public void setAttribute(String arg0, Object arg1) {
+ this.delegate.setAttribute(arg0, arg1);
+ }
+
+ public String getContextPath() {
+ try {
+ Method getContextPathMethod = this.delegate.getClass().getMethod("getContextPath", (Class[])null);
+ return (String)getContextPathMethod.invoke(this.delegate, (Object[])null);
+ } catch (Exception var2) {
+ return null;
+ }
+ }
+ }
+
+ private class ServletConfigAdaptor implements ServletConfig {
+ private ServletConfig config;
+ private ServletContext context;
+
+ public ServletConfigAdaptor(ServletConfig config) {
+ this.config = config;
+ this.context = ContextPathServletAdaptor.this.new ServletContextAdaptor(config.getServletContext());
+ }
+
+ public String getInitParameter(String arg0) {
+ return this.config.getInitParameter(arg0);
+ }
+
+ public Enumeration getInitParameterNames() {
+ return this.config.getInitParameterNames();
+ }
+
+ public ServletContext getServletContext() {
+ return this.context;
+ }
+
+ public String getServletName() {
+ return this.config.getServletName();
+ }
+ }
+}
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializer.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializer.java
new file mode 100644
index 00000000000..c6bc9a57895
--- /dev/null
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializer.java
@@ -0,0 +1,26 @@
+package org.wso2.carbon.ui;
+
+import org.apache.tiles.factory.AbstractTilesContainerFactory;
+import org.apache.tiles.factory.BasicTilesContainerFactory;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.servlet.ServletApplicationContext;
+import org.apache.tiles.startup.AbstractTilesInitializer;
+import org.apache.tiles.startup.TilesInitializer;
+import org.apache.tiles.web.startup.AbstractTilesListener;
+
+import javax.servlet.ServletContext;
+
+public class CustomTilesInitializer extends AbstractTilesInitializer {
+
+ @Override
+ protected AbstractTilesContainerFactory createContainerFactory(ApplicationContext applicationContext) {
+
+ return new BasicTilesContainerFactory();
+ }
+
+ @Override
+ protected ApplicationContext createTilesApplicationContext(ApplicationContext context) {
+
+ return new ServletApplicationContext((ServletContext) context.getContext());
+ }
+}
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializerListener.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializerListener.java
new file mode 100644
index 00000000000..d5371c0df76
--- /dev/null
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/CustomTilesInitializerListener.java
@@ -0,0 +1,65 @@
+package org.wso2.carbon.ui;
+
+import javax.servlet.ServletContext;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+import org.apache.tiles.factory.BasicTilesContainerFactory;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.servlet.ServletApplicationContext;
+import org.apache.tiles.startup.TilesInitializer;
+import org.apache.tiles.startup.AbstractTilesInitializer;
+import org.apache.tiles.TilesContainer;
+import org.apache.tiles.request.servlet.ServletUtil;
+import org.apache.tiles.web.startup.AbstractTilesListener;
+import org.osgi.service.component.annotations.Component;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
+
+@Component(
+ service = ServletContextListener.class,
+ property = {
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_LISTENER + "=true",
+ HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_SELECT + "=(" + HttpWhiteboardConstants.HTTP_WHITEBOARD_CONTEXT_NAME + "=tilesContext)"
+ }
+)
+public class CustomTilesInitializerListener extends AbstractTilesListener {
+
+ @Override
+ protected TilesInitializer createTilesInitializer() {
+
+ return new CustomTilesInitializer();
+ }
+
+// @Override
+// public void contextInitialized(ServletContextEvent sce) {
+// ServletApplicationContext application = new ServletApplicationContext(sce.getServletContext());
+// TilesInitializer initializer = new AbstractTilesInitializer() {
+// @Override
+// protected ApplicationContext createTilesApplicationContext(ApplicationContext context) {
+// return new ServletApplicationContext((ServletContext)context.getContext());
+// }
+//
+//// @Override
+//// protected ApplicationContext createApplicationContext(Object context) {
+//// return new ServletApplicationContext((javax.servlet.ServletContext) context);
+//// }
+//
+// @Override
+// protected BasicTilesContainerFactory createContainerFactory(ApplicationContext context) {
+// return new BasicTilesContainerFactory();
+// }
+// };
+//// TilesContainer container = initializer.createContainer(application);
+//// ServletUtil.setContainer(sce.getServletContext(), container);
+//
+// initializer.initialize(application);
+//// ServletUtil.setContainer(sce.getServletContext(), container);
+// }
+//
+// @Override
+// public void contextDestroyed(ServletContextEvent sce) {
+// // Clean up resources if necessary
+// }
+
+
+}
+
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/DefaultComponentEntryHttpContext.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/DefaultComponentEntryHttpContext.java
index db7d1999876..b58c3dcfd58 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/DefaultComponentEntryHttpContext.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/DefaultComponentEntryHttpContext.java
@@ -15,7 +15,6 @@
*/
package org.wso2.carbon.ui;
-import org.eclipse.equinox.http.helper.BundleEntryHttpContext;
import org.osgi.framework.Bundle;
import java.net.MalformedURLException;
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/FilterServletAdaptor.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/FilterServletAdaptor.java
new file mode 100644
index 00000000000..c546293a100
--- /dev/null
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/FilterServletAdaptor.java
@@ -0,0 +1,89 @@
+package org.wso2.carbon.ui;
+
+import java.io.IOException;
+import java.util.Enumeration;
+import java.util.Properties;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.Servlet;
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletContext;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+
+public class FilterServletAdaptor implements Servlet {
+ ServletConfig config;
+ Servlet delegate;
+ Filter filter;
+ Properties filterInitParameters;
+ private FilterChain filterChain;
+
+ public FilterServletAdaptor(Filter filter, Properties filterInitParameters, Servlet delegate) {
+ this.delegate = delegate;
+ this.filter = filter;
+ this.filterInitParameters = filterInitParameters == null ? new Properties() : filterInitParameters;
+ this.filterChain = new FilterServletAdaptor.FilterChainImpl();
+ }
+
+ public void init(ServletConfig config) throws ServletException {
+ this.config = config;
+ this.filter.init(new FilterServletAdaptor.FilterConfigImpl());
+ this.delegate.init(config);
+ }
+
+ public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
+ this.filter.doFilter(request, response, this.filterChain);
+ }
+
+ public void destroy() {
+ this.delegate.destroy();
+ this.filter.destroy();
+ this.config = null;
+ }
+
+ public ServletConfig getServletConfig() {
+ return this.config;
+ }
+
+ public String getServletInfo() {
+ return "";
+ }
+
+ class FilterConfigImpl implements FilterConfig {
+ FilterConfigImpl() {
+ }
+
+ public String getFilterName() {
+ String filterName = FilterServletAdaptor.this.filterInitParameters.getProperty("filter-name");
+ if (filterName == null) {
+ filterName = FilterServletAdaptor.this.filter.getClass().getName();
+ }
+
+ return filterName;
+ }
+
+ public String getInitParameter(String name) {
+ return FilterServletAdaptor.this.filterInitParameters.getProperty(name);
+ }
+
+ public Enumeration getInitParameterNames() {
+ return FilterServletAdaptor.this.filterInitParameters.propertyNames();
+ }
+
+ public ServletContext getServletContext() {
+ return FilterServletAdaptor.this.config.getServletContext();
+ }
+ }
+
+ public class FilterChainImpl implements FilterChain {
+ public FilterChainImpl() {
+ }
+
+ public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException {
+ FilterServletAdaptor.this.delegate.service(request, response);
+ }
+ }
+}
+
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/JspServlet.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/JspServlet.java
index f8376f97b28..bb3fd058571 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/JspServlet.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/JspServlet.java
@@ -195,6 +195,7 @@ public void destroy() {
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException,
IOException {
+
String pathInfo = request.getPathInfo();
if (pathInfo != null && pathInfo.startsWith("/WEB-INF/")) { //$NON-NLS-1$
response.sendError(HttpServletResponse.SC_NOT_FOUND);
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/SecuredComponentEntryHttpContext.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/SecuredComponentEntryHttpContext.java
index ca5b2af9f20..c441980904a 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/SecuredComponentEntryHttpContext.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/SecuredComponentEntryHttpContext.java
@@ -20,7 +20,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.eclipse.equinox.http.helper.BundleEntryHttpContext;
import org.osgi.framework.Bundle;
import org.wso2.carbon.registry.core.Registry;
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/TilesJspServlet.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/TilesJspServlet.java
index 0b6773e6576..0b1b4708c08 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/TilesJspServlet.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/TilesJspServlet.java
@@ -19,6 +19,10 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.tiles.AttributeContext;
+import org.apache.tiles.request.reflect.ClassUtil;
+import org.apache.tiles.web.util.AttributeContextMutator;
+import org.apache.tiles.web.util.TilesDispatchServlet;
import org.osgi.framework.Bundle;
import org.osgi.framework.ServiceReference;
import org.wso2.carbon.ui.action.ActionHelper;
@@ -35,16 +39,42 @@ public class TilesJspServlet extends JspServlet {
private static final long serialVersionUID = 1L;
private static Log log = LogFactory.getLog(TilesJspServlet.class);
+ public static final String CONTAINER_KEY_INIT_PARAMETER =
+ "org.apache.tiles.web.util.TilesDispatchServlet.CONTAINER_KEY";
+
+ private String containerKey;
+ private AttributeContextMutator mutator;
+
public TilesJspServlet(Bundle bundle, UIResourceRegistry uiResourceRegistry) {
super(bundle, uiResourceRegistry);
}
+ //TODO check if this is needed
+ @Override
+ public void init() throws ServletException {
+ super.init();
+
+ containerKey = getServletConfig().getInitParameter(CONTAINER_KEY_INIT_PARAMETER);
+
+ String temp = getInitParameter("mutator");
+ if (temp != null) {
+ try {
+ mutator = (AttributeContextMutator) ClassUtil.instantiate(temp);
+ } catch (Exception e) {
+ throw new ServletException("Unable to instantiate specified context mutator.", e);
+ }
+ } else {
+ mutator = new DefaultMutator();
+ }
+ }
+
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
+
String actionUrl = request.getRequestURI();
//This is the layout page defined in
- //"/org.wso2.carbon.component/src/main/resources/web/WEB-INF/tiles/main_defs.xml"
+ //"/org.wso2.carbon.component/src/main/resources/web/WEB-INF/tiles/tiles.xml"
//Need to serve http requests other than to tiles body page,
//using the normal OSGi way
@@ -73,10 +103,10 @@ public void service(HttpServletRequest request, HttpServletResponse response)
}
}
-
if ((actionUrl.lastIndexOf("/admin/layout/template.jsp") > -1)
|| actionUrl.lastIndexOf("ajaxprocessor.jsp") > -1
- || actionUrl.indexOf("gadgets/js") > -1) {
+ || actionUrl.indexOf("gadgets/js") > -1
+ || "INCLUDE".equals(request.getDispatcherType().toString())) {
super.service(request, response);
} else if (actionUrl.startsWith("/carbon/registry/web/resources/foo/bar")) {
//TODO : consider the renamed ROOT war scenario
@@ -104,4 +134,67 @@ public void service(HttpServletRequest request, HttpServletResponse response)
}
}
}
+
+ class DefaultMutator implements AttributeContextMutator {
+
+ /** {@inheritDoc} */
+ public void mutate(AttributeContext context, javax.servlet.ServletRequest request) {
+ // noop;
+ }
+ }
+
+ protected static final String canonicalURI(String s) {
+ if (s == null) {
+ return null;
+ } else {
+ StringBuilder result = new StringBuilder();
+ int len = s.length();
+ int pos = 0;
+
+ while(pos < len) {
+ char c = s.charAt(pos);
+ if (isPathSeparator(c)) {
+ while(pos + 1 < len && isPathSeparator(s.charAt(pos + 1))) {
+ ++pos;
+ }
+
+ if (pos + 1 < len && s.charAt(pos + 1) == '.') {
+ if (pos + 2 >= len) {
+ break;
+ }
+
+ switch (s.charAt(pos + 2)) {
+ case '.':
+ if (pos + 3 < len && isPathSeparator(s.charAt(pos + 3))) {
+ pos += 3;
+
+ int separatorPos;
+ for(separatorPos = result.length() - 1; separatorPos >= 0 && !isPathSeparator(result.charAt(separatorPos)); --separatorPos) {
+ }
+
+ if (separatorPos >= 0) {
+ result.setLength(separatorPos);
+ }
+ continue;
+ }
+ break;
+ case '/':
+ case '\\':
+ pos += 2;
+ continue;
+ }
+ }
+ }
+
+ result.append(c);
+ ++pos;
+ }
+
+ return result.toString();
+ }
+ }
+
+ protected static final boolean isPathSeparator(char c) {
+ return c == '/' || c == '\\';
+ }
}
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/UIResourceRegistry.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/UIResourceRegistry.java
index 232b908e894..d8a24759522 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/UIResourceRegistry.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/UIResourceRegistry.java
@@ -63,7 +63,7 @@ public void initialize(BundleContext bundleContext) {
}
public URL getUIResource(String path) {
- URL url = defaultUIResourceProvider.getUIResource(path);
+ URL url = defaultUIResourceProvider.getUIResource(canonicalURI(path));
if (url == null) {
for (UIResourceProvider resourceProvider : resourceProviderSet) {
url = resourceProvider.getUIResource(path);
@@ -104,4 +104,59 @@ public void serviceChanged(ServiceEvent serviceEvent) {
resourceProviderSet.remove(uiResourceProvider);
}
}
+
+ protected static final String canonicalURI(String s) {
+ if (s == null) {
+ return null;
+ } else {
+ StringBuilder result = new StringBuilder();
+ int len = s.length();
+ int pos = 0;
+
+ while(pos < len) {
+ char c = s.charAt(pos);
+ if (isPathSeparator(c)) {
+ while(pos + 1 < len && isPathSeparator(s.charAt(pos + 1))) {
+ ++pos;
+ }
+
+ if (pos + 1 < len && s.charAt(pos + 1) == '.') {
+ if (pos + 2 >= len) {
+ break;
+ }
+
+ switch (s.charAt(pos + 2)) {
+ case '.':
+ if (pos + 3 < len && isPathSeparator(s.charAt(pos + 3))) {
+ pos += 3;
+
+ int separatorPos;
+ for(separatorPos = result.length() - 1; separatorPos >= 0 && !isPathSeparator(result.charAt(separatorPos)); --separatorPos) {
+ }
+
+ if (separatorPos >= 0) {
+ result.setLength(separatorPos);
+ }
+ continue;
+ }
+ break;
+ case '/':
+ case '\\':
+ pos += 2;
+ continue;
+ }
+ }
+ }
+
+ result.append(c);
+ ++pos;
+ }
+
+ return result.toString();
+ }
+ }
+
+ protected static final boolean isPathSeparator(char c) {
+ return c == '/' || c == '\\';
+ }
}
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/action/ActionHelper.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/action/ActionHelper.java
index 99d3455b230..79f355a948d 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/action/ActionHelper.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/action/ActionHelper.java
@@ -21,7 +21,12 @@
import org.apache.tiles.AttributeContext;
import org.apache.tiles.TilesContainer;
import org.apache.tiles.access.TilesAccess;
+import org.apache.tiles.request.ApplicationContext;
+import org.apache.tiles.request.Request;
+import org.apache.tiles.request.servlet.ServletRequest;
+import org.apache.tiles.request.servlet.ServletUtil;
+import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -40,21 +45,25 @@ public class ActionHelper {
*/
public static void render(String actionUrl, HttpServletRequest request,
HttpServletResponse response) throws Exception {
- TilesContainer container = TilesAccess.getContainer(
- request.getSession().getServletContext());
- if(log.isDebugEnabled()){
- log.debug("Rendering tiles main.layout with page : "+actionUrl+"("+request.getSession().getId()+")");
+
+ ServletContext servletContext = request.getSession().getServletContext();
+ ApplicationContext applicationContext = ServletUtil.getApplicationContext(servletContext);
+ TilesContainer container = TilesAccess.getContainer(applicationContext);
+ if (log.isDebugEnabled()) {
+ log.debug(
+ "Rendering tiles main.layout with page : " + actionUrl + "(" + request.getSession().getId() + ")");
}
- AttributeContext attributeContext = container.startContext(request, response);
+ Request requestContext = new ServletRequest(container.getApplicationContext(), request, response);
+ AttributeContext attributeContext = container.startContext(requestContext);
Attribute attr = new Attribute(actionUrl);
attributeContext.putAttribute("body", attr);
try {
- container.render("main.layout", request, response);
- container.endContext(request, response);
+ container.render("main.layout", requestContext);
+ container.endContext(requestContext);
} catch (Exception e) {
if (log.isDebugEnabled()) { // Intentionally logged at debug level
log.debug("Error occurred while rendering." +
- " We generally see this 'harmless' exception on WebLogic. Hiding it.", e);
+ " We generally see this 'harmless' exception on WebLogic. Hiding it.", e);
}
}
}
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/deployment/UIBundleDeployer.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/deployment/UIBundleDeployer.java
index 0394aada225..4675d974825 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/deployment/UIBundleDeployer.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/deployment/UIBundleDeployer.java
@@ -17,8 +17,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.eclipse.equinox.http.helper.ContextPathServletAdaptor;
-import org.eclipse.equinox.http.helper.FilterServletAdaptor;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.BundleEvent;
@@ -30,11 +28,14 @@
import org.osgi.service.http.HttpContext;
import org.osgi.service.http.HttpService;
import org.osgi.service.http.NamespaceException;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
import org.osgi.util.tracker.ServiceTracker;
import org.wso2.carbon.CarbonConstants;
import org.wso2.carbon.CarbonException;
import org.wso2.carbon.base.ServerConfiguration;
import org.wso2.carbon.ui.BundleBasedUIResourceProvider;
+import org.wso2.carbon.ui.ContextPathServletAdaptor;
+import org.wso2.carbon.ui.FilterServletAdaptor;
import org.wso2.carbon.ui.deployment.beans.CarbonUIDefinitions;
import org.wso2.carbon.ui.deployment.beans.Component;
import org.wso2.carbon.ui.deployment.beans.CustomUIDefenitions;
@@ -44,9 +45,6 @@
import org.wso2.carbon.ui.transports.fileupload.FileUploadExecutorManager;
import org.wso2.carbon.ui.util.UIResourceProvider;
-import javax.servlet.Servlet;
-import javax.servlet.ServletException;
-
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Dictionary;
@@ -55,6 +53,10 @@
import java.util.Iterator;
import java.util.List;
+import javax.servlet.Filter;
+import javax.servlet.Servlet;
+import javax.servlet.ServletException;
+
public class UIBundleDeployer implements SynchronousBundleListener {
private static Log log = LogFactory.getLog(UIBundleDeployer.class);
@@ -425,6 +427,18 @@ public void registerServlet(Servlet servlet, String urlPattern, Dictionary param
httpService.registerServlet(urlPattern,
new FilterServletAdaptor(associatedFilter, null, adaptedJspServlet), params, httpContext);
}
+// Dictionary properties = new Hashtable<>();
+// properties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, urlPattern);
+// for (Enumeration enm = params.keys(); enm.hasMoreElements();) {
+// String key = (String) enm.nextElement();
+// properties.put("servlet.init." + key, params.get(key));
+// }
+// CarbonUIServiceComponent.getBundleContext().registerService(Servlet.class, servlet, properties);
+// if (associatedFilter != null) {
+// Dictionary props = new Hashtable<>();
+// props.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_FILTER_PATTERN, urlPattern);
+// CarbonUIServiceComponent.getBundleContext().registerService(Filter.class, associatedFilter, props);
+// }
if (servletAttrs != null) {
for (Enumeration enm = servletAttrs.keys(); enm.hasMoreElements();) {
String key = (String) enm.nextElement();
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/internal/CarbonUIServiceComponent.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/internal/CarbonUIServiceComponent.java
index b2af9a372df..b8bd7066d4b 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/internal/CarbonUIServiceComponent.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/internal/CarbonUIServiceComponent.java
@@ -25,7 +25,6 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.tomcat.InstanceManager;
-import org.eclipse.equinox.http.helper.ContextPathServletAdaptor;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
@@ -38,6 +37,8 @@
import org.osgi.service.component.annotations.ReferencePolicy;
import org.osgi.service.http.HttpContext;
import org.osgi.service.http.HttpService;
+import org.osgi.service.http.context.ServletContextHelper;
+import org.osgi.service.http.whiteboard.HttpWhiteboardConstants;
import org.osgi.service.packageadmin.PackageAdmin;
import org.osgi.service.url.URLConstants;
import org.osgi.service.url.URLStreamHandlerService;
@@ -52,6 +53,7 @@
import org.wso2.carbon.ui.CarbonSecuredHttpContext;
import org.wso2.carbon.ui.CarbonUIAuthenticator;
import org.wso2.carbon.ui.CarbonUIUtil;
+import org.wso2.carbon.ui.ContextPathServletAdaptor;
import org.wso2.carbon.ui.DefaultCarbonAuthenticator;
import org.wso2.carbon.ui.TextJavascriptHandler;
import org.wso2.carbon.ui.TilesJspServlet;
@@ -68,13 +70,6 @@
import org.wso2.carbon.user.core.service.RealmService;
import org.wso2.carbon.utils.ConfigurationContextService;
-import javax.servlet.Servlet;
-import javax.servlet.ServletContext;
-import javax.xml.namespace.QName;
-import javax.xml.stream.FactoryConfigurationError;
-import javax.xml.stream.XMLInputFactory;
-import javax.xml.stream.XMLStreamException;
-import javax.xml.stream.XMLStreamReader;
import java.io.IOException;
import java.io.InputStream;
import java.net.ContentHandler;
@@ -90,6 +85,14 @@
import java.util.Map;
import java.util.StringTokenizer;
+import javax.servlet.Servlet;
+import javax.servlet.ServletContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.FactoryConfigurationError;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+
import static org.wso2.carbon.CarbonConstants.PRODUCT_XML;
import static org.wso2.carbon.CarbonConstants.PRODUCT_XML_PROPERTIES;
import static org.wso2.carbon.CarbonConstants.PRODUCT_XML_PROPERTY;
@@ -108,8 +111,7 @@ public class CarbonUIServiceComponent {
private static ServerConfigurationService serverConfiguration;
private static RealmService realmService;
private static CarbonTomcatService carbonTomcatService;
- private static List authenticationExtenders =
- new LinkedList();
+ private static List authenticationExtenders = new LinkedList<>();
private BundleContext bundleContext;
@@ -233,15 +235,6 @@ public void start(BundleContext context) throws Exception {
final HttpService httpService = getHttpService();
- Dictionary initparams = new Hashtable();
- initparams.put("servlet-name", "TilesServlet");
- initparams.put("definitions-config", "/WEB-INF/tiles/main_defs.xml");
- initparams.put("org.apache.tiles.context.TilesContextFactory",
- "org.apache.tiles.context.enhanced.EnhancedContextFactory");
- initparams.put("org.apache.tiles.factory.TilesContainerFactory.MUTABLE", "true");
- initparams.put("org.apache.tiles.definition.DefinitionsFactory",
- "org.wso2.carbon.tiles.CarbonUrlDefinitionsFactory");
-
String webContext = "carbon"; // The subcontext for the Carbon Mgt Console
String serverURL = CarbonUIUtil.getServerURL(serverConfig);
@@ -265,6 +258,9 @@ public void start(BundleContext context) throws Exception {
//Registering filedownload servlet
Servlet fileDownloadServlet = new ContextPathServletAdaptor(new FileDownloadServlet(
context, getConfigurationContextService()), "/filedownload");
+// Dictionary fileDownloadServletProperties = new Hashtable<>();
+// fileDownloadServletProperties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/filedownload");
+// context.registerService(Servlet.class, fileDownloadServlet, fileDownloadServletProperties);
httpService.registerServlet("/filedownload", fileDownloadServlet, null, commonContext);
fileDownloadServlet.getServletConfig().getServletContext().setAttribute(
CarbonConstants.SERVER_URL, serverURL);
@@ -282,6 +278,9 @@ public void start(BundleContext context) throws Exception {
}
httpService.registerServlet("/fileupload", fileUploadServlet, null, commonContext);
+// Dictionary fileUploadServletProperties = new Hashtable<>();
+// fileUploadServletProperties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/fileupload");
+// context.registerService(Servlet.class, fileUploadServlet, fileUploadServletProperties);
fileUploadServlet.getServletConfig().getServletContext().setAttribute(
CarbonConstants.SERVER_URL, serverURL);
fileUploadServlet.getServletConfig().getServletContext().setAttribute(
@@ -290,30 +289,44 @@ public void start(BundleContext context) throws Exception {
uiBundleDeployer.deploy(bundleContext, commonContext);
context.addBundleListener(uiBundleDeployer);
- httpService.registerServlet("/", new org.apache.tiles.web.startup.TilesServlet(),
- initparams,
- commonContext);
- httpService.registerResources("/" + webContext, "/", commonContext);
-
- adaptedJspServlet = new ContextPathServletAdaptor(
- new TilesJspServlet(context.getBundle(), uiResourceRegistry), "/" + webContext);
+ Dictionary props = new Hashtable<>();
+ props.put("osgi.http.whiteboard.context.name", "tilesContext");
+ props.put("osgi.http.whiteboard.context.path", "/carbon");
- Dictionary carbonInitparams = new Hashtable();
- carbonInitparams.put("strictQuoteEscaping", "false");
- httpService.registerServlet("/" + webContext + "/*.jsp", adaptedJspServlet, carbonInitparams, commonContext);
-
- ServletContext jspServletContext =
- adaptedJspServlet.getServletConfig().getServletContext();
-
- jspServletContext.setAttribute(
- InstanceManager.class.getName(), getTomcatInstanceManager());
+ context.registerService(ServletContextHelper.class, (ServletContextHelper) commonContext, props);
+ HttpContext resourceContext =
+ new CarbonSecuredHttpContext(context.getBundle(), "/web", uiResourceRegistry, registry);
+ Dictionary resourceProps = new Hashtable<>();
+ resourceProps.put("osgi.http.whiteboard.context.name", "resourceContext");
+ resourceProps.put("osgi.http.whiteboard.context.path", "/carbon");
+ resourceProps.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, "/" + webContext + "/*");
+ context.registerService(ServletContextHelper.class, (ServletContextHelper) resourceContext, resourceProps);
+ Dictionary properties = new Hashtable<>();
+ properties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PATTERN, "/*");
+ properties.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_RESOURCE_PREFIX, "/");
+ properties.put("osgi.http.whiteboard.context.select", "(osgi.http.whiteboard.context.name=resourceContext)");
+ properties.put("osgi.http.whiteboard.context.httpservice", true);
+
+ // Replacement for httpService.registerResources with whiteboard
+ bundleContext.registerService(String.class, "resource", properties);
+
+ adaptedJspServlet = new TilesJspServlet(context.getBundle(), uiResourceRegistry);
+
+ Dictionary carbonInitparams = new Hashtable<>();
+ carbonInitparams.put("servlet.init.strictQuoteEscaping", "false");
+ carbonInitparams.put(HttpWhiteboardConstants.HTTP_WHITEBOARD_SERVLET_PATTERN, "/*.jsp");
+ carbonInitparams.put("osgi.http.whiteboard.context.select", "(osgi.http.whiteboard.context.name=tilesContext)");
+ context.registerService(Servlet.class, adaptedJspServlet, carbonInitparams);
+
+ ServletContext jspServletContext = adaptedJspServlet.getServletConfig().getServletContext();
+
+ jspServletContext.setAttribute(InstanceManager.class.getName(), getTomcatInstanceManager());
jspServletContext.setAttribute("registry", registryService);
-
jspServletContext.setAttribute(CarbonConstants.SERVER_CONFIGURATION, serverConfig);
jspServletContext.setAttribute(CarbonConstants.CLIENT_CONFIGURATION_CONTEXT, clientConfigContext);
//If the UI is running on local transport mode, then we use the server-side config context.
- if(isLocalTransportMode) {
+ if (isLocalTransportMode) {
jspServletContext.setAttribute(CarbonConstants.CONFIGURATION_CONTEXT, serverConfigContext);
} else {
jspServletContext.setAttribute(CarbonConstants.CONFIGURATION_CONTEXT, clientConfigContext);
@@ -331,6 +344,7 @@ public void start(BundleContext context) throws Exception {
.setAttribute(CustomUIDefenitions.CUSTOM_UI_DEFENITIONS, customUIDefenitions);
// Registering jspServletContext as a service so that UI components can use it
+ // TODO why do we need to register this again?
bundleContext.registerService(ServletContext.class.getName(), jspServletContext, null);
//saving bundle context for future reference within CarbonUI Generation
diff --git a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/util/UIResourceProvider.java b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/util/UIResourceProvider.java
index fafb0815672..55f1be6075b 100644
--- a/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/util/UIResourceProvider.java
+++ b/core/org.wso2.carbon.ui/src/main/java/org/wso2/carbon/ui/util/UIResourceProvider.java
@@ -45,11 +45,11 @@ public interface UIResourceProvider {
* /WEB_INF
* /WEB-INF/web.xml
* /WEB-INF/tiles
- * /WEB-INF/tiles/main_defs.xml
+ * /WEB-INF/tiles/tiles.xml
*
* getResourcePaths("/") returns {"/welcome.html", "/WEB_INF"}.
* getResourcePaths("/WEB_INF/") returns {"/WEB-INF/web.xml", "/WEB-INF/tiles/"}.
- * getResourcePaths("/WEB-INF/tiles/") returns {"/WEB-INF/tiles/main_defs.xml"}.
+ * getResourcePaths("/WEB-INF/tiles/") returns {"/WEB-INF/tiles/tiles.xml"}.
*
* @param path partial path used to match the resources, which must start with a /
* @return a Set containing the directory listing, or null if there are no resources whose path begins with the
diff --git a/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tiles/main_defs.xml b/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tiles.xml
similarity index 100%
rename from core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tiles/main_defs.xml
rename to core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tiles.xml
diff --git a/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tlds/tiles-jsp.tld b/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tlds/tiles-jsp.tld
index 5250bb20799..effdb62e203 100644
--- a/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tlds/tiles-jsp.tld
+++ b/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/tlds/tiles-jsp.tld
@@ -1,801 +1,921 @@
-
-
-
- 2.0
- 1.2
- tiles
- http://tiles.apache.org/tags-tiles
+
+
+
- This tag library provides Tiles tags.
+
+ 1.2
+ tiles
+ http://tiles.apache.org/tags-tiles
- insertTemplate
- org.apache.tiles.jsp.taglib.InsertTemplateTag
- JSP
- Insert a template.
- Insert a template with the possibility to pass
- parameters (called attributes).
- A template can be seen as a procedure that can take parameters or attributes.
- <tiles:insertTemplate> allows to define these attributes
- and pass them to the inserted jsp page, called template.
- Attributes are defined using nested tag <tiles:put> or
- <tiles:putList>.
+
+ Insert a template.
+
+
+ Insert a template with the possibility to pass parameters (called
+ attributes). A template can be seen as a procedure that can take parameters
+ or attributes. <tiles:insertTemplate> allows to define
+ these attributes and pass them to the inserted jsp page, called template.
+ Attributes are defined using nested tag
+ <tiles:putAttribute> or
+ <tiles:putListAttribute>.
+
+
+ You must specify template attribute, for inserting a template
+
+
+
+ Example :
- You must specify
template attribute, for inserting a template
-
- Example :
+
-
- <tiles:insertTemplate template="/basic/myLayout.jsp" flush="true">
- <tiles:put name="title" value="My first page" />
- <tiles:put name="header" value="/common/header.jsp" />
- <tiles:put name="footer" value="/common/footer.jsp" />
- <tiles:put name="menu" value="/basic/menu.jsp" />
- <tiles:put name="body" value="/basic/helloBody.jsp" />
- </tiles:insert>
-
+ <code>
+ <tiles:insertTemplate template="/basic/myLayout.jsp" flush="true">
+ <tiles:putAttribute name="title" value="My first page" />
+ <tiles:putAttribute name="header" value="/common/header.jsp" />
+ <tiles:putAttribute name="footer" value="/common/footer.jsp" />
+ <tiles:putAttribute name="menu" value="/basic/menu.jsp" />
+ <tiles:putAttribute name="body" value="/basic/helloBody.jsp" />
+ </tiles:insertTemplate>
+ </code>
]]>
+ insertTemplate
+ org.apache.tiles.jsp.taglib.InsertTemplateTag
+ scriptless
+
+
+
template
true
true
+ java.lang.String
+
+
- A string representing the URI of a template (for example, a JSP
- page).
-
+
+ templateType
+ false
+ true
+ java.lang.String
- flush
- false
- false
- boolean
- True or false. If true, current page out stream is flushed
- before insertion.
+
-
-
- ignore
+ templateExpression
false
true
- boolean
+ java.lang.String
+
+
- If this attribute is set to true, and the attribute specified by the
- name does not exist, simply return without writing anything. The
- default value is false, which will cause a runtime exception to be
- thrown.
+
-
-
role
false
true
+ java.lang.String
+
+
- If the user is in the specified role, the tag is taken into account;
- otherwise, the tag is ignored (skipped).
+
+ preparer
+ false
+ true
+ java.lang.String
-
- preparer
+
+ true, the response will be flushed after the insert.
+ ]]>
+
+ flush
false
true
-
- The fully qualified class name of the preparer.
-
+ boolean
- insertDefinition
- org.apache.tiles.jsp.taglib.InsertDefinitionTag
- JSP
- Insert a definition.
- Insert a definition with the possibility to override and specify
- parameters (called attributes).
- A definition can be seen as a (partially or totally) filled template that
- can override or complete attribute values.
- <tiles:insertDefinition> allows to define these attributes
- and pass them to the inserted jsp page, called template.
- Attributes are defined using nested tag <tiles:put> or
- <tiles:putList>.
+
+ Insert a definition.
+
+
+ Insert a definition with the possibility to override and specify parameters
+ (called attributes). A definition can be seen as a (partially or totally)
+ filled template that can override or complete attribute values.
+ <tiles:insertDefinition> allows to define these attributes
+ and pass them to the inserted jsp page, called template. Attributes are
+ defined using nested tag <tiles:putAttribute> or
+ <tiles:putListAttribute>.
+
+
+ You must specify name tag attribute, for inserting a definition
+ from definitions factory.
+
+
+ Example :
- You must specify name tag attribute, for inserting a definition from
- definitions factory.
- Example :
+
-
- <tiles:insertDefinition name=".my.tiles.defininition flush="true">
- <tiles:put name="title" value="My first page" />
- <tiles:put name="header" value="/common/header.jsp" />
- <tiles:put name="footer" value="/common/footer.jsp" />
- <tiles:put name="menu" value="/basic/menu.jsp" />
- <tiles:put name="body" value="/basic/helloBody.jsp" />
- </tiles:insertDefinition>
-
+ <code>
+ <tiles:insertDefinition name=".my.tiles.defininition flush="true">
+ <tiles:putAttribute name="title" value="My first page" />
+ <tiles:putAttribute name="header" value="/common/header.jsp" />
+ <tiles:putAttribute name="footer" value="/common/footer.jsp" />
+ <tiles:putAttribute name="menu" value="/basic/menu.jsp" />
+ <tiles:putAttribute name="body" value="/basic/helloBody.jsp" />
+ </tiles:insertDefinition>
+ </code>
]]>
+ insertDefinition
+ org.apache.tiles.jsp.taglib.InsertDefinitionTag
+ scriptless
+
+
+
name
true
true
+ java.lang.String
+
+
- Name of the definition to insert.
+
+ template
+ false
+ true
+ java.lang.String
- flush
- false
- false
- boolean
- True or false. If true, current page out stream is flushed
- before insertion.
+
-
-
- ignore
+ templateType
false
true
- boolean
+ java.lang.String
+
+
- If this attribute is set to true, and the attribute specified by the
- name does not exist, simply return without writing anything. The
- default value is false, which will cause a runtime exception to be
- thrown.
+
+ templateExpression
+ false
+ true
+ java.lang.String
+
+
+
role
false
true
+ java.lang.String
+
+
- If the user is in the specified role, the tag is taken into account;
- otherwise, the tag is ignored (skipped).
+
+ preparer
+ false
+ true
+ java.lang.String
-
- preparer
+
+ true, the response will be flushed after the insert.
+ ]]>
+
+ flush
false
true
-
- The fully qualified class name of preparer.
-
+ boolean
- insertAttribute
- org.apache.tiles.jsp.taglib.InsertAttributeTag
- JSP
- Inserts the value of an attribute into the page.
- This tag can be flexibly used to insert the value of an attribute into a page.
- As in other usages in Tiles, every attribute can be determined to have a "type",
- either set explicitly when it was defined, or "computed". If the type is not explicit, then
- if the attribute value is a valid definition, it will be inserted as such. Otherwise,
- if it begins with a "/" character, it will be treated as a "template". Finally, if it
- has not otherwise been assigned a type, it will be treated as a String and included without
- any special handling.
-
- Example :
-
-
-
-
-
+
+ Declare a list that will be pass as an attribute.
+
+
+ Declare a list that will be pass as an attribute . List elements are added
+ using the tag 'addAttribute' or 'addListAttribute'. This tag can only be used
+ inside 'insertTemplate', 'insertDefinition' or 'definition' tag.
+
]]>
+ addListAttribute
+ org.apache.tiles.jsp.taglib.AddListAttributeTag
+ scriptless
- name
- false
- true
- Name of the attribute to insert. This attribute will be ignored if
- the value attribute is specified.
+
+ role
+ false
+ true
+ java.lang.String
+
+
+
+
+ Import attribute(s) in specified context.
+
+
+ Import attribute(s) to requested scope. Attribute name and scope are
+ optional. If not specified, all attributes are imported in page scope. Once
+ imported, an attribute can be used as any other beans from jsp contexts.
+
+ ]]>
+
+ importAttribute
+ org.apache.tiles.jsp.taglib.ImportAttributeTag
+ empty
- value
+
+ null, all the attributes will be imported.
+ ]]>
+
+ name
false
true
- java.lang.Object
+ java.lang.String
+
+
- Attribute object to render directly. If it specified, the name
- attribute will be ignored.
+ null, the import will go in page scope.
]]>
+ scope
+ false
+ true
+ java.lang.String
- flush
- false
- false
- boolean
- True or false. If true, current page out stream is flushed
- before insertion.
+ name. If
+ null, the value of name will be used.
]]>
+ toName
+ false
+ true
+ java.lang.String
+
+ true, if the attribute is not present, the
+ problem will be ignored.
+ ]]>
+
ignore
false
true
boolean
-
+
+
+
+
If this attribute is set to true, and the attribute specified by the
- name does not exist, simply return without writing anything. The
- default value is false, which will cause a runtime exception to be
- thrown.
+
+ Declare a list that will be pass as attribute to tile.
+
+
+ Declare a list that will be pass as attribute to tile. List elements are
+ added using the tags 'addAttribute' or 'addListAttribute'. This tag can only
+ be used inside 'insertTemplate', 'insertDefinition', 'definition' tags.
+
+ ]]>
+
+ putListAttribute
+ org.apache.tiles.jsp.taglib.PutListAttributeTag
+ scriptless
+
+
+
+ name
+ true
+ true
+ java.lang.String
+
+
+
role
false
true
+ java.lang.String
+
+
- If the user is in the specified role, the tag is taken into account;
- otherwise, the tag is ignored (skipped).
+ true, the list attribute will use, as first elements, the
+ list contained in the list attribute, put with the same name, of the containing definition.
]]>
+ inherit
+ false
+ true
+ boolean
- preparer
+
+ true the attribute will be cascaded to all nested attributes.
+ ]]>
+
+ cascade
false
true
-
- The fully qualified name of the preparer.
-
+ boolean
- definition
- org.apache.tiles.jsp.taglib.definition.DefinitionTag
- JSP
Create a definition at runtime.
-
- Create a new definition at runtime.
- Newly created definition will be available across the entire request.
-
]]>
-
+
+ Create a definition at runtime.
+
+
+ Create a new definition at runtime. Newly created definition will be
+ available across the entire request.
+
+ ]]>
+
+ definition
+ org.apache.tiles.jsp.taglib.DefinitionTag
+ scriptless
- name
- true
- true
- Specifies the name under which the newly created definition bean
- will be saved.
+
+ name
+ false
+ true
+ java.lang.String
+
+
+
template
false
true
+ java.lang.String
+
+
- A string representing the URI of a template
- (a JSP page).
+
-
-
role
false
true
+ java.lang.String
+
+
- Role to check before inserting this definition. If role is not
- defined for current user, definition is not inserted. Checking is
- done at insert time, not during definition process.
+
-
-
extends
false
true
+ java.lang.String
+
+
- Name of a parent definition that is used to initialize this new
- definition. Parent definition is searched in definitions factory.
+
-
-
preparer
false
true
-
- Specifies the preparer name to use. The specified preparer will
- be executed before rendering this newly created definition.
- ]]>
-
+ java.lang.String
- putAttribute
- org.apache.tiles.jsp.taglib.PutAttributeTag
- JSP
- Put an attribute in enclosing attribute container tag.
-
- Enclosing attribute container tag can be :
-
- <initContainer>
- <definition>
- <insertAttribute>
- <insertDefinition>
- <putListAttribute>
-
- (or any other tag which implements the {@link PutAttributeTagParent} interface.
- Exception is thrown if no appropriate tag can be found.
- Put tag can have following atributes :
-
- name : Name of the attribute
- value : value to put as attribute
- type : value type. Only valid if value is a String and is set by
- value="something" or by a bean.
- Possible type are : string (value is used as direct string),
- template (value is used as a page url to insert),
- definition (value is used as a definition name to insert)
- direct : Specify if value is to be used as a direct string or as a
- page url to insert. This is another way to specify the type. It only apply
- if value is set as a string, and type is not present.
- beanName : Name of a bean used for setting value. Only valid if value is not set.
- If property is specified, value come from bean's property. Otherwise, bean
- itself is used for value.
- beanProperty : Name of the property used for retrieving value.
- beanScope : Scope containing bean.
- role : Role to check when 'insert' will be called. If enclosing tag is
- <insert>, role is checked immediately. If enclosing tag is
- <definition>, role will be checked when this definition will be
- inserted.
-
- Value can also come from tag body. Tag body is taken into account only if
- value is not set by one of the tag attributes. In this case Attribute type is
- "string", unless tag body define another type.
+
+ setCurrentContainer
+ org.apache.tiles.jsp.taglib.SetCurrentContainerTag
+ empty
- name
- true
- true
- Name of the attribute.
+ null, the default one will be used.
]]>
-
-
- value
+ containerKey
false
true
- java.lang.Object
-
+ java.lang.String
+
+
+
+
Attribute value. Could be a String or an Object.
- Value can come from a direct assignment (value="aValue") or from a bean.
- One of 'value' 'content' or 'beanName' must be present.
+
+ Inserts the value of an attribute into the page.
+
+
+ This tag can be flexibly used to insert the value of an attribute into a
+ page. As in other usages in Tiles, every attribute can be determined to have
+ a "type", either set explicitly when it was defined, or "computed". If the
+ type is not explicit, then if the attribute value is a valid definition, it
+ will be inserted as such. Otherwise, if it begins with a "/" character, it
+ will be treated as a "template". Finally, if it has not otherwise been
+ assigned a type, it will be treated as a String and included without any
+ special handling.
+
+
+
+ Example :
+
+
+
+ <code>
+ <tiles:insertAttribute name="body" />
+ </code>
+
+ ]]>
+
+ insertAttribute
+ org.apache.tiles.jsp.taglib.InsertAttributeTag
+ scriptless
+
+
+ true, if an exception happens during
+ rendering, of if the attribute is null, the problem will be ignored.
]]>
+ ignore
+ false
+ true
+ boolean
- type
- false
- false
- Specify content type: string, template or definition.
-
- String : Content is printed directly.
- template : Content is included from specified URL. Value is used as an URL.
- definition : Value is the name of a definition defined in factory (xml file). Definition will be searched
- in the inserted tile, in a <tiles:insert attribute="attributeName"> tag, where 'attributeName'
- is the name used for this tag.
-
+
+ preparer
+ false
+ true
+ java.lang.String
+
+
+
role
false
true
+ java.lang.String
+
+
-
- If the user is in the specified role, the tag is taken into account;
- otherwise, the tag is ignored (skipped).
-
+
+ defaultValue
+ false
+ true
+ java.lang.Object
-
-
- putListAttribute
- org.apache.tiles.jsp.taglib.PutListAttributeTag
- JSP
-
- Declare a list that will be pass as attribute to tile.
-
- Declare a list that will be pass as attribute to tile.
- List elements are added using the tag 'add'.
- This tag can only be used inside 'insert' or 'definition' tag.
- ]]>
-
- name
- true
- true
- Name of the list.
+
-
-
-
- addAttribute
-
- org.apache.tiles.jsp.taglib.AddAttributeTag
- JSP
-
- Add an element to the surrounding list.
- Equivalent to 'put', but for list element.
-
- Add an element to the surrounding list.
- This tag can only be used inside putList tag.
- Value can come from a direct assignment (value="aValue") or from a bean.
- One of 'value' or 'beanName' must be present.
- ]]>
-
-
- value
+ defaultValueRole
false
true
- java.lang.Object
+ java.lang.String
+
+
- Attribute value. Can be a String or Object.
+
-
+
+ defaultValueType
+ false
+ true
+ java.lang.String
- type
- false
- false
- Specify content type: string, template or definition.
-
- String : Content is printed directly.
- template : Content is included from specified URL. Value is used as an URL.
- definition : Value denote a definition defined in factory (xml file). Definition will be searched
- in the inserted tile, in a <insert attribute="attributeName"> tag, where 'attributeName'
- is the name used for this tag.
-
+
+ name
+ false
+ true
+ java.lang.String
- role
+
+
+
+ value
false
true
+ org.apache.tiles.Attribute
+
+
- If the user is in the specified role, the tag is taken into account;
- otherwise, the tag is ignored (skipped).
- The role isn't taken into account if <add>
- tag is used in a definition.
+ true, the response will be flushed after the insert.
]]>
+ flush
+ false
+ true
+ boolean
- addListAttribute
- org.apache.tiles.jsp.taglib.AddListAttributeTag
- JSP
-
- Declare a list that will be pass as attribute to tile.
-
- Declare a list that will be pass as attribute to tile.
- List elements are added using the tag 'add'.
- This tag can only be used inside 'insert' or 'definition' tag.
- ]]>
-
-
-
- getAsString
- org.apache.tiles.jsp.taglib.GetAsStringTag
- empty
-
- Render the value of the specified template attribute to the current JspWriter
-
-
- Retrieve the value of the specified template attribute
- property, and render it to the current JspWriter as a String.
- The usual toString() conversions is applied on found value.
- Throw a JSPException if named value is not found.
+
+ Add an element to the surrounding list. Equivalent to 'putAttribute',
+ but for list element.
+
+
+
+ Add an element to the surrounding list. This tag can only be used inside
+ 'putListAttribute' or 'addListAttribute' tags. Value can come from a direct
+ assignment (value="aValue")
+
]]>
+ addAttribute
+ org.apache.tiles.jsp.taglib.AddAttributeTag
+ scriptless
- name
- true
- true
- Attribute name.
+
-
-
- ignore
+ value
false
true
- boolean
+ java.lang.Object
+
+
-
- If this attribute is set to true, and the attribute specified by the name
- does not exist, simply return without writing anything. The default value is false, which will
- cause a runtime exception to be thrown.
-
+
+ expression
+ false
+ true
+ java.lang.String
+
+
+
role
false
true
+ java.lang.String
+
+
-
- If the user is in the specified role, the tag is taken into account;
- otherwise, the tag is ignored (skipped).
-
+
+ type
+ false
+ true
+ java.lang.String
- useAttribute
- org.apache.tiles.jsp.taglib.UseAttributeTag
- org.apache.tiles.jsp.taglib.UseAttributeTag$Tei
- empty
- Use attribute value inside page.
- Declare a Java variable, and an attribute in the specified scope,
- using tile attribute value.
- Java variable and attribute will have the name specified by 'id',
- or the original name if not specified.
+
+ Put an attribute in enclosing attribute container tag.
+
+
+ Enclosing attribute container tag can be :
+
+ <initContainer>
+ <definition>
+ <insertAttribute>
+ <insertDefinition>
+ <putListAttribute>
+
+ (or any other tag which implements the PutAttributeTagParent
+ interface. Exception is thrown if no appropriate tag can be found.
+
+
+ Put tag can have following atributes :
+
+ name : Name of the attribute
+ value : value to put as attribute
+ type : value type. Possible type are : string (value is used as direct
+ string), template (value is used as a page url to insert), definition (value
+ is used as a definition name to insert), object (value is used as it is)
+ role : Role to check when 'insertAttribute' will be called.
+
+
+
+ Value can also come from tag body. Tag body is taken into account only if
+ value is not set by one of the tag attributes. In this case Attribute type is
+ "string", unless tag body define another type.
+
]]>
+ putAttribute
+ org.apache.tiles.jsp.taglib.PutAttributeTag
+ scriptless
- id
- false
- true
- Declared attribute and variable name.
+
+ name
+ true
+ true
+ java.lang.String
- classname
- false
- true
- Class of the declared variable.
+
+ value
+ false
+ true
+ java.lang.Object
- scope
- false
- false
- Scope of the declared attribute. Default to 'page'.
+
+ expression
+ false
+ true
+ java.lang.String
- name
- true
- true
- Tile's attribute name.
+
+ role
+ false
+ true
+ java.lang.String
- ignore
+
+
+
+ type
false
true
- boolean
+ java.lang.String
+
+
-
- If this attribute is set to true, and the attribute specified by the name
- does not exist, simply return without error. The default value is false, which will
- cause a runtime exception to be thrown.
-
+ true the attribute will be cascaded to all nested attributes.
]]>
+ cascade
+ false
+ true
+ boolean
- importAttribute
- org.apache.tiles.jsp.taglib.ImportAttributeTag
- empty
- Import Tile's attribute in specified context.
- Import attribute from tile to requested scope.
- Attribute name and scope are optional. If not specified, all tile
- attributes are imported in page scope.
- Once imported, an attribute can be used as any other beans from jsp
- contexts.
+
+ Render the value of the specified template attribute to the current
+ Writer
+
+
+
+ Retrieve the value of the specified template attribute property, and render
+ it to the current Writer as a String. The usual toString() conversions is
+ applied on found value.
+
]]>
+ getAsString
+ org.apache.tiles.jsp.taglib.GetAsStringTag
+ scriptless
- name
+
+ true, if an exception happens during
+ rendering, of if the attribute is null, the problem will be ignored.
+ ]]>
+
+ ignore
false
true
+ boolean
+
+
- Tile's attribute name. If not specified, all attributes are
- imported.
+
+ preparer
+ false
+ true
+ java.lang.String
- toName
+
+
+
+ role
false
true
+ java.lang.String
+
+
- Name of the destination attribute. If not specified, the name will
- be the same as specified in name attribute
+
+ defaultValue
+ false
+ true
+ java.lang.Object
- scope
- false
- false
- Scope into which attribute is imported. Default to page.
+
+ defaultValueRole
+ false
+ true
+ java.lang.String
- ignore
+
+
+
+ defaultValueType
false
true
- boolean
+ java.lang.String
+
+
- If this attribute is set to true, and the attribute specified by
- the name does not exist, simply return without error. The default
- value is false, which will cause a runtime exception to be thrown.
+
+ name
+ true
+ true
+ java.lang.String
-
-
- initContainer
- org.apache.tiles.jsp.taglib.definition.InitContainerTag
- JSP
-
- Initialize the TilesContainer.
-
- In order to use the Tiles system, a TilesContainer must be instantiated.
- This initialization is generally done by the TilesListener (or perhaps the
- TilesServlet or TilesFilter).
-
-
- If the intialization needs to be dynamic, you can initialize the container using
- this tag. Realize however, that this tag MUST be executed prior to invoking
- any other definitions. Additionally, the initilization may only be done once,
- and any subsequent invocations will be ignored.
-
- ]]>
-
- containerFactory
+
+
+
+ value
false
true
- Container Factory implementation used to instantiate the container. ]]>
+ org.apache.tiles.Attribute
-
-
- destroyContainer
- org.apache.tiles.jsp.taglib.definition.DestroyContainerTag
- empty
-
- Destroy the TilesContainer.
- ]]>
-
-
-
diff --git a/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/web.xml b/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/web.xml
index c493f5e277c..b93f76fa73b 100644
--- a/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/web.xml
+++ b/core/org.wso2.carbon.ui/src/main/resources/web/WEB-INF/web.xml
@@ -20,15 +20,15 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
-
- TilesServlet
- org.apache.tiles.web.startup.TilesServlet
-
- 0
-
+
+
+
+
+
+
+
+
+
org.apache.tiles.context.TilesContextFactory
diff --git a/core/org.wso2.carbon.user.core/pom.xml b/core/org.wso2.carbon.user.core/pom.xml
index 921998786ac..be28d63044e 100644
--- a/core/org.wso2.carbon.user.core/pom.xml
+++ b/core/org.wso2.carbon.user.core/pom.xml
@@ -151,6 +151,7 @@
+ org.apache.maven.plugins
maven-resources-plugin
@@ -205,6 +206,10 @@
*;resolution:=optional
*
+
+ osgi.service;objectClass=org.wso2.carbon.user.core.service.RealmService,
+ osgi.service;objectClass=org.wso2.carbon.user.api.UserRealmService
+
diff --git a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/common/DefaultRealm.java b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/common/DefaultRealm.java
index cb5859ae6d2..1d9bb7f92f6 100644
--- a/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/common/DefaultRealm.java
+++ b/core/org.wso2.carbon.user.core/src/main/java/org/wso2/carbon/user/core/common/DefaultRealm.java
@@ -19,6 +19,7 @@
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.osgi.annotation.bundle.Capability;
import org.wso2.carbon.caching.impl.CachingConstants;
import org.wso2.carbon.caching.impl.Util;
import org.wso2.carbon.user.api.RealmConfiguration;
@@ -51,6 +52,13 @@
import static org.wso2.carbon.user.core.constants.UserCoreErrorConstants.ErrorMessages.ERROR_CODE_DUPLICATE_ERROR_WHILE_ADDING_CLAIM_MAPPINGS;
+@Capability(
+ namespace = "osgi.service",
+ attribute = {
+ "objectClass=org.wso2.carbon.user.core.UserRealm",
+ "service.scope=singleton"
+ }
+)
public class DefaultRealm implements UserRealm {
private static Log log = LogFactory.getLog(DefaultRealm.class);
diff --git a/core/org.wso2.carbon.utils/pom.xml b/core/org.wso2.carbon.utils/pom.xml
index c96a01a85b1..8422b201deb 100644
--- a/core/org.wso2.carbon.utils/pom.xml
+++ b/core/org.wso2.carbon.utils/pom.xml
@@ -273,6 +273,9 @@
*;resolution:=optional
*
+
+ osgi.service;objectClass=org.wso2.carbon.context.CarbonCoreInitializedEvent
+
diff --git a/core/pom.xml b/core/pom.xml
index 9f38a464ea9..0252ce2a894 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -113,7 +113,7 @@
org.wso2.carbon.registry.api
org.wso2.carbon.user.api
org.wso2.carbon.osgi.security
- org.wso2.carbon.registry.xboot
+
org.wso2.carbon.queuing
org.wso2.carbon.utils
org.wso2.carbon.securevault
@@ -147,7 +147,7 @@
org.wso2.carbon.ndatasource.common
org.wso2.carbon.ndatasource.core
org.wso2.carbon.ndatasource.rdbms
- org.wso2.carbon.framework.exporter
+
org.wso2.carbon.pax-logging-log4j2-plugins
org.wso2.carbon.logging.correlation
org.wso2.carbon.hazelcast
diff --git a/core/server-role-manager/org.wso2.carbon.roles.mgt/pom.xml b/core/server-role-manager/org.wso2.carbon.roles.mgt/pom.xml
index d3671075512..3ea75fbadca 100644
--- a/core/server-role-manager/org.wso2.carbon.roles.mgt/pom.xml
+++ b/core/server-role-manager/org.wso2.carbon.roles.mgt/pom.xml
@@ -53,7 +53,7 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
diff --git a/core/server-role-manager/pom.xml b/core/server-role-manager/pom.xml
index b83fe69214f..4105c0b28f0 100644
--- a/core/server-role-manager/pom.xml
+++ b/core/server-role-manager/pom.xml
@@ -36,4 +36,3 @@
-
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-licensed/1.0.0/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-licensed/1.0.0/pom.xml
index 0b6f33897d9..e6a838d4413 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-licensed/1.0.0/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-licensed/1.0.0/pom.xml
@@ -27,6 +27,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -53,4 +54,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-unlicensed/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-unlicensed/pom.xml
index c9cf236862e..8388b4c960d 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-unlicensed/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature-unlicensed/pom.xml
@@ -27,6 +27,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -58,4 +59,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.0/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.0/pom.xml
index 7f8187a9b7b..655aeb45d60 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.0/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.0/pom.xml
@@ -27,6 +27,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -53,4 +54,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.1/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.1/pom.xml
index 25b166f0d72..07684207b5b 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.1/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature1/1.0.1/pom.xml
@@ -27,6 +27,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -53,4 +54,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.0/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.0/pom.xml
index d6e712a36ff..4f40094132f 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.0/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.0/pom.xml
@@ -39,6 +39,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -68,4 +69,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.1/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.1/pom.xml
index d8e43cb522f..d921f2f54b9 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.1/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature2/1.0.1/pom.xml
@@ -39,6 +39,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -68,4 +69,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.0/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.0/pom.xml
index 9fcdcd519c9..795f85abcc1 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.0/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.0/pom.xml
@@ -39,6 +39,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -70,4 +71,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.1/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.1/pom.xml
index 97b2d3d55b1..179530c0d2e 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.1/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/feature3/1.0.1/pom.xml
@@ -39,6 +39,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -70,4 +71,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/licensed-unlicensed-features/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/licensed-unlicensed-features/pom.xml
index 982c6bbe3d1..5836bd93643 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/licensed-unlicensed-features/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/features/licensed-unlicensed-features/pom.xml
@@ -33,6 +33,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
@@ -59,4 +60,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/repository/pom.xml b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/repository/pom.xml
index b8b501f7abe..7410b3d5fdc 100644
--- a/distribution/integration/test-common/common-artifacts/sample-feature-repo1/repository/pom.xml
+++ b/distribution/integration/test-common/common-artifacts/sample-feature-repo1/repository/pom.xml
@@ -19,6 +19,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
2-p2-repo-generation
@@ -67,4 +68,4 @@
-
\ No newline at end of file
+
diff --git a/distribution/integration/tests-integration/tests/pom.xml b/distribution/integration/tests-integration/tests/pom.xml
index d4228571e60..a812370491f 100644
--- a/distribution/integration/tests-integration/tests/pom.xml
+++ b/distribution/integration/tests-integration/tests/pom.xml
@@ -24,7 +24,7 @@
maven-surefire-plugin
false
- -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
+ -Xmx1024m
org.wso2.carbon
org.wso2.carbon.server.admin.ui
@@ -389,6 +406,12 @@
org.wso2.carbon.automationutils
org.wso2.carbon.integration.common.utils
4.4.1
+
+
+ org.slf4j
+ log4j-over-slf4j
+
+
org.apache.logging.log4j
diff --git a/distribution/integration/tests-integration/tests/src/test/java/org/wso2/carbon/integration/tests/carbontools/CarbonServerBasicOperationTestCase.java b/distribution/integration/tests-integration/tests/src/test/java/org/wso2/carbon/integration/tests/carbontools/CarbonServerBasicOperationTestCase.java
index 1cb445b49d5..af8c7b7a2e2 100755
--- a/distribution/integration/tests-integration/tests/src/test/java/org/wso2/carbon/integration/tests/carbontools/CarbonServerBasicOperationTestCase.java
+++ b/distribution/integration/tests-integration/tests/src/test/java/org/wso2/carbon/integration/tests/carbontools/CarbonServerBasicOperationTestCase.java
@@ -35,7 +35,6 @@
import org.wso2.carbon.integration.tests.common.utils.CarbonIntegrationBaseTest;
import org.wso2.carbon.integration.tests.common.utils.CarbonIntegrationConstants;
import org.wso2.carbon.utils.ServerConstants;
-import sun.management.VMManagement;
import javax.xml.xpath.XPathExpressionException;
import java.io.BufferedReader;
@@ -208,17 +207,11 @@ public void testCarbonDumpCommandOnWindows() throws Exception {
if (CarbonCommandToolsUtil.getCurrentOperatingSystem().
contains(OperatingSystems.WINDOWS.name().toLowerCase())) {
- RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean();
- Field jvmField = runtimeMXBean.getClass().getDeclaredField("jvm");
- jvmField.setAccessible(true);
- VMManagement vmManagement = (VMManagement) jvmField.get(runtimeMXBean);
- Method getProcessIdMethod = vmManagement.getClass().getDeclaredMethod("getProcessId");
- getProcessIdMethod.setAccessible(true);
- Integer processId = (Integer) getProcessIdMethod.invoke(vmManagement);
+ long pid = ProcessHandle.current().pid();
String[] cmdArray = new String[]
{"cmd.exe", "/c", "carbondump.bat", "-carbonHome"
- , carbonHome, "-pid", Integer.toString(processId)};
+ , carbonHome, "-pid", Long.toString(pid)};
processDump = CarbonCommandToolsUtil.runScript(carbonHome + "/bin", cmdArray);
assertTrue(isDumpFileFound(carbonHome), "Couldn't find the dump file");
} else {
diff --git a/distribution/integration/tests-integration/tests/src/test/resources/client/modules/addressing-1.6.1-wso2v116-SNAPSHOT.mar b/distribution/integration/tests-integration/tests/src/test/resources/client/modules/addressing-1.6.1-wso2v116-SNAPSHOT.mar
new file mode 100644
index 0000000000000000000000000000000000000000..047a78e3588b8d403cce16839c662c26832b3b39
GIT binary patch
literal 31565
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
-
- org.apache.maven.plugins
- maven-dependency-plugin
- false
-
-
- unpack-equinox-executable
- test
-
- unpack
-
-
-
-
- org.eclipse.equinox
- org.eclipse.equinox.executable
- 3.5.0.v20110530-7P7NFUFFLWUl76mart
- zip
- true
- target
-
-
-
-
-
-
org.wso2.maven
carbon-p2-plugin
+ true
p2-repo-generation
@@ -213,6 +188,7 @@
org.wso2.carbon:org.wso2.carbon.core.runtime.feature:${carbon.kernel.version}
+ true
@@ -224,9 +200,6 @@
${basedir}/carbon.product
-
- ${basedir}/target/org.eclipse.equinox.executable_3.5.0.v20110530-7P7NFUFFLWUl76mart
-
file:${basedir}/target/p2-repo
file:${basedir}/target/p2-repo
diff --git a/distribution/product/modules/features/org.wso2.carbon.styles.feature/pom.xml b/distribution/product/modules/features/org.wso2.carbon.styles.feature/pom.xml
index 43a86f9f091..e23d6416f12 100644
--- a/distribution/product/modules/features/org.wso2.carbon.styles.feature/pom.xml
+++ b/distribution/product/modules/features/org.wso2.carbon.styles.feature/pom.xml
@@ -42,6 +42,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
p2-feature-generation
diff --git a/distribution/product/modules/p2-profile-gen/pom.xml b/distribution/product/modules/p2-profile-gen/pom.xml
index 2d2b80d32ac..7810ac680a0 100644
--- a/distribution/product/modules/p2-profile-gen/pom.xml
+++ b/distribution/product/modules/p2-profile-gen/pom.xml
@@ -61,6 +61,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
2-p2-repo-generation
@@ -80,6 +81,9 @@
org.wso2.ciphertool:org.wso2.ciphertool.feature:${version.ciphertool}
+
+
+
@@ -106,6 +110,10 @@
org.wso2.ciphertool.feature.group
${version.ciphertool}
+
+
+
+
diff --git a/features/org.wso2.carbon.core.common.feature/pom.xml b/features/org.wso2.carbon.core.common.feature/pom.xml
index 0671c986583..eccf0102669 100644
--- a/features/org.wso2.carbon.core.common.feature/pom.xml
+++ b/features/org.wso2.carbon.core.common.feature/pom.xml
@@ -36,6 +36,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
4-p2-feature-generation
@@ -54,10 +55,7 @@
- org.eclipse.equinox:org.eclipse.equinox.http.servlet:${version.equinox.http.servlet}
-
-
- org.eclipse.equinox:org.eclipse.equinox.http.helper:${version.equinox.http.helper}
+ org.eclipse.platform:org.eclipse.equinox.http.servlet:${version.equinox.http.servlet}
org.wso2.orbit.org.apache.tomcat:tomcat-jsp-api:${orbit.version.tomcat.jsp.api}
@@ -78,7 +76,7 @@
commons-pool.wso2:commons-pool:${orbit.version.commons.pool}
org.apache.abdera.wso2:abdera:${orbit.version.abdera}
org.apache.axis2.wso2:axis2:${orbit.version.axis2}
- org.apache.tiles.wso2:tiles-jsp:${orbit.version.tiles}
+ org.wso2.orbit.org.apache.tiles:tiles-jsp:${orbit.version.tiles}
org.wso2.orbit.org.apache.xmlbeans:xmlbeans:${version.xmlbeans}
org.apache.ws.commons.axiom.wso2:axiom:${orbit.version.axiom}
org.wso2.orbit.org.apache.neethi:neethi:${neethi.osgi.version}
@@ -172,6 +170,11 @@
org.wso2.carbon.crypto:org.wso2.carbon.crypto.provider:${carbon.crypto.version}
org.wso2.orbit.sun.xml.bind:jaxb:${version.org.wso2.orbit.javax.xml.bind.jaxb}
+
+ org.wso2.orbit.javax.activation:activation:1.1.1.wso2v4
+
+
+ javax.xml.soap:javax.xml.soap-api:1.4.0
diff --git a/features/org.wso2.carbon.core.feature/pom.xml b/features/org.wso2.carbon.core.feature/pom.xml
index 3e4f071a8c7..c63ee8ea823 100644
--- a/features/org.wso2.carbon.core.feature/pom.xml
+++ b/features/org.wso2.carbon.core.feature/pom.xml
@@ -49,6 +49,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
4-p2-feature-generation
diff --git a/features/org.wso2.carbon.core.runtime.feature/pom.xml b/features/org.wso2.carbon.core.runtime.feature/pom.xml
index afbd9bebf1f..3d476d1ded4 100644
--- a/features/org.wso2.carbon.core.runtime.feature/pom.xml
+++ b/features/org.wso2.carbon.core.runtime.feature/pom.xml
@@ -38,19 +38,24 @@
org.eclipse.osgi
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
+
+
+
+
+
- org.wso2.eclipse.equinox
- org.eclipse.equinox.launcher.gtk.linux.x86
+ org.eclipse.platform
+ org.eclipse.equinox.launcher.gtk.linux.x86_64
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.common
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.simpleconfigurator
@@ -58,31 +63,39 @@
org.wso2.carbon.osgi.security
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.util
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.ds
- org.wso2.eclipse.equinox
+ org.eclipse.platform
+ org.eclipse.osgi.util
+
+
+ org.apache.felix
+ org.apache.felix.scr
+
+
+ org.eclipse.platform
org.eclipse.equinox.launcher
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.app
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.concurrent
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.frameworkadmin
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.frameworkadmin.equinox
@@ -102,119 +115,140 @@
org.apache.felix.gogo.runtime
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.artifact.repository
- org.wso2.eclipse.equinox
+ org.tukaani
+ xz
+
+
+ org.eclipse.platform
org.eclipse.equinox.p2.console
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.core
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.director
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.director.app
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.directorywatcher
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.engine
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.extensionlocation
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.garbagecollector
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.jarprocessor
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata.repository
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.reconciler.dropins
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.repository.tools
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.repository
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.touchpoint.eclipse
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.touchpoint.natives
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.updatechecker
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.updatesite
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.publisher.eclipse
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.preferences
- org.wso2.eclipse.equinox
+ org.osgi
+ org.osgi.service.prefs
+
+
+
+ org.bouncycastle
+ bcpg-jdk18on
+
+
+ org.bouncycastle
+ bcutil-jdk18on
+
+
+ org.bouncycastle
+ bcprov-jdk18on
+
+
+ org.eclipse.platform
org.eclipse.equinox.registry
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.security
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.simpleconfigurator.manipulator
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.publisher
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.contenttype
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.expressions
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.jobs
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.runtime
@@ -242,7 +276,7 @@
org.sat4j.pb
- org.eclipse.osgi
+ org.eclipse.platform
org.eclipse.equinox.p2.transport.ecf
@@ -253,6 +287,63 @@
org.wso2.eclipse.osgi
org.eclipse.osgi.compatibility.state
+
+ org.osgi
+ org.osgi.service.component
+
+
+ org.osgi
+ org.osgi.util.promise
+
+
+ org.osgi
+ org.osgi.util.function
+
+
+ org.osgi
+ org.osgi.service.cm
+
+
+ org.osgi
+ org.osgi.service.upnp
+
+
+ org.osgi
+ org.osgi.service.device
+
+
+ org.osgi
+ org.osgi.service.event
+
+
+ org.osgi
+ org.osgi.service.wireadmin
+
+
+ org.osgi
+ org.osgi.service.provisioning
+
+
+ org.osgi
+ org.osgi.service.useradmin
+
+
+ org.osgi
+ org.osgi.service.metatype
+
+
+ org.osgi
+ org.osgi.service.permissionadmin
+
+
+ org.osgi
+ org.osgi.service.http.whiteboard
+
+
+ org.eclipse.platform
+ org.eclipse.equinox.http.service.api
+
+
@@ -260,6 +351,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
4-p2-feature-generation
@@ -276,62 +368,81 @@
- org.wso2.eclipse.equinox:org.eclipse.equinox.common
- org.wso2.eclipse.equinox:org.eclipse.equinox.simpleconfigurator
+ org.eclipse.platform:org.eclipse.equinox.common
+ org.eclipse.platform:org.eclipse.equinox.simpleconfigurator
org.wso2.carbon:org.wso2.carbon.osgi.security
- org.wso2.eclipse.equinox:org.eclipse.equinox.ds
- org.wso2.eclipse.equinox:org.eclipse.equinox.launcher
- org.wso2.eclipse.equinox:org.eclipse.equinox.util
- org.wso2.eclipse.osgi:org.eclipse.osgi.services
+ org.eclipse.platform:org.eclipse.equinox.ds
+
+ org.eclipse.platform:org.eclipse.equinox.launcher
+ org.eclipse.platform:org.eclipse.equinox.util
+ org.eclipse.platform:org.eclipse.osgi.services
org.eclipse.platform:org.eclipse.osgi
- org.eclipse.equinox:org.eclipse.equinox.app
- org.wso2.eclipse.equinox:org.eclipse.equinox.concurrent
- org.wso2.eclipse.equinox:org.eclipse.equinox.frameworkadmin
- org.wso2.eclipse.equinox:org.eclipse.equinox.frameworkadmin.equinox
- org.wso2.eclipse.equinox:org.eclipse.equinox.preferences
- org.wso2.eclipse.equinox:org.eclipse.equinox.registry
- org.wso2.eclipse.equinox:org.eclipse.equinox.security
- org.wso2.eclipse.equinox:org.eclipse.equinox.simpleconfigurator.manipulator
+ org.eclipse.platform:org.eclipse.equinox.app
+ org.eclipse.platform:org.eclipse.equinox.concurrent
+ org.eclipse.platform:org.eclipse.equinox.frameworkadmin
+ org.eclipse.platform:org.eclipse.equinox.frameworkadmin.equinox
+ org.eclipse.platform:org.eclipse.equinox.preferences
+ org.osgi:org.osgi.service.prefs
+ org.bouncycastle:bcutil-jdk18on
+ org.bouncycastle:bcprov-jdk18on
+ org.bouncycastle:bcpg-jdk18on
+ org.eclipse.platform:org.eclipse.equinox.registry
+ org.eclipse.platform:org.eclipse.equinox.security
+ org.eclipse.platform:org.eclipse.equinox.simpleconfigurator.manipulator
-
+ org.apache.felix:org.apache.felix.scr
org.eclipse.platform:org.eclipse.equinox.console
org.apache.felix:org.apache.felix.gogo.command
org.apache.felix:org.apache.felix.gogo.runtime
org.apache.felix:org.apache.felix.gogo.shell
- org.eclipse.core:org.eclipse.core.contenttype
- org.eclipse.core:org.eclipse.core.expressions
- org.eclipse.core:org.eclipse.core.jobs
- org.eclipse.core:org.eclipse.core.runtime
+ org.eclipse.platform:org.eclipse.core.contenttype
+ org.eclipse.platform:org.eclipse.core.expressions
+ org.eclipse.platform:org.eclipse.core.jobs
+ org.eclipse.platform:org.eclipse.core.runtime
org.eclipse.ecf:org.eclipse.ecf
org.eclipse.ecf:org.eclipse.ecf.filetransfer
org.eclipse.ecf:org.eclipse.ecf.identity
org.eclipse.ecf:org.eclipse.ecf.provider.filetransfer
org.eclipse:org.sat4j.core
org.eclipse:org.sat4j.pb
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.artifact.repository
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.console
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.core
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.director
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.engine
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.garbagecollector
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.jarprocessor
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.metadata
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.metadata.repository
- org.eclipse.equinox:org.eclipse.equinox.p2.publisher
- org.eclipse.equinox:org.eclipse.equinox.p2.touchpoint.eclipse
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.touchpoint.natives
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.updatechecker
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.director.app
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.directorywatcher
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.extensionlocation
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.repository.tools
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.repository
- org.wso2.eclipse.equinox:org.eclipse.equinox.p2.updatesite
- org.eclipse.equinox:org.eclipse.equinox.p2.publisher.eclipse
- org.wso2.eclipse.equinox:org.eclipse.equinox.launcher.gtk.linux.x86
- org.eclipse.osgi:org.eclipse.equinox.p2.transport.ecf
+ org.eclipse.platform:org.eclipse.equinox.p2.artifact.repository
+ org.tukaani:xz
+ org.eclipse.platform:org.eclipse.equinox.p2.console
+ org.eclipse.platform:org.eclipse.equinox.p2.core
+ org.eclipse.platform:org.eclipse.equinox.p2.director
+ org.eclipse.platform:org.eclipse.equinox.p2.engine
+ org.eclipse.platform:org.eclipse.equinox.p2.garbagecollector
+ org.eclipse.platform:org.eclipse.equinox.p2.jarprocessor
+ org.eclipse.platform:org.eclipse.equinox.p2.metadata
+ org.eclipse.platform:org.eclipse.equinox.p2.metadata.repository
+ org.eclipse.platform:org.eclipse.equinox.p2.publisher
+ org.eclipse.platform:org.eclipse.equinox.p2.touchpoint.eclipse
+ org.eclipse.platform:org.eclipse.equinox.p2.touchpoint.natives
+ org.eclipse.platform:org.eclipse.equinox.p2.updatechecker
+ org.eclipse.platform:org.eclipse.equinox.p2.director.app
+ org.eclipse.platform:org.eclipse.equinox.p2.directorywatcher
+ org.eclipse.platform:org.eclipse.equinox.p2.extensionlocation
+ org.eclipse.platform:org.eclipse.equinox.p2.repository.tools
+ org.eclipse.platform:org.eclipse.equinox.p2.repository
+ org.eclipse.platform:org.eclipse.equinox.p2.updatesite
+ org.eclipse.platform:org.eclipse.equinox.p2.publisher.eclipse
+ org.eclipse.platform:org.eclipse.equinox.p2.transport.ecf
+ org.eclipse.platform:org.eclipse.equinox.http.service.api
org.eclipse.ecf.provider.filetransfer:httpclient
org.wso2.eclipse.osgi:org.eclipse.osgi.compatibility.state
+ org.osgi:org.osgi.service.component
+ org.osgi:org.osgi.util.promise
+ org.osgi:org.osgi.util.function
+ org.osgi:org.osgi.service.cm
+ org.osgi:org.osgi.service.upnp
+ org.osgi:org.osgi.service.device
+ org.osgi:org.osgi.service.event
+ org.osgi:org.osgi.service.wireadmin
+ org.osgi:org.osgi.service.provisioning
+ org.osgi:org.osgi.service.useradmin
+ org.osgi:org.osgi.service.metatype
+ org.osgi:org.osgi.service.permissionadmin
+ org.osgi:org.osgi.service.http.whiteboard
diff --git a/features/org.wso2.carbon.core.server.feature/pom.xml b/features/org.wso2.carbon.core.server.feature/pom.xml
index d5addc79e14..cbec3bda17d 100644
--- a/features/org.wso2.carbon.core.server.feature/pom.xml
+++ b/features/org.wso2.carbon.core.server.feature/pom.xml
@@ -36,6 +36,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
4-p2-feature-generation
@@ -76,6 +77,11 @@
org.wso2.orbit.org.apache.poi:poi-ooxml:${orbit.version.poi.ooxml}
+ javax.annotation:javax.annotation-api:${version.javax.annotation.annotation-api}
+
+ com.google.guava:guava:
+ com.google.guava:failureaccess:1.0.1
+
diff --git a/features/org.wso2.carbon.core.ui.feature/pom.xml b/features/org.wso2.carbon.core.ui.feature/pom.xml
index 67c638863f5..1041e4a5d17 100644
--- a/features/org.wso2.carbon.core.ui.feature/pom.xml
+++ b/features/org.wso2.carbon.core.ui.feature/pom.xml
@@ -36,6 +36,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
4-p2-feature-generation
@@ -54,6 +55,7 @@
org.eclipse.platform:org.eclipse.equinox.jsp.jasper:${version.equinox.jsp.jasper}
+ org.glassfish:jakarta.el:3.0.4
org.wso2.carbon:org.wso2.carbon.ui:${carbon.kernel.version}
org.wso2.carbon:org.wso2.carbon.core.commons.stub:${carbon.kernel.version}
org.wso2.carbon:org.wso2.carbon.ui.menu.general:${carbon.kernel.version}
diff --git a/features/org.wso2.carbon.hazelcast.feature/pom.xml b/features/org.wso2.carbon.hazelcast.feature/pom.xml
index c283ef84eba..66ab5b9e8b3 100644
--- a/features/org.wso2.carbon.hazelcast.feature/pom.xml
+++ b/features/org.wso2.carbon.hazelcast.feature/pom.xml
@@ -35,6 +35,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
4-p2-feature-generation
diff --git a/parent/pom.xml b/parent/pom.xml
index 02ca5342a22..cf063108d89 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -19,6 +19,8 @@
3.0.0
+
+
@@ -50,7 +52,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 1.8
+ 21
@@ -80,7 +82,6 @@
org.apache.maven.plugins
maven-compiler-plugin
- ${maven.compiler.plugin.version}
org.apache.maven.plugins
@@ -108,10 +109,11 @@
org.apache.maven.plugins
maven-compiler-plugin
+ 3.12.1
UTF-8
- 1.8
- 1.8
+ 21
+ 21
@@ -293,6 +295,11 @@
+
+ org.apache.maven.plugins
+ maven-resources-plugin
+ ${maven.resources.plugin.version}
+
@@ -306,75 +313,73 @@
[${carbon.kernel.version}, 4.10.0)
- 1.1.200.v20160504-1450
- 3.8.0.v20160509-1230
- 1.4.400.v20160226-2036
- 1.3.200.v20160318-1642
- 1.0.500.v20130404-1337
- 1.3.100.v20130327-1442
- 1.1.0.v20130327-1442
- 2.0.300.v20160504-1450
- 1.0.700.v20160102-2223
- 3.6.0.v20160120-1756
- 3.6.0.v20150318-1503
- 1.2.100.v20150423-1356
- 2.0.200.v20160504-1450
- 1.1.400.v20160518-1444
- 3.9.0.v20130326-1255
- 3.5.100.v20160504-1419
- 3.14.0
- 3.4.200.v20130326-1255
- 3.4.500.v20130515-1343
- 3.5.300.v20130429-1813
- 1.3.300
+ 1.5.200
+ 3.19.0
+ 1.6.200
+ 1.6.700
+ 1.1.300
+ 1.7.0
+ 1.3.0
+ 2.3.100
+ 1.3.100
+ 3.11.0
+ 3.12.0
+ 1.4.200
+ 2.3.100
+ 1.1.800
+ 3.31.0
+ 3.12.0
+ 3.19.0
+ 3.9.300
+ 3.9.300
+ 3.15.200
+ 1.4.700
1.0.200.v20160504-1419
- 3.2.0.v20130604-1622
- 5.0.0.v20130604-1622
- 3.2.0.v20130604-1622
- 3.2.0.v20130604-1622
+ 3.11.0
+ 5.1.103
+ 3.10.0
+ 3.3.0
2.3.5.v201308161310
2.3.5.v201308161310
2.3.0.v20110329
[1.9,2.0)
[1.2.0,2.0)
- 1.1.400.v20130418-1354
- 1.1.0.wso2v1
- 1.1.200
+ 1.8.100
+
+ 1.2.0
3.0.0.v201112011016
2.2.0.v201108011116
2.2.0.v201112011158
- 2.2.2.v201205150955
-
- 1.1.300.v20131211-1531
- 2.3.0.v20131211-1531
- 2.3.100.v20140224-1921
- 1.0.300.v20150129-0838
- 1.1.0.v20131211-1531
- 2.3.0.v20140506-1720
- 1.0.300.v20131113-1212
+
+ 1.5.300
+ 2.11.0
+ 2.6.300
+ 1.3.300
+ 1.4.300
+ 2.10.0
+ 1.3.300
- 1.2.100.v20131119-0908
- 1.0.200.v20131115-1210
- 1.0.300.v20131211-1531
- 2.2.0.v20131211-1531
- 1.2.100.v20131209-2144
- 1.1.200.v20131119-0908
- 2.1.0.v20131211-1531
- 2.3.0.v20131211-1531
- 2.1.0.v20110511-wso2v1
-
- 1.1.100.v20140523-0116
- 1.1.200.v20131119-0908
- 1.0.400.v20131211-1531
- 0.10.0.v201212101605
- 0.10.0.v201209301036
- 0.10.0.v201209301215
- 1.0.0.v20110511
- 1.2.0.v20110511
- 1.0.100.v20110902-0807
+ 1.5.300
+ 1.3.200
+ 1.3.300
+ 2.9.0
+ 1.5.300
+ 1.5.300
+ 2.4.300
+ 2.8.100
+ 2.4.200
+ 1.5.200
+ 1.4.200
+ 1.3.200
+ 1.1.4
+ 1.1.6
+ 1.1.2
+ 1.6.0
+ 1.9.100
+ 1.4.200
4.0.200.v20120319-0616
- 5.1.2
+ 5.4.15-SNAPSHOT
1.1.13
@@ -397,9 +402,9 @@
[1.2.1, 1.3.0)
- 2.0.5.wso2v3
- 2.0.5
- [2.0.5, 2.2.0)
+ 3.0.7.wso2v2
+ 3.0.7
+
2.2.wso2v1
@@ -409,7 +414,7 @@
1.0-wso2v2
- 1.0.0.wso2v3
+ 1.0.0.wso2v4
1.0.0.wso2v3
[1.0.0.wso2v3, 2)
@@ -451,7 +456,7 @@
3.1.0.RELEASE
- 1.6.1-wso2v111
+ 1.6.1-wso2v116-SNAPSHOT
[1.6.1, 1.7.0)
${version.axis2}
${version.axis2}
@@ -482,10 +487,10 @@
1.1.2.wso2v1
- 9.0.108
- ${version.tomcat}.wso2v1
- ${version.tomcat}.wso2v1
- ${version.tomcat}.wso2v1
+ 9.0.85
+ ${version.tomcat}.wso2v2
+ ${version.tomcat}.wso2v2
+ ${version.tomcat}.wso2v2
${version.tomcat}.wso2v1
${version.tomcat}.wso2v1
@@ -534,7 +539,7 @@
1.16.0.wso2v1
0.1.0.wso2v1
3.1.0.wso2v1
- 1.6.0.wso2v1
+ 1.5.0.wso2v3
1.5.0.wso2v2
1.8.wso2v1
@@ -543,7 +548,7 @@
3.1.0.wso2v6
1.5.6.wso2v1
- 1.2.0.wso2v1
+ 1.2.0.wso2v3
5.1.1.wso2v1
@@ -566,7 +571,6 @@
1.0
1.2
1.0
- 2.2.0.v201108011116
0.3.3.wso2v1
3.3.5.wso2v1
2.1
@@ -577,12 +581,12 @@
1.1.1
2.3.2.wso2v1
1.1.0.wso2v2
- 1.3.2
+ 1.3.2
3.8.0
1.3
1.7.4
- 3.2.0
+ 5.1.9
2.1.2
2.4
1.7
@@ -603,19 +607,19 @@
2.4.1
2.11.0
- 4.4.3
- 6.10
+ 4.4.16-SNAPSHOT
+ 7.10.1
1.5.5
- 0.8.2
- 2.22.0
- 2.22.0
- 2.23.4
- 2.0.2
+ 0.8.12
+ 3.3.0
+ 3.3.0
+ 5.3.1
+ 3.3.1
- 3.1.0.wso2v4
+ 3.1.0.wso2v5
[1.2.0,1.3.0)
@@ -647,6 +651,7 @@
[4.3.1.wso2v2,5.0.0)
+ 1.82
@@ -662,193 +667,240 @@
${version.equinox.osgi}
- org.wso2.eclipse.osgi
+ org.eclipse.platform
org.eclipse.osgi.services
${version.equinox.osgi.services}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
+ org.eclipse.osgi.util
+ 3.7.300
+
+
+ org.apache.felix
+ org.apache.felix.scr
+ 2.2.10
+
+
+
+ org.eclipse.platform
org.eclipse.equinox.common
${version.equinox.common}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.simpleconfigurator
${version.equinox.simpleconfigurator}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.util
${version.equinox.util}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.ds
${version.equinox.ds}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.launcher
${version.equinox.launcher}
+
+
+
+
+
+
- org.wso2.eclipse.equinox
- org.eclipse.equinox.launcher.gtk.linux.x86
- ${version.equinox.launcher.gtk.linux.x86}
+ org.eclipse.platform
+ org.eclipse.equinox.launcher.gtk.linux.x86_64
+ 1.2.900
+
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.app
${version.equinox.app}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.concurrent
${version.equinox.concurrent}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.frameworkadmin
${version.equinox.frameworkadmin}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.frameworkadmin.equinox
${version.equinox.frameworkadmin.equinox}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.artifact.repository
${version.equinox.p2.artifact.repository}
+
+
+ org.tukaani
+ xz
+ 1.9
+
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.console
${version.equinox.p2.console}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.core
${version.equinox.p2.core}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.director
${version.equinox.p2.director}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.director.app
${version.equinox.p2.director.app}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.directorywatcher
${version.equinox.p2.directorywatcher}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.engine
${version.equinox.p2.engine}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.extensionlocation
${version.equinox.p2.extensionlocation}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.garbagecollector
${version.equinox.p2.garbagecollector}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.jarprocessor
${version.equinox.p2.jarprocessor}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata
${version.equinox.p2.metadata}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.metadata.repository
${version.equinox.p2.metadata.repository}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.reconciler.dropins
${version.equinox.p2.reconciler.dropins}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.repository.tools
${version.equinox.p2.repository.tools}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.repository
${version.equinox.p2.repository}
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.touchpoint.eclipse
${version.equinox.p2.touchpoint.eclipse}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.touchpoint.natives
${version.equinox.p2.touchpoint.natives}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.updatechecker
${version.equinox.p2.updatechecker}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.updatesite
${version.equinox.p2.updatesite}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.preferences
${version.equinox.preferences}
- org.wso2.eclipse.equinox
+ org.osgi
+ org.osgi.service.prefs
+ 1.1.2
+
+
+
+ org.bouncycastle
+ bcpg-jdk18on
+ 1.82
+
+
+
+ org.bouncycastle
+ bcutil-jdk18on
+ 1.82
+
+
+
+ org.bouncycastle
+ bcprov-jdk18on
+ ${bcprov-jdk18on.version}
+
+
+ org.eclipse.platform
org.eclipse.equinox.registry
${version.equinox.registry}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.security
${version.equinox.security}
- org.wso2.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.simpleconfigurator.manipulator
${version.equinox.simpleconfigurator.manipulator}
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.contenttype
${version.equinox.core.contenttype}
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.expressions
${version.equinox.core.expressions}
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.jobs
${version.equinox.core.jobs}
- org.eclipse.core
+ org.eclipse.platform
org.eclipse.core.runtime
${version.equinox.core.runtime}
@@ -894,14 +946,19 @@
${version.eclipse.ecj}
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.http.servlet
${version.equinox.http.servlet}
+
+
+
+
+
- org.eclipse.equinox
- org.eclipse.equinox.http.helper
- ${version.equinox.http.helper}
+ org.eclipse.platform
+ org.eclipse.equinox.http.service.api
+ 1.2.2
org.eclipse.platform
@@ -909,27 +966,23 @@
${version.equinox.jsp.jasper}
- org.eclipse.equinox
- javax.servlet.jsp
- ${version.equinox.javax.servlet.jsp}
-
-
- org.eclipse.equinox
- org.apache.jasper.glassfish
- ${version.equinox.jasper}
+ org.glassfish
+ jakarta.el
+ 3.0.4
+
org.eclipse.equinox
- javax.el
- ${version.javax.el}
+ javax.servlet.jsp
+ ${version.equinox.javax.servlet.jsp}
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.publisher
${version.equinox.p2.publisher}
- org.eclipse.equinox
+ org.eclipse.platform
org.eclipse.equinox.p2.publisher.eclipse
${version.equinox.p2.publisher.eclipse}
@@ -949,7 +1002,7 @@
${version.apache.felix.gogo.runtime}
- org.eclipse.osgi
+ org.eclipse.platform
org.eclipse.equinox.p2.transport.ecf
${version.equinox.p2.transport.ecf}
@@ -968,6 +1021,7 @@
javax.servlet
${version.equinox.javax.servlet}
+
org.wso2.eclipse.osgi
org.eclipse.osgi.compatibility.state
@@ -1021,7 +1075,7 @@
javax.annotation
javax.annotation-api
- ${verion.javax.annotation.annotation-api}
+ ${version.javax.annotation.annotation-api}
org.wso2.orbit.org.apache.geronimo.specs
@@ -1034,7 +1088,7 @@
${version.geronimo.stax.api.spec}
- org.apache.tiles.wso2
+ org.wso2.orbit.org.apache.tiles
tiles-jsp
${orbit.version.tiles}
@@ -1723,16 +1777,6 @@
org.wso2.carbon.automation.test.utils
${test.framework.version}
-
org.wso2.carbon
org.wso2.carbon.integration.test.common.integration.test.utils
@@ -1770,16 +1814,6 @@
mockito-core
${mockito.version}
-
- org.powermock
- powermock-api-mockito2
- ${powermock.version}
-
-
- org.powermock
- powermock-module-testng
- ${powermock.version}
-
javax.xml.bind
jaxb-api
@@ -1882,6 +1916,72 @@
org.osgi.service.component.annotations
${version.org.osgi.service.component.annotations}
+
+ org.osgi
+ org.osgi.service.component
+ 1.5.1
+
+
+ org.osgi
+ org.osgi.util.promise
+ 1.3.0
+
+
+ org.osgi
+ org.osgi.util.function
+ 1.2.0
+
+
+ org.osgi
+ org.osgi.service.cm
+ 1.6.1
+
+
+ org.osgi
+ org.osgi.service.upnp
+ 1.2.1
+
+
+ org.osgi
+ org.osgi.service.device
+ 1.1.1
+
+
+ org.osgi
+ org.osgi.service.event
+ 1.4.1
+
+
+ org.osgi
+ org.osgi.service.wireadmin
+ 1.0.2
+
+
+ org.osgi
+ org.osgi.service.provisioning
+ 1.2.0
+
+
+ org.osgi
+ org.osgi.service.useradmin
+ 1.1.1
+
+
+ org.osgi
+ org.osgi.service.metatype
+ 1.4.1
+
+
+ org.osgi
+ org.osgi.service.permissionadmin
+ 1.2.1
+
+
+ org.osgi
+ org.osgi.service.http.whiteboard
+ 1.1.1
+
+
org.osgi
org.osgi.annotation
@@ -1943,6 +2043,21 @@
stax-ex
${version.stax.ex}
+
+ org.wso2.orbit.org.apache.httpcomponents
+ httpcore5
+ ${orbit.version.httpcore5}
+
+
+ org.wso2.orbit.javax.activation
+ activation
+ 1.1.1.wso2v4
+
+
+ javax.xml.soap
+ javax.xml.soap-api
+ 1.4.0
+
diff --git a/samples/pom.xml b/samples/pom.xml
index 4e25283748d..a9552fd35ae 100644
--- a/samples/pom.xml
+++ b/samples/pom.xml
@@ -26,7 +26,7 @@
org.apache.maven.plugins
maven-javadoc-plugin
- 1.8
+ 17
diff --git a/samples/student-manager/components/org.wso2.carbon.student.mgt.ui/pom.xml b/samples/student-manager/components/org.wso2.carbon.student.mgt.ui/pom.xml
index b730bc8dce3..26a0cc57b8b 100644
--- a/samples/student-manager/components/org.wso2.carbon.student.mgt.ui/pom.xml
+++ b/samples/student-manager/components/org.wso2.carbon.student.mgt.ui/pom.xml
@@ -82,7 +82,6 @@
org.apache.felix
maven-bundle-plugin
- ${maven.bundle.plugin.version}
true
s
diff --git a/samples/student-manager/features/org.wso2.carbon.student.mgt.feature/pom.xml b/samples/student-manager/features/org.wso2.carbon.student.mgt.feature/pom.xml
index b39459e87e1..ddb493138fa 100644
--- a/samples/student-manager/features/org.wso2.carbon.student.mgt.feature/pom.xml
+++ b/samples/student-manager/features/org.wso2.carbon.student.mgt.feature/pom.xml
@@ -36,6 +36,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
${carbon.p2.plugin.version}
@@ -53,10 +54,8 @@
- org.wso2.carbon:org.wso2.carbon.student.mgt.server.feature
-
- org.wso2.carbon:org.wso2.carbon.student.mgt.ui.feature
-
+ org.wso2.carbon:org.wso2.carbon.student.mgt.server.feature:${student.manager.version}
+ org.wso2.carbon:org.wso2.carbon.student.mgt.ui.feature:${student.manager.version}
diff --git a/samples/student-manager/features/org.wso2.carbon.student.mgt.server.feature/pom.xml b/samples/student-manager/features/org.wso2.carbon.student.mgt.server.feature/pom.xml
index 48033e1d164..d351cdb48d5 100644
--- a/samples/student-manager/features/org.wso2.carbon.student.mgt.server.feature/pom.xml
+++ b/samples/student-manager/features/org.wso2.carbon.student.mgt.server.feature/pom.xml
@@ -27,6 +27,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
${carbon.p2.plugin.version}
@@ -45,7 +46,7 @@
- org.wso2.carbon:org.wso2.carbon.student.mgt
+ org.wso2.carbon:org.wso2.carbon.student.mgt:${student.manager.version}
diff --git a/samples/student-manager/features/org.wso2.carbon.student.mgt.ui.feature/pom.xml b/samples/student-manager/features/org.wso2.carbon.student.mgt.ui.feature/pom.xml
index b09db3738e8..187a54c4370 100644
--- a/samples/student-manager/features/org.wso2.carbon.student.mgt.ui.feature/pom.xml
+++ b/samples/student-manager/features/org.wso2.carbon.student.mgt.ui.feature/pom.xml
@@ -25,6 +25,7 @@
org.wso2.maven
carbon-p2-plugin
+ true
${carbon.p2.plugin.version}
@@ -43,7 +44,7 @@
- org.wso2.carbon:org.wso2.carbon.student.mgt.ui
+ org.wso2.carbon:org.wso2.carbon.student.mgt.ui:${student.manager.version}
diff --git a/samples/student-manager/features/pom.xml b/samples/student-manager/features/pom.xml
index b09f13620d3..8424cdf8941 100644
--- a/samples/student-manager/features/pom.xml
+++ b/samples/student-manager/features/pom.xml
@@ -18,8 +18,4 @@
org.wso2.carbon.student.mgt.ui.feature
org.wso2.carbon.student.mgt.feature
-
-
-
-
diff --git a/samples/student-manager/pom.xml b/samples/student-manager/pom.xml
index d6138882561..819a077d58b 100644
--- a/samples/student-manager/pom.xml
+++ b/samples/student-manager/pom.xml
@@ -16,7 +16,7 @@
4.9.34-SNAPSHOT
- 5.1.2
+ 5.4.15-SNAPSHOT
2.3.5
1.6.1-wso2v29
diff --git a/samples/student-manager/repository/pom.xml b/samples/student-manager/repository/pom.xml
index c30c24f5b7b..e32b74b38e5 100644
--- a/samples/student-manager/repository/pom.xml
+++ b/samples/student-manager/repository/pom.xml
@@ -20,6 +20,7 @@
org.wso2.maven
carbon-p2-plugin
${carbon.p2.plugin.version}
+ true
2-p2-repo-generation
diff --git a/tests/caching/pom.xml b/tests/caching/pom.xml
index 5300f882ccc..e15ae108a12 100644
--- a/tests/caching/pom.xml
+++ b/tests/caching/pom.xml
@@ -23,8 +23,8 @@
org.apache.maven.plugins
maven-compiler-plugin
- 8
- 8
+ 17
+ 17