From 1be00afab5288bf8259614fd1845c1be241485e4 Mon Sep 17 00:00:00 2001
From: "Endi S. Dewata" <edewata@redhat.com>
Date: Tue, 28 Jan 2014 21:42:43 -0500
Subject: [PATCH] Replaced Jettison with Jackson.

The Jettison library has been replaced with Jackson library as
JSON provider for RESTEasy. All class paths and the deployment
tools have been updated accordingly. The Python library and the
TPS UI have been updated as well to use the new JSON format.

Ticket #817
---
 .classpath                                         | 14 +++-
 base/common/python/pki/system.py                   |  9 ++-
 base/java-tools/pki                                | 14 ++++
 base/server/etc/default.cfg                        | 32 +++++----
 .../deployment/scriptlets/instance_layout.py       | 84 ++++++++++++++++++----
 base/server/scripts/operations                     | 30 ++++++--
 base/server/share/conf/pki.policy                  | 48 ++++++++++++-
 base/tps-tomcat/shared/webapps/tps/js/activity.js  | 36 +++++-----
 .../shared/webapps/tps/js/authenticator.js         | 16 ++---
 base/tps-tomcat/shared/webapps/tps/js/cert.js      | 44 ++++++------
 .../tps-tomcat/shared/webapps/tps/js/connection.js | 16 ++---
 base/tps-tomcat/shared/webapps/tps/js/group.js     | 21 +++---
 base/tps-tomcat/shared/webapps/tps/js/profile.js   | 16 ++---
 base/tps-tomcat/shared/webapps/tps/js/selftest.js  | 28 ++++----
 base/tps-tomcat/shared/webapps/tps/js/token.js     | 45 ++++++------
 base/tps-tomcat/shared/webapps/tps/js/user.js      | 50 ++++++-------
 scripts/compose_pki_test_package                   | 66 ++++++++++++++++-
 specs/pki-core.spec                                |  7 +-
 tests/dogtag/dev_java_tests/run_junit_tests.sh     | 47 +++++++++++-
 19 files changed, 435 insertions(+), 188 deletions(-)

diff --git a/.classpath b/.classpath
index a882e4b88b1339f7939eb1fdfd2f44253a6d2196..1e830791241f0a7272b001beda0246644b81e1af 100644
--- a/.classpath
+++ b/.classpath
@@ -32,13 +32,25 @@
 	<classpathentry kind="lib" path="/usr/share/java/jakarta-commons-httpclient.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/junit4.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/ldapjdk.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson-annotations.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson/jackson-core-asl.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson-core.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson-databind.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-base.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson/jackson-jaxrs.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson/jackson-mapper-asl.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson-module-jaxb-annotations.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson/jackson-mrbean.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson/jackson-smile.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/jackson/jackson-xc.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/jaxb-api.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/httpcomponents/httpclient.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/httpcomponents/httpcore.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/resteasy/jaxrs-api.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/resteasy/resteasy-jaxb-provider.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/resteasy/resteasy-jaxrs.jar"/>
-	<classpathentry kind="lib" path="/usr/share/java/resteasy/resteasy-jettison-provider.jar"/>
+	<classpathentry kind="lib" path="/usr/share/java/resteasy/resteasy-jackson-provider.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/scannotation.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/servlet.jar"/>
 	<classpathentry kind="lib" path="/usr/share/java/velocity.jar"/>
diff --git a/base/common/python/pki/system.py b/base/common/python/pki/system.py
index b530d5a1055bb68b6c1f3287d76e0f52dcedc173..5d93dbc293246a56a228d0e7c680c1dd5a511bab 100644
--- a/base/common/python/pki/system.py
+++ b/base/common/python/pki/system.py
@@ -42,7 +42,7 @@ class SecurityDomainClient:
         j = r.json()
 
         info = SecurityDomainInfo()
-        info.name = j['DomainInfo']['@id']
+        info.name = j['id']
 
         return info
 
@@ -83,8 +83,7 @@ class SystemConfigClient:
         headers = {'Content-type': 'application/json',
                    'Accept': 'application/json'}
         r = self.connection.post('/rest/installer/configure', data, headers)
-        info = r.json()['ConfigurationResponse']
-        return info
+        return r.json()
 
 class SystemStatusClient:
 
@@ -97,6 +96,6 @@ class SystemStatusClient:
         return r.text
 
 
-encoder.TYPES['ConfigurationRequest'] = ConfigurationRequest
-encoder.TYPES['ConfigurationResponse'] = ConfigurationResponse
+encoder.NOTYPES['ConfigurationRequest'] = ConfigurationRequest
+encoder.NOTYPES['ConfigurationResponse'] = ConfigurationResponse
 encoder.NOTYPES['SystemCertData'] = SystemCertData
diff --git a/base/java-tools/pki b/base/java-tools/pki
index 25f7c46e38b1a12667f6ab56041f5aa3abfa2b7b..87a00d708787ce872da2b621974b003595f1f215 100755
--- a/base/java-tools/pki
+++ b/base/java-tools/pki
@@ -87,11 +87,25 @@ $ENV{CLASSPATH} = "/usr/share/java/${PRODUCT}/pki-certsrv.jar:"
                 . "/usr/share/java/commons-io.jar:"
                 . "/usr/share/java/httpcomponents/httpclient.jar:"
                 . "/usr/share/java/httpcomponents/httpcore.jar:"
+                . "/usr/share/java/jackson-annotations.jar:"
+                . "/usr/share/java/jackson/jackson-core-asl.jar:"
+                . "/usr/share/java/jackson-core.jar:"
+                . "/usr/share/java/jackson-databind.jar:"
+                . "/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-base.jar:"
+                . "/usr/share/java/jackson/jackson-jaxrs.jar:"
+                . "/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar:"
+                . "/usr/share/java/jackson/jackson-mapper-asl.jar:"
+                . "/usr/share/java/jackson-module-jaxb-annotations.jar:"
+                . "/usr/share/java/jackson/jackson-mrbean.jar:"
+                . "/usr/share/java/jackson/jackson-smile.jar:"
+                . "/usr/share/java/jackson/jackson-xc.jar:"
                 . "/usr/share/java/jaxb-api.jar:"
                 . "${RESTEASY_LIB}/jaxrs-api.jar:"
                 . "${RESTEASY_LIB}/resteasy-atom-provider.jar:"
                 . "${RESTEASY_LIB}/resteasy-jaxb-provider.jar:"
                 . "${RESTEASY_LIB}/resteasy-jaxrs.jar:"
+                . "${RESTEASY_LIB}/resteasy-jaxrs-jandex.jar:"
+                . "${RESTEASY_LIB}/resteasy-jackson-provider.jar:"
                 . "/usr/share/java/servlet.jar:";
 
 if( $ARCHITECTURE eq "x86_64" ) {
diff --git a/base/server/etc/default.cfg b/base/server/etc/default.cfg
index 94d34b20163239195592aeae2b816cc408f2c4e2..e60cb3a140848d4bdaf8b2c7775bb26ee5ac1946 100644
--- a/base/server/etc/default.cfg
+++ b/base/server/etc/default.cfg
@@ -283,20 +283,14 @@ pki_commons_codec_jar=/usr/share/java/commons-codec.jar
 pki_httpclient_jar=/usr/share/java/httpcomponents/httpclient.jar
 pki_httpcore_jar=/usr/share/java/httpcomponents/httpcore.jar
 pki_javassist_jar=/usr/share/java/javassist.jar
-pki_jettison_jar=/usr/share/java/jettison.jar
 pki_ldapjdk_jar=/usr/share/java/ldapjdk.jar
 pki_certsrv_jar=/usr/share/java/pki/pki-certsrv.jar
 pki_cmsbundle=/usr/share/java/pki/pki-cmsbundle.jar
 pki_cmscore=/usr/share/java/pki/pki-cmscore.jar
 pki_cms=/usr/share/java/pki/pki-cms.jar
 pki_cmsutil=/usr/share/java/pki/pki-cmsutil.jar
-pki_resteasy_jaxrs_api_jar=%(resteasy_lib)s/jaxrs-api.jar
 pki_nsutil=/usr/share/java/pki/pki-nsutil.jar
 pki_tomcat_jar=/usr/share/java/pki/pki-tomcat.jar
-pki_resteasy_atom_provider_jar=%(resteasy_lib)s/resteasy-atom-provider.jar
-pki_resteasy_jaxb_provider_jar=%(resteasy_lib)s/resteasy-jaxb-provider.jar
-pki_resteasy_jaxrs_jar=%(resteasy_lib)s/resteasy-jaxrs.jar
-pki_resteasy_jettison_provider_jar=%(resteasy_lib)s/resteasy-jettison-provider.jar
 pki_scannotation_jar=/usr/share/java/scannotation.jar
 pki_tomcatjss_jar=/usr/share/java/tomcatjss.jar
 pki_velocity_jar=/usr/share/java/velocity.jar
@@ -313,14 +307,8 @@ pki_commons_codec_jar_link=%(pki_tomcat_common_lib_path)s/apache-commons-codec.j
 pki_httpclient_jar_link=%(pki_tomcat_common_lib_path)s/httpclient.jar
 pki_httpcore_jar_link=%(pki_tomcat_common_lib_path)s/httpcore.jar
 pki_javassist_jar_link=%(pki_tomcat_common_lib_path)s/javassist.jar
-pki_resteasy_jaxrs_api_jar_link=%(pki_tomcat_common_lib_path)s/jaxrs-api.jar
-pki_jettison_jar_link=%(pki_tomcat_common_lib_path)s/jettison.jar
 pki_ldapjdk_jar_link=%(pki_tomcat_common_lib_path)s/ldapjdk.jar
 pki_tomcat_jar_link=%(pki_tomcat_common_lib_path)s/pki-tomcat.jar
-pki_resteasy_atom_provider_jar_link=%(pki_tomcat_common_lib_path)s/resteasy-atom-provider.jar
-pki_resteasy_jaxb_provider_jar_link=%(pki_tomcat_common_lib_path)s/resteasy-jaxb-provider.jar
-pki_resteasy_jaxrs_jar_link=%(pki_tomcat_common_lib_path)s/resteasy-jaxrs.jar
-pki_resteasy_jettison_provider_jar_link=%(pki_tomcat_common_lib_path)s/resteasy-jettison-provider.jar
 pki_scannotation_jar_link=%(pki_tomcat_common_lib_path)s/scannotation.jar
 pki_tomcatjss_jar_link=%(pki_tomcat_common_lib_path)s/tomcatjss.jar
 pki_velocity_jar_link=%(pki_tomcat_common_lib_path)s/velocity.jar
@@ -338,6 +326,26 @@ pki_tks_jar_link=%(pki_tomcat_webapps_subsystem_webinf_lib_path)s/pki-tks.jar
 pki_tps_jar=/usr/share/java/pki/pki-tps.jar
 pki_tps_jar_link=%(pki_tomcat_webapps_subsystem_webinf_lib_path)s/pki-tps.jar
 
+# Jackson
+pki_jackson_annotations_jar=/usr/share/java/jackson-annotations.jar
+pki_jackson_core_asl_jar=/usr/share/java/jackson/jackson-core-asl.jar
+pki_jackson_core_jar=/usr/share/java/jackson-core.jar
+pki_jackson_databind_jar=/usr/share/java/jackson-databind.jar
+pki_jackson_jaxrs_base_jar=/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-base.jar
+pki_jackson_jaxrs_jar=/usr/share/java/jackson/jackson-jaxrs.jar
+pki_jackson_jaxrs_json_provider_jar=/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar
+pki_jackson_mapper_asl_jar=/usr/share/java/jackson/jackson-mapper-asl.jar
+pki_jackson_module_jaxb_annotations_jar=/usr/share/java/jackson-module-jaxb-annotations.jar
+pki_jackson_mrbean_jar=/usr/share/java/jackson/jackson-mrbean.jar
+pki_jackson_smile_jar=/usr/share/java/jackson/jackson-smile.jar
+pki_jackson_xc_jar=/usr/share/java/jackson/jackson-xc.jar
+
+# RESTEasy
+pki_resteasy_atom_provider_jar=%(resteasy_lib)s/resteasy-atom-provider.jar
+pki_resteasy_jaxb_provider_jar=%(resteasy_lib)s/resteasy-jaxb-provider.jar
+pki_resteasy_jaxrs_api_jar=%(resteasy_lib)s/jaxrs-api.jar
+pki_resteasy_jaxrs_jar=%(resteasy_lib)s/resteasy-jaxrs.jar
+pki_resteasy_jackson_provider_jar=%(resteasy_lib)s/resteasy-jackson-provider.jar
 
 
 ###############################################################################
diff --git a/base/server/python/pki/server/deployment/scriptlets/instance_layout.py b/base/server/python/pki/server/deployment/scriptlets/instance_layout.py
index 86968e22ee9cde74b733d12a3d23eff9a4c509cc..3dbf62363c9418a05d55623a043b4a5c04b81f30 100644
--- a/base/server/python/pki/server/deployment/scriptlets/instance_layout.py
+++ b/base/server/python/pki/server/deployment/scriptlets/instance_layout.py
@@ -124,24 +124,12 @@ class PkiScriptlet(pkiscriptlet.AbstractBasePkiScriptlet):
                 deployer.master_dict['pki_httpcore_jar_link'])
             deployer.symlink.create(deployer.master_dict['pki_javassist_jar'],
                 deployer.master_dict['pki_javassist_jar_link'])
-            deployer.symlink.create(deployer.master_dict['pki_resteasy_jaxrs_api_jar'],
-                deployer.master_dict['pki_resteasy_jaxrs_api_jar_link'])
-            deployer.symlink.create(deployer.master_dict['pki_jettison_jar'],
-                deployer.master_dict['pki_jettison_jar_link'])
             deployer.symlink.create(deployer.master_dict['pki_jss_jar'],
                 deployer.master_dict['pki_jss_jar_link'])
             deployer.symlink.create(deployer.master_dict['pki_ldapjdk_jar'],
                 deployer.master_dict['pki_ldapjdk_jar_link'])
             deployer.symlink.create(deployer.master_dict['pki_tomcat_jar'],
                 deployer.master_dict['pki_tomcat_jar_link'])
-            deployer.symlink.create(deployer.master_dict['pki_resteasy_atom_provider_jar'],
-                deployer.master_dict['pki_resteasy_atom_provider_jar_link'])
-            deployer.symlink.create(deployer.master_dict['pki_resteasy_jaxb_provider_jar'],
-                deployer.master_dict['pki_resteasy_jaxb_provider_jar_link'])
-            deployer.symlink.create(deployer.master_dict['pki_resteasy_jaxrs_jar'],
-                deployer.master_dict['pki_resteasy_jaxrs_jar_link'])
-            deployer.symlink.create(deployer.master_dict['pki_resteasy_jettison_provider_jar'],
-                deployer.master_dict['pki_resteasy_jettison_provider_jar_link'])
             deployer.symlink.create(deployer.master_dict['pki_scannotation_jar'],
                 deployer.master_dict['pki_scannotation_jar_link'])
             deployer.symlink.create(deployer.master_dict['pki_tomcatjss_jar'],
@@ -155,6 +143,78 @@ class PkiScriptlet(pkiscriptlet.AbstractBasePkiScriptlet):
             deployer.symlink.create(deployer.master_dict['pki_xml_commons_resolver_jar'],
                 deployer.master_dict['pki_xml_commons_resolver_jar_link'])
 
+            # Jackson
+            deployer.symlink.create(deployer.master_dict['pki_jackson_annotations_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-annotations.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_core_asl_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-core-asl.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_core_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-core.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_databind_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-databind.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_jaxrs_base_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-jaxrs-base.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_jaxrs_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-jaxrs.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_jaxrs_json_provider_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-jaxrs-json-provider.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_mapper_asl_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-mapper-asl.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_module_jaxb_annotations_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-module-jaxb-annotations.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_mrbean_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-mrbean.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_smile_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-smile.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_jackson_xc_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jackson-xc.jar'))
+
+            # RESTEasy
+            deployer.symlink.create(deployer.master_dict['pki_resteasy_atom_provider_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'resteasy-atom-provider.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_resteasy_jaxb_provider_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'resteasy-jaxb-provider.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_resteasy_jaxrs_api_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'jaxrs-api.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_resteasy_jaxrs_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'resteasy-jaxrs.jar'))
+            deployer.symlink.create(deployer.master_dict['pki_resteasy_jackson_provider_jar'],
+                os.path.join(
+                    deployer.master_dict['pki_tomcat_common_lib_path'],
+                    'resteasy-jackson-provider.jar'))
+
             # establish shared NSS security databases for this instance
             deployer.directory.create(deployer.master_dict['pki_database_path'])
             # establish instance convenience symbolic links
diff --git a/base/server/scripts/operations b/base/server/scripts/operations
index 92c2f9611af8de90fe48da8100fd617f46ad4887..21b4748a06da30704fc2eb83934501afee1254c3 100644
--- a/base/server/scripts/operations
+++ b/base/server/scripts/operations
@@ -1223,14 +1223,25 @@ verify_symlinks()
             [httpcore.jar]=${java_dir}/httpcomponents/httpcore.jar
             [javassist.jar]=${java_dir}/javassist.jar
             [jaxrs-api.jar]=${RESTEASY_LIB}/jaxrs-api.jar
-            [jettison.jar]=${java_dir}/jettison.jar
+            [jackson-annotations.jar]=${java_dir}/jackson-annotations.jar
+            [jackson-core-asl.jar]=${java_dir}/jackson/jackson-core-asl.jar
+            [jackson-core.jar]=${java_dir}/jackson-core.jar
+            [jackson-databind.jar]=${java_dir}/jackson-databind.jar
+            [jackson-jaxrs-base.jar]=${java_dir}/jackson-jaxrs-providers/jackson-jaxrs-base.jar
+            [jackson-jaxrs.jar]=${java_dir}/jackson/jackson-jaxrs.jar
+            [jackson-jaxrs-json-provider.jar]=${java_dir}/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar
+            [jackson-mapper-asl.jar]=${java_dir}/jackson/jackson-mapper-asl.jar
+            [jackson-module-jaxb-annotations.jar]=${java_dir}/jackson-module-jaxb-annotations.jar
+            [jackson-mrbean.jar]=${java_dir}/jackson/jackson-mrbean.jar
+            [jackson-smile.jar]=${java_dir}/jackson/jackson-smile.jar
+            [jackson-xc.jar]=${java_dir}/jackson/jackson-xc.jar
             [jss4.jar]=${jni_jar_dir}/jss4.jar
             [ldapjdk.jar]=${java_dir}/ldapjdk.jar
             [pki-tomcat.jar]=${java_dir}/pki/pki-tomcat.jar
             [resteasy-atom-provider.jar]=${RESTEASY_LIB}/resteasy-atom-provider.jar
             [resteasy-jaxb-provider.jar]=${RESTEASY_LIB}/resteasy-jaxb-provider.jar
             [resteasy-jaxrs.jar]=${RESTEASY_LIB}/resteasy-jaxrs.jar
-            [resteasy-jettison-provider.jar]=${RESTEASY_LIB}/resteasy-jettison-provider.jar
+            [resteasy-jackson-provider.jar]=${RESTEASY_LIB}/resteasy-jackson-provider.jar
             [scannotation.jar]=${java_dir}/scannotation.jar
             [tomcatjss.jar]=${java_dir}/tomcatjss.jar
             [velocity.jar]=${java_dir}/velocity.jar
@@ -1248,14 +1259,25 @@ verify_symlinks()
             [httpcore.jar]=${java_dir}/httpcore.jar
             [javassist.jar]=${java_dir}/javassist.jar
             [jaxrs-api.jar]=${RESTEASY_LIB}/jaxrs-api.jar
-            [jettison.jar]=${java_dir}/jettison.jar
+            [jackson-annotations.jar]=${java_dir}/jackson-annotations.jar
+            [jackson-core-asl.jar]=${java_dir}/jackson/jackson-core-asl.jar
+            [jackson-core.jar]=${java_dir}/jackson-core.jar
+            [jackson-databind.jar]=${java_dir}/jackson-databind.jar
+            [jackson-jaxrs-base.jar]=${java_dir}/jackson-jaxrs-providers/jackson-jaxrs-base.jar
+            [jackson-jaxrs.jar]=${java_dir}/jackson/jackson-jaxrs.jar
+            [jackson-jaxrs-json-provider.jar]=${java_dir}/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar
+            [jackson-mapper-asl.jar]=${java_dir}/jackson/jackson-mapper-asl.jar
+            [jackson-module-jaxb-annotations.jar]=${java_dir}/jackson-module-jaxb-annotations.jar
+            [jackson-mrbean.jar]=${java_dir}/jackson/jackson-mrbean.jar
+            [jackson-smile.jar]=${java_dir}/jackson/jackson-smile.jar
+            [jackson-xc.jar]=${java_dir}/jackson/jackson-xc.jar
             [jss4.jar]=${jni_jar_dir}/jss4.jar
             [ldapjdk.jar]=${java_dir}/ldapjdk.jar
             [pki-tomcat.jar]=${java_dir}/pki/pki-tomcat.jar
             [resteasy-atom-provider.jar]=${RESTEASY_LIB}/resteasy-atom-provider.jar
             [resteasy-jaxb-provider.jar]=${RESTEASY_LIB}/resteasy-jaxb-provider.jar
             [resteasy-jaxrs.jar]=${RESTEASY_LIB}/resteasy-jaxrs.jar
-            [resteasy-jettison-provider.jar]=${RESTEASY_LIB}/resteasy-jettison-provider.jar
+            [resteasy-jackson-provider.jar]=${RESTEASY_LIB}/resteasy-jackson-provider.jar
             [scannotation.jar]=${java_dir}/scannotation.jar
             [tomcatjss.jar]=${java_dir}/tomcatjss.jar
             [velocity.jar]=${java_dir}/velocity.jar
diff --git a/base/server/share/conf/pki.policy b/base/server/share/conf/pki.policy
index df9157e70fc6ccedc6f2e775110b33ba528b3615..5ce07b2cf69b667625b8b7ea259038aae3a39abc 100644
--- a/base/server/share/conf/pki.policy
+++ b/base/server/share/conf/pki.policy
@@ -98,7 +98,51 @@ grant codeBase "file:/usr/share/java/jboss-web.jar" {
         permission java.security.AllPermission;
 };
 
-grant codeBase "file:/usr/share/java/jettison.jar" {
+grant codeBase "file:/usr/share/java/jackson-annotations.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson/jackson-core-asl.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson-core.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson-databind.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-base.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson/jackson-jaxrs.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson/jackson-mapper-asl.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson-module-jaxb-annotations.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson/jackson-mrbean.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson/jackson-smile.jar" {
+        permission java.security.AllPermission;
+};
+
+grant codeBase "file:/usr/share/java/jackson/jackson-xc.jar" {
         permission java.security.AllPermission;
 };
 
@@ -126,7 +170,7 @@ grant codeBase "file:${RESTEASY_LIB}/resteasy-jaxrs.jar" {
         permission java.security.AllPermission;
 };
 
-grant codeBase "file:${RESTEASY_LIB}/resteasy-jettison-provider.jar" {
+grant codeBase "file:${RESTEASY_LIB}/resteasy-jackson-provider.jar" {
         permission java.security.AllPermission;
 };
 
diff --git a/base/tps-tomcat/shared/webapps/tps/js/activity.js b/base/tps-tomcat/shared/webapps/tps/js/activity.js
index f7e5b7362dfe1df3527e6e3dbb644723def95473..1044f6b3376b39a0db7ad33090fbd66e07a0ea52 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/activity.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/activity.js
@@ -23,26 +23,24 @@ var ActivityModel = Model.extend({
     urlRoot: "/tps/rest/activities",
     parseResponse: function(response) {
         return {
-            id: response.Activity["@id"],
-            tokenID: response.Activity.TokenID,
-            userID: response.Activity.UserID,
-            ip: response.Activity.IP,
-            operation: response.Activity.Operation,
-            result: response.Activity.Result,
-            date: response.Activity.Date
+            id: response.id,
+            tokenID: response.TokenID,
+            userID: response.UserID,
+            ip: response.IP,
+            operation: response.Operation,
+            result: response.Result,
+            date: response.Date
         };
     },
     createRequest: function(attributes) {
         return {
-            Activity: {
-                "@id": attributes.id,
-                TokenID: attributes.tokenID,
-                UserID: attributes.userID,
-                IP: attributes.ip,
-                Operation: attributes.operation,
-                Result: attributes.result,
-                Date: attributes.date
-            }
+            id: attributes.id,
+            TokenID: attributes.tokenID,
+            UserID: attributes.userID,
+            IP: attributes.ip,
+            Operation: attributes.operation,
+            Result: attributes.result,
+            Date: attributes.date
         };
     }
 });
@@ -50,14 +48,14 @@ var ActivityModel = Model.extend({
 var ActivityCollection = Collection.extend({
     urlRoot: "/tps/rest/activities",
     getEntries: function(response) {
-        return response.Activities.Activity;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Activities.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new ActivityModel({
-            id: entry["@id"],
+            id: entry.id,
             tokenID: entry.TokenID,
             userID: entry.UserID,
             ip: entry.IP,
diff --git a/base/tps-tomcat/shared/webapps/tps/js/authenticator.js b/base/tps-tomcat/shared/webapps/tps/js/authenticator.js
index 8e67a598314ace42e456104704fd2265690c6063..f449b9a1304235686f5ec6607ee39651ac4ff694 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/authenticator.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/authenticator.js
@@ -23,8 +23,8 @@ var AuthenticatorModel = Model.extend({
     urlRoot: "/tps/rest/authenticators",
     parseResponse: function(response) {
         return {
-            id: response.Authenticator["@id"],
-            status: response.Authenticator.Status
+            id: response.id,
+            status: response.Status
         };
     },
     parseXML: function(data) {
@@ -38,10 +38,8 @@ var AuthenticatorModel = Model.extend({
     },
     createRequest: function(attributes) {
         return {
-            Authenticator: {
-                "@id": attributes.id,
-                Status: attributes.status
-            }
+            id: attributes.id,
+            Status: attributes.status
         };
     },
     enable: function(options) {
@@ -71,14 +69,14 @@ var AuthenticatorModel = Model.extend({
 var AuthenticatorCollection = Collection.extend({
     urlRoot: "/tps/rest/authenticators",
     getEntries: function(response) {
-        return response.Authenticators.Authenticator;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Authenticators.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new AuthenticatorModel({
-            id: entry["@id"],
+            id: entry.id,
             status: entry.Status
         });
     }
diff --git a/base/tps-tomcat/shared/webapps/tps/js/cert.js b/base/tps-tomcat/shared/webapps/tps/js/cert.js
index b000172dfd6e9246e4b4c022f4840b7ab97bd024..3ccc6dd71ca7df2b58fbffd511477c7eb89abf35 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/cert.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/cert.js
@@ -23,30 +23,28 @@ var CertificateModel = Model.extend({
     urlRoot: "/tps/rest/certs",
     parseResponse: function(response) {
         return {
-            id: response.Certificate["@id"],
-            serialNumber: response.Certificate.SerialNumber,
-            subject: response.Certificate.Subject,
-            tokenID: response.Certificate.TokenID,
-            userID: response.Certificate.UserID,
-            keyType: response.Certificate.KeyType,
-            status: response.Certificate.Status,
-            createTime: response.Certificate.CreateTime,
-            modifyTime: response.Certificate.ModifyTime
+            id: response.id,
+            serialNumber: response.SerialNumber,
+            subject: response.Subject,
+            tokenID: response.TokenID,
+            userID: response.UserID,
+            keyType: response.KeyType,
+            status: response.Status,
+            createTime: response.CreateTime,
+            modifyTime: response.ModifyTime
         };
     },
     createRequest: function(attributes) {
         return {
-            Certificate: {
-                "@id": attributes.id,
-                SerialNumber: attributes.serialNumber,
-                Subject: attributes.subject,
-                TokenID: attributes.tokenID,
-                UserID: attributes.userID,
-                KeyType: attributes.keyType,
-                Status: attributes.status,
-                CreateTime: CreateTimeattributes.createTime,
-                ModifyTime: attributes.modifyTime
-            }
+            id: attributes.id,
+            SerialNumber: attributes.serialNumber,
+            Subject: attributes.subject,
+            TokenID: attributes.tokenID,
+            UserID: attributes.userID,
+            KeyType: attributes.keyType,
+            Status: attributes.status,
+            CreateTime: attributes.createTime,
+            ModifyTime: attributes.modifyTime
         };
     }
 });
@@ -54,14 +52,14 @@ var CertificateModel = Model.extend({
 var CertificateCollection = Collection.extend({
     urlRoot: "/tps/rest/certs",
     getEntries: function(response) {
-        return response.Certificates.Certificate;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Certificates.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new CertificateModel({
-            id: entry["@id"],
+            id: entry.id,
             serialNumber: entry.SerialNumber,
             subject: entry.Subject,
             tokenID: entry.TokenID,
diff --git a/base/tps-tomcat/shared/webapps/tps/js/connection.js b/base/tps-tomcat/shared/webapps/tps/js/connection.js
index 4ad7a98492d86b3b8de01200a97e84bbb867f1d3..89b812e634d75ac0ef1c5816ce3ca479286e8896 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/connection.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/connection.js
@@ -23,8 +23,8 @@ var ConnectionModel = Model.extend({
     urlRoot: "/tps/rest/connections",
     parseResponse: function(response) {
         return {
-            id: response.Connection["@id"],
-            status: response.Connection.Status
+            id: response.id,
+            status: response.Status
         };
     },
     parseXML: function(data) {
@@ -38,10 +38,8 @@ var ConnectionModel = Model.extend({
     },
     createRequest: function(attributes) {
         return {
-            Connection: {
-                "@id": attributes.id,
-                Status: attributes.status
-            }
+            id: attributes.id,
+            Status: attributes.status
         };
     },
     enable: function(options) {
@@ -71,14 +69,14 @@ var ConnectionModel = Model.extend({
 var ConnectionCollection = Collection.extend({
     urlRoot: "/tps/rest/connections",
     getEntries: function(response) {
-        return response.Connections.Connection;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Connections.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new ConnectionModel({
-            id: entry["@id"],
+            id: entry.id,
             status: entry.Status
         });
     }
diff --git a/base/tps-tomcat/shared/webapps/tps/js/group.js b/base/tps-tomcat/shared/webapps/tps/js/group.js
index 0396bf35464bd2ba3e813862656a579ce8112a4a..3e2409bf4ff3c0dcbc5d5cd675895f98f5588919 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/group.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/group.js
@@ -22,20 +22,17 @@
 var GroupModel = Model.extend({
     urlRoot: "/tps/rest/admin/groups",
     parseResponse: function(response) {
-        if (!response || !response.Group) return {};
         return {
-            id: response.Group["@id"],
-            groupID: response.Group.GroupID,
-            description: response.Group.Description
+            id: response.id,
+            groupID: response.GroupID,
+            description: response.Description
         };
     },
     createRequest: function(attributes) {
         return {
-           Group: {
-               "@id": this.id,
-                GroupID: attributes.groupID,
-                Description: attributes.description
-           }
+            id: this.id,
+            GroupID: attributes.groupID,
+            Description: attributes.description
         };
     }
 });
@@ -44,14 +41,14 @@ var GroupCollection = Collection.extend({
     model: GroupModel,
     urlRoot: "/tps/rest/admin/groups",
     getEntries: function(response) {
-        return response.Groups.Group;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Groups.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new GroupModel({
-            id: entry["@id"],
+            id: entry.id,
             groupID: entry.GroupID,
             description: entry.Description
         });
diff --git a/base/tps-tomcat/shared/webapps/tps/js/profile.js b/base/tps-tomcat/shared/webapps/tps/js/profile.js
index b847e12ecf29ecaa8338fb1efff53eabb32bbd3b..fea47ff04ab4f87f41cf5fb308367377d7332322 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/profile.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/profile.js
@@ -23,8 +23,8 @@ var ProfileModel = Model.extend({
     urlRoot: "/tps/rest/profiles",
     parseResponse: function(response) {
         return {
-            id: response.Profile["@id"],
-            status: response.Profile.Status
+            id: response.id,
+            status: response.Status
         };
     },
     parseXML: function(data) {
@@ -38,10 +38,8 @@ var ProfileModel = Model.extend({
     },
     createRequest: function(attributes) {
         return {
-            Profile: {
-                "@id": attributes.id,
-                Status: attributes.status
-            }
+            id: attributes.id,
+            Status: attributes.status
         };
     },
     enable: function(options) {
@@ -71,14 +69,14 @@ var ProfileModel = Model.extend({
 var ProfileCollection = Collection.extend({
     urlRoot: "/tps/rest/profiles",
     getEntries: function(response) {
-        return response.Profiles.Profile;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Profiles.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new ProfileModel({
-            id: entry["@id"],
+            id: entry.id,
             status: entry.Status
         });
     }
diff --git a/base/tps-tomcat/shared/webapps/tps/js/selftest.js b/base/tps-tomcat/shared/webapps/tps/js/selftest.js
index ec8fb41a985c072bff9d25b3f4991f19d538cc1a..1c87f1ca8138def5fd410742f91be715f044b1b2 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/selftest.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/selftest.js
@@ -23,22 +23,20 @@ var SelfTestModel = Model.extend({
     urlRoot: "/tps/rest/selftests",
     parseResponse: function(response) {
         return {
-            id: response.SelfTest["@id"],
-            enabledAtStartup: response.SelfTest.EnabledAtStartup,
-            criticalAtStartup: response.SelfTest.CriticalAtStartup,
-            enabledOnDemand: response.SelfTest.EnabledOnDemand,
-            criticalOnDemand: response.SelfTest.CriticalOnDemand,
+            id: response.id,
+            enabledAtStartup: response.EnabledAtStartup,
+            criticalAtStartup: response.CriticalAtStartup,
+            enabledOnDemand: response.EnabledOnDemand,
+            criticalOnDemand: response.CriticalOnDemand,
         };
     },
     createRequest: function(attributes) {
         return {
-            SelfTest: {
-                "@id": attributes.id,
-                EnabledAtStartup: attributes.enabledAtStartup,
-                CriticalAtStartup: attributes.criticalAtStartup,
-                EnabledOnDemand: attributes.enabledOnDemand,
-                CriticalOnDemand: attributes.criticalOnDemand
-            }
+            id: attributes.id,
+            EnabledAtStartup: attributes.enabledAtStartup,
+            CriticalAtStartup: attributes.criticalAtStartup,
+            EnabledOnDemand: attributes.enabledOnDemand,
+            CriticalOnDemand: attributes.criticalOnDemand
         };
     }
 });
@@ -46,14 +44,14 @@ var SelfTestModel = Model.extend({
 var SelfTestCollection = Collection.extend({
     urlRoot: "/tps/rest/selftests",
     getEntries: function(response) {
-        return response.SelfTests.SelfTest;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.SelfTests.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new SelfTestModel({
-            id: entry["@id"],
+            id: entry.id,
             enabledAtStartup: entry.EnabledAtStartup,
             criticalAtStartup: entry.CriticalAtStartup,
             enabledOnDemand: entry.EnabledOnDemand,
diff --git a/base/tps-tomcat/shared/webapps/tps/js/token.js b/base/tps-tomcat/shared/webapps/tps/js/token.js
index 4017b6859ceb3f2bc3cb4cf542181d3955be53a1..a4f711219e3a0b84933ee1b8dbfc3aae33436e38 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/token.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/token.js
@@ -22,32 +22,29 @@
 var TokenModel = Model.extend({
     urlRoot: "/tps/rest/tokens",
     parseResponse: function(response) {
-        if (!response || !response.Token) return {};
         return {
-            id: response.Token["@id"],
-            tokenID: response.Token.TokenID,
-            userID: response.Token.UserID,
-            status: response.Token.Status,
-            reason: response.Token.Reason,
-            appletID: response.Token.AppletID,
-            keyInfo: response.Token.KeyInfo,
-            createTimestamp: response.Token.CreateTimestamp,
-            modifyTimestamp: response.Token.ModifyTimestamp
+            id: response.id,
+            tokenID: response.TokenID,
+            userID: response.UserID,
+            status: response.Status,
+            reason: response.Reason,
+            appletID: response.AppletID,
+            keyInfo: response.KeyInfo,
+            createTimestamp: response.CreateTimestamp,
+            modifyTimestamp: response.ModifyTimestamp
         };
     },
     createRequest: function(attributes) {
         return {
-            Token: {
-                "@id": this.id,
-                TokenID: attributes.tokenID,
-                UserID: attributes.userID,
-                Status: attributes.status,
-                Reason: attributes.reason,
-                AppletID: attributes.appletID,
-                KeyInfo: attributes.keyInfo,
-                CreateTimestamp: attributes.createTimestamp,
-                ModifyTimestamp: attributes.modifyTimestamp
-            }
+            id: this.id,
+            TokenID: attributes.tokenID,
+            UserID: attributes.userID,
+            Status: attributes.status,
+            Reason: attributes.reason,
+            AppletID: attributes.appletID,
+            KeyInfo: attributes.keyInfo,
+            CreateTimestamp: attributes.createTimestamp,
+            ModifyTimestamp: attributes.modifyTimestamp
         };
     }
 });
@@ -56,14 +53,14 @@ var TokenCollection = Collection.extend({
     model: TokenModel,
     urlRoot: "/tps/rest/tokens",
     getEntries: function(response) {
-        return response.Tokens.Token;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Tokens.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new TokenModel({
-            id: entry["@id"],
+            id: entry.id,
             tokenID: entry.TokenID,
             userID: entry.UserID,
             status: entry.Status,
diff --git a/base/tps-tomcat/shared/webapps/tps/js/user.js b/base/tps-tomcat/shared/webapps/tps/js/user.js
index 670780c40ccbc2ee283f62b19420a5b7fbe22c25..c7d224e7aa9b1ab1e2ee72e2154fe0d31a1c2f9f 100644
--- a/base/tps-tomcat/shared/webapps/tps/js/user.js
+++ b/base/tps-tomcat/shared/webapps/tps/js/user.js
@@ -23,27 +23,25 @@ var UserModel = Model.extend({
     urlRoot: "/tps/rest/admin/users",
     parseResponse: function(response) {
 
-        if (!response || !response.User) return {};
-
         var attrs = {};
-        if (response.User.Attributes) {
-            var attributes = response.User.Attributes.Attribute;
+        if (response.Attributes) {
+            var attributes = response.Attributes.Attribute;
             attributes = attributes == undefined ? [] : [].concat(attributes);
 
             _(attributes).each(function(attribute) {
-                var name = attribute["@name"];
-                var value = attribute["$"];
+                var name = attribute.name;
+                var value = attribute.value;
                 attrs[name] = value;
             });
         }
 
         return {
-            id: response.User["@id"],
-            userID: response.User.UserID,
-            fullName: response.User.FullName,
-            email: response.User.Email,
-            state: response.User.State,
-            type: response.User.Type,
+            id: response.id,
+            userID: response.UserID,
+            fullName: response.FullName,
+            email: response.Email,
+            state: response.State,
+            type: response.Type,
             attributes: attrs
         };
     },
@@ -51,22 +49,20 @@ var UserModel = Model.extend({
         var attrs = [];
         _(attributes.attributes).each(function(value, name) {
             attrs.push({
-                Attribute: {
-                    "@name": name,
-                    "$": value
-                }
+                name: name,
+                value: value
             });
         });
 
         return {
-            User: {
-                "@id": this.id,
-                UserID: attributes.userID,
-                FullName: attributes.fullName,
-                Email: attributes.email,
-                State: attributes.state,
-                Type: attributes.type,
-                Attributes: attrs
+            id: this.id,
+            UserID: attributes.userID,
+            FullName: attributes.fullName,
+            Email: attributes.email,
+            State: attributes.state,
+            Type: attributes.type,
+            Attributes: {
+                Attribute: attrs
             }
         };
     }
@@ -76,14 +72,14 @@ var UserCollection = Collection.extend({
     model: UserModel,
     urlRoot: "/tps/rest/admin/users",
     getEntries: function(response) {
-        return response.Users.User;
+        return response.entries;
     },
     getLinks: function(response) {
-        return response.Users.Link;
+        return response.Link;
     },
     parseEntry: function(entry) {
         return new UserModel({
-            id: entry["@id"],
+            id: entry.id,
             userID: entry.UserID,
             fullName: entry.FullName
         });
diff --git a/scripts/compose_pki_test_package b/scripts/compose_pki_test_package
index 517a54040abcb634fbe210e4e07ece9a7aa2760c..fc534c8e7329cc806ece9cf747672df8256c850e 100755
--- a/scripts/compose_pki_test_package
+++ b/scripts/compose_pki_test_package
@@ -71,7 +71,71 @@ rm -rf bin
 
 mkdir bin
 
-CLASSPATH=$PKI_SOURCE_DIR/base/test/src:$PKI_SOURCE_DIR/tests/dogtag/dev_java_tests/src:$PKI_SOURCE_DIR/base/symkey/src:$PKI_SOURCE_DIR/base/util/src:$PKI_SOURCE_DIR/base/util/test:$PKI_SOURCE_DIR/base/common/src:$PKI_SOURCE_DIR/base/common/functional/src:$PKI_SOURCE_DIR/base/java-tools/src:$PKI_SOURCE_DIR/base/server/tomcat/src:$PKI_SOURCE_DIR/base/server/cms/src:$PKI_SOURCE_DIR/base/server/cmscore/src:$PKI_SOURCE_DIR/base/server/test:$PKI_SOURCE_DIR/base/silent/src:$PKI_SOURCE_DIR/base/ca/src:$PKI_SOURCE_DIR/base/ca/functional/src:$PKI_SOURCE_DIR/base/kra/src:$PKI_SOURCE_DIR/base/kra/functional/src:$PKI_SOURCE_DIR/base/ocsp/src:$PKI_SOURCE_DIR/base/tks/src:$PKI_SOURCE_DIR/base/tps-tomcat/src:$PKI_SOURCE_DIR/base/migrate/80:/usr/share/java/junit4.jar:`pwd`/src:/usr/lib64/jss/jss4.jar:/usr/share/java/httpcomponents/httpclient.jar:/usr/share/java/httpcomponents/httpcore.jar:/usr/share/java/resteasy/jaxrs-api.jar:/usr/share/java/resteasy/resteasy-atom-provider.jar:/usr/share/java/resteasy/resteasy-jaxb-provider.jar:/usr/share/java/resteasy/resteasy-jaxrs.jar:/usr/share/java/resteasy/resteasy-jaxrs-jandex.jar:/usr/share/java/resteasy/resteasy-jettison-provider.jar:/usr/share/java/apache-commons-cli.jar:/usr/share/java/apache-commons-codec.jar:/usr/share/java/apache-commons-logging.jar:/usr/share/java/commons-codec.jar:/usr/share/java/commons-httpclient.jar:/usr/share/java/idm-console-base-1.1.7.jar:/usr/share/java/idm-console-mcc.jar:/usr/share/java/idm-console-nmclf.jar:/usr/share/java/jakarta-commons-httpclient.jar:/usr/share/java/jaxb-api.jar:/usr/share/java/ldapjdk.jar:/usr/share/java/apache-commons-lang.jar:/usr/share/java/istack-commons-runtime.jar:/usr/share/java/scannotation.jar:/usr/share/java/servlet.jar:/usr/share/java/velocity.jar:/usr/share/java/xerces-j2.jar:/usr/share/java/xml-commons-apis.jar:/usr/share/java/tomcat/catalina.jar:/usr/share/java/tomcat/tomcat-util.jar:/usr/share/java/commons-io.jar
+CLASSPATH=$PKI_SOURCE_DIR/base/test/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/tests/dogtag/dev_java_tests/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/symkey/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/util/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/util/test
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/common/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/common/functional/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/java-tools/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/server/tomcat/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/server/cms/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/server/cmscore/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/server/test
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/silent/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/ca/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/ca/functional/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/kra/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/kra/functional/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/ocsp/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/tks/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/tps-tomcat/src
+CLASSPATH=$CLASSPATH:$PKI_SOURCE_DIR/base/migrate/80
+CLASSPATH=$CLASSPATH:/usr/share/java/junit4.jar
+CLASSPATH=$CLASSPATH:`pwd`/src
+CLASSPATH=$CLASSPATH:/usr/lib64/jss/jss4.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/httpcomponents/httpclient.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/httpcomponents/httpcore.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson-annotations.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-core-asl.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson-core.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson-databind.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-base.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-jaxrs.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-mapper-asl.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson-module-jaxb-annotations.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-mrbean.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-smile.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-xc.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/jaxrs-api.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-atom-provider.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jaxb-provider.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jaxrs.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jaxrs-jandex.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jackson-provider.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-cli.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-codec.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-logging.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/commons-codec.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/commons-httpclient.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/idm-console-base-1.1.7.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/idm-console-mcc.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/idm-console-nmclf.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jakarta-commons-httpclient.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/jaxb-api.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/ldapjdk.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-lang.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/istack-commons-runtime.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/scannotation.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/servlet.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/velocity.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/xerces-j2.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/xml-commons-apis.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/tomcat/catalina.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/tomcat/tomcat-util.jar
+CLASSPATH=$CLASSPATH:/usr/share/java/commons-io.jar
 
 javac -classpath $CLASSPATH -d bin src/*java
 
diff --git a/specs/pki-core.spec b/specs/pki-core.spec
index 13acc54788f1a9eacad570a2388acd29d8ae4cf6..b76cbfd5bd1d419eb0169d58048ae100b102a8d1 100644
--- a/specs/pki-core.spec
+++ b/specs/pki-core.spec
@@ -38,7 +38,7 @@ BuildRequires:    resteasy-base-atom-provider
 BuildRequires:    resteasy-base-jaxb-provider
 BuildRequires:    resteasy-base-jaxrs
 BuildRequires:    resteasy-base-jaxrs-api
-BuildRequires:    resteasy-base-jettison-provider
+BuildRequires:    resteasy-base-jackson-provider
 %else
 BuildRequires:    resteasy >= 3.0.1-3
 %endif
@@ -188,7 +188,7 @@ Requires:         apache-commons-lang
 Requires:         apache-commons-logging
 Requires:         java >= 1:1.7.0
 Requires:         javassist
-Requires:         jettison
+Requires:         jackson-jaxrs-json-provider
 Requires:         jpackage-utils >= 0:1.7.5-10
 Requires:         jss >= 4.2.6-28
 Requires:         ldapjdk
@@ -200,7 +200,7 @@ Requires:    resteasy-base-atom-provider
 Requires:    resteasy-base-jaxb-provider
 Requires:    resteasy-base-jaxrs
 Requires:    resteasy-base-jaxrs-api
-Requires:    resteasy-base-jettison-provider
+Requires:    resteasy-base-jackson-provider
 %else
 Requires:         resteasy >= 3.0.1-3
 %endif
@@ -995,6 +995,7 @@ fi
 * Fri Nov 22 2013 Dogtag Team <pki-devel@redhat.com> 10.2.0-0.1
 - Updated version number to 10.2.0-0.1.
 - Added option to build without server packages.
+- Replaced Jettison with Jackson.
 
 * Fri Nov 15 2013 Ade Lee <alee@redhat.com> 10.1.0-1
 - Trac Ticket 788 - Clean up spec files
diff --git a/tests/dogtag/dev_java_tests/run_junit_tests.sh b/tests/dogtag/dev_java_tests/run_junit_tests.sh
index b00dfb5063945041f8f54977eb5cd3a6a46d4b50..31d647ca24c956d25c1562a627901d35a9e3ac23 100644
--- a/tests/dogtag/dev_java_tests/run_junit_tests.sh
+++ b/tests/dogtag/dev_java_tests/run_junit_tests.sh
@@ -26,7 +26,52 @@ run_dev_junit_tests() {
     export nss_db_dir nss_db_password admin_cert_nickname host CA_CLIENT_PKCS12_PASSWORD RUNNING_WITH_BEAKER
 
     ### Add all the pki packages and other dependent pki packages to the class path
-    export CLASSPATH=/usr/share/java/junit4.jar:/usr/share/java/pki/*:/usr/lib64/jss/jss4.jar:/usr/share/java/httpcomponents/httpclient.jar:/usr/share/java/httpcomponents/httpcore.jar:/usr/share/java/resteasy/jaxrs-api.jar:/usr/share/java/resteasy/resteasy-atom-provider.jar:/usr/share/java/resteasy/resteasy-jaxb-provider.jar:/usr/share/java/resteasy/resteasy-jaxrs.jar:/usr/share/java/resteasy/resteasy-jaxrs-jandex.jar:/usr/share/java/resteasy/resteasy-jettison-provider.jar:/usr/share/java/apache-commons-cli.jar:/usr/share/java/apache-commons-codec.jar:/usr/share/java/apache-commons-logging.jar:/usr/share/java/commons-codec.jar:/usr/share/java/commons-httpclient.jar:/usr/share/java/idm-console-base-1.1.7.jar:/usr/share/java/idm-console-mcc.jar:/usr/share/java/idm-console-nmclf.jar:/usr/share/java/jakarta-commons-httpclient.jar:/usr/share/java/jaxb-api.jar:/usr/share/java/ldapjdk.jar:/usr/share/java/apache-commons-lang.jar:/usr/share/java/istack-commons-runtime.jar:/usr/share/java/scannotation.jar:/usr/share/java/servlet.jar:/usr/share/java/velocity.jar:/usr/share/java/xerces-j2.jar:/usr/share/java/xml-commons-apis.jar:/usr/share/java/tomcat/catalina.jar:/usr/share/java/tomcat/tomcat-util.jar:/usr/share/java/commons-io.jar:$BIN_PATH
+    CLASSPATH=/usr/share/java/junit4.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/pki/*
+    CLASSPATH=$CLASSPATH:/usr/lib64/jss/jss4.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/httpcomponents/httpclient.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/httpcomponents/httpcore.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson-annotations.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-core-asl.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson-core.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson-databind.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-base.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-jaxrs.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson-jaxrs-providers/jackson-jaxrs-json-provider.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-mapper-asl.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson-module-jaxb-annotations.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-mrbean.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-smile.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jackson/jackson-xc.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/jaxrs-api.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-atom-provider.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jaxb-provider.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jaxrs.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jaxrs-jandex.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/resteasy/resteasy-jackson-provider.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-cli.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-codec.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-logging.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/commons-codec.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/commons-httpclient.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/idm-console-base-1.1.7.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/idm-console-mcc.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/idm-console-nmclf.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jakarta-commons-httpclient.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/jaxb-api.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/ldapjdk.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/apache-commons-lang.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/istack-commons-runtime.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/scannotation.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/servlet.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/velocity.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/xerces-j2.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/xml-commons-apis.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/tomcat/catalina.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/tomcat/tomcat-util.jar
+    CLASSPATH=$CLASSPATH:/usr/share/java/commons-io.jar
+    CLASSPATH=$CLASSPATH:$BIN_PATH
+    export CLASSPATH
 
     cd $BIN_PATH
 
-- 
1.8.4.2

