[SM-3222] ServiceMix should not use non-free json.org
diff --git a/NOTICE b/NOTICE
index ebed9ab..a33720d 100644
--- a/NOTICE
+++ b/NOTICE
@@ -18,7 +18,3 @@
    which is dual licensed and available under the (unmodified) CDDL 1.1 (Common Development and Distribution License)

    or under the (unmodified) GPL v2 (GNU General Public License).

    An original copy of the license agreement can be found at: http://glassfish.java.net/public/CDDL+GPL_1_1.html

-

-   This product uses software from http://www.json.org.

-   Copyright (c) 2002 JSON.org

-   Licensed under the JSON License

diff --git a/logging/jms-appender/pom.xml b/logging/jms-appender/pom.xml
index d8ee63a..b12a929 100644
--- a/logging/jms-appender/pom.xml
+++ b/logging/jms-appender/pom.xml
@@ -45,9 +45,12 @@
             <artifactId>activemq-broker</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.json</groupId>
-            <artifactId>json</artifactId>
-            <version>20090211</version>
+            <groupId>org.apache.geronimo.specs</groupId>
+            <artifactId>geronimo-json_1.0_spec</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.johnzon</groupId>
+            <artifactId>johnzon-core</artifactId>
         </dependency>
 
         <dependency>
@@ -83,7 +86,8 @@
                             org.apache.servicemix.logging.jms
                         </Private-Package>
                         <Embed-Dependency>
-                            json
+                            johnzon-core,
+                            geronimo-json_1.0_spec
                         </Embed-Dependency>
                     </instructions>
                 </configuration>
diff --git a/logging/jms-appender/src/main/java/org/apache/servicemix/logging/jms/LogstashEventFormat.java b/logging/jms-appender/src/main/java/org/apache/servicemix/logging/jms/LogstashEventFormat.java
index b9af5be..c7acb2e 100644
--- a/logging/jms-appender/src/main/java/org/apache/servicemix/logging/jms/LogstashEventFormat.java
+++ b/logging/jms-appender/src/main/java/org/apache/servicemix/logging/jms/LogstashEventFormat.java
@@ -16,15 +16,16 @@
  */
 package org.apache.servicemix.logging.jms;
 
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-import org.ops4j.pax.logging.spi.PaxLoggingEvent;
-
 import java.text.DateFormat;
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import java.util.Map;
+import javax.json.Json;
+import javax.json.JsonArrayBuilder;
+import javax.json.JsonException;
+import javax.json.JsonObjectBuilder;
+
+import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
 /**
  * Creates a log message in Logstash' internal message format,
@@ -41,28 +42,28 @@
     protected static final String TIMESTAMP = "@timestamp";
 
     public String toString(PaxLoggingEvent event) {
-        JSONObject object = new JSONObject();
+        JsonObjectBuilder object = Json.createObjectBuilder();
         try {
-            object.put(MESSAGE, event.getMessage());
-            object.put(SOURCE, event.getLoggerName());
-            object.put(TIMESTAMP, TIMESTAMP_FORMAT.format(new Date(event.getTimeStamp())));
+            object.add(MESSAGE, event.getMessage());
+            object.add(SOURCE, event.getLoggerName());
+            object.add(TIMESTAMP, TIMESTAMP_FORMAT.format(new Date(event.getTimeStamp())));
 
-            JSONObject fields = new JSONObject();
+            JsonObjectBuilder fields = Json.createObjectBuilder();
             for (Object property : event.getProperties().entrySet()) {
                 Map.Entry<String, Object> entry = (Map.Entry<String, Object>) property;
-                fields.put(entry.getKey(), entry.getValue().toString());
+                fields.add(entry.getKey(), entry.getValue().toString());
             }
 
-            object.put(FIELDS, fields);
+            object.add(FIELDS, fields);
 
-            JSONArray tags = new JSONArray();
-            tags.put(event.getLevel().toString());
-            object.put(TAGS, tags);
-        } catch (JSONException e) {
+            JsonArrayBuilder tags = Json.createArrayBuilder();
+            tags.add(event.getLevel().toString());
+            object.add(TAGS, tags);
+        } catch (JsonException e) {
             // let's return a minimal, String-based message representation instead
             return "{ \"" + MESSAGE + "\" : " + event.getMessage() + "}";
         }
-        return object.toString();
+        return object.build().toString();
     }
 
 }
diff --git a/logging/jms-appender/src/test/java/org/apache/servicemix/logging/jms/LogstashEventFormatTest.java b/logging/jms-appender/src/test/java/org/apache/servicemix/logging/jms/LogstashEventFormatTest.java
index 0f2fd7b..15d65b6 100644
--- a/logging/jms-appender/src/test/java/org/apache/servicemix/logging/jms/LogstashEventFormatTest.java
+++ b/logging/jms-appender/src/test/java/org/apache/servicemix/logging/jms/LogstashEventFormatTest.java
@@ -16,8 +16,11 @@
  */
 package org.apache.servicemix.logging.jms;
 
-import org.json.JSONException;
-import org.json.JSONObject;
+import java.io.StringReader;
+import javax.json.Json;
+import javax.json.JsonException;
+import javax.json.JsonObject;
+
 import org.junit.Test;
 import org.ops4j.pax.logging.spi.PaxLoggingEvent;
 
@@ -32,15 +35,15 @@
     private final LoggingEventFormat format = new LogstashEventFormat();
 
     @Test
-    public void testBasicLogstashFormat() throws JSONException {
+    public void testBasicLogstashFormat() throws JsonException {
         PaxLoggingEvent event = MockEvents.createInfoEvent();
 
-        JSONObject object = new JSONObject(format.toString(event));
-        assertEquals(MockEvents.LOG_MESSAGE, object.get(LogstashEventFormat.MESSAGE));
-        assertEquals(MockEvents.LOGGER_NAME, object.get(LogstashEventFormat.SOURCE));
-        assertEquals("INFO", object.getJSONArray(LogstashEventFormat.TAGS).get(0));
+        JsonObject object = Json.createReader(new StringReader(format.toString(event))).readObject();
+        assertEquals(MockEvents.LOG_MESSAGE, object.getString(LogstashEventFormat.MESSAGE));
+        assertEquals(MockEvents.LOGGER_NAME, object.getString(LogstashEventFormat.SOURCE));
+        assertEquals("INFO", object.getJsonArray(LogstashEventFormat.TAGS).getString(0));
         assertEquals(MockEvents.LOG_PROPERTY_VALUE,
-                     object.getJSONObject(LogstashEventFormat.FIELDS).get(MockEvents.LOG_PROPERTY_ID));
+                     object.getJsonObject(LogstashEventFormat.FIELDS).getString(MockEvents.LOG_PROPERTY_ID));
         assertNotNull(object.get(LogstashEventFormat.TIMESTAMP));
 
         System.out.println(object);
diff --git a/parent/features-parent/pom.xml b/parent/features-parent/pom.xml
index cc35d36..4663867 100644
--- a/parent/features-parent/pom.xml
+++ b/parent/features-parent/pom.xml
@@ -67,6 +67,8 @@
         <jaxb.api.version>2.2</jaxb.api.version>
         <javassist.bundle.version>3.12.1.GA_3</javassist.bundle.version>
         <javax-inject.bundle.version>1_2</javax-inject.bundle.version>
+        <johnzon.version>0.9.4</johnzon.version>
+        <json-p.spec.version>1.0-alpha-1</json-p.spec.version>
         <json4s.bundle.version>3.2.11_1</json4s.bundle.version>
         <mvel2.version>2.2.1.Final</mvel2.version>
         <mybatis.version>3.3.0</mybatis.version>
@@ -381,6 +383,18 @@
                 <version>${commons-httpclient.bundle.version}</version>
             </dependency>
 
+            <!-- json -->
+            <dependency>
+                <groupId>org.apache.geronimo.specs</groupId>
+                <artifactId>geronimo-json_1.0_spec</artifactId>
+                <version>${json-p.spec.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.johnzon</groupId>
+                <artifactId>johnzon-core</artifactId>
+                <version>${johnzon.version}</version>
+            </dependency>
+
             <!-- Pax Url -->
             <!--<dependency>
                 <groupId>org.ops4j.pax.url</groupId>