Skip to content

Commit 146786a

Browse files
This closes #684
2 parents ec64e67 + ea1651b commit 146786a

File tree

16 files changed

+192
-60
lines changed

16 files changed

+192
-60
lines changed

artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/JsonUtil.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import org.apache.activemq.artemis.core.client.ActiveMQClientMessageBundle;
2020
import org.apache.activemq.artemis.utils.Base64;
21+
import org.apache.activemq.artemis.utils.JsonLoader;
2122
import org.apache.activemq.artemis.utils.StringEscapeUtils;
2223

2324
import javax.json.Json;
@@ -40,13 +41,13 @@
4041

4142
public final class JsonUtil {
4243
public static JsonArray toJSONArray(final Object[] array) throws Exception {
43-
JsonArrayBuilder jsonArray = Json.createArrayBuilder();
44+
JsonArrayBuilder jsonArray = JsonLoader.createArrayBuilder();
4445

4546
for (Object parameter : array) {
4647
if (parameter instanceof Map) {
4748
Map<String, Object> map = (Map<String, Object>) parameter;
4849

49-
JsonObjectBuilder jsonObject = Json.createObjectBuilder();
50+
JsonObjectBuilder jsonObject = JsonLoader.createObjectBuilder();
5051

5152
for (Map.Entry<String, Object> entry : map.entrySet()) {
5253
String key = entry.getKey();
@@ -73,12 +74,12 @@ public static JsonArray toJSONArray(final Object[] array) throws Exception {
7374
Object[] innerArray = (Object[]) parameter;
7475

7576
if (innerArray instanceof CompositeData[]) {
76-
JsonArrayBuilder innerJsonArray = Json.createArrayBuilder();
77+
JsonArrayBuilder innerJsonArray = JsonLoader.createArrayBuilder();
7778
for (Object data : innerArray) {
7879
String s = Base64.encodeObject((CompositeDataSupport) data);
7980
innerJsonArray.add(s);
8081
}
81-
JsonObjectBuilder jsonObject = Json.createObjectBuilder();
82+
JsonObjectBuilder jsonObject = JsonLoader.createObjectBuilder();
8283
jsonObject.add(CompositeData.class.getName(), innerJsonArray);
8384
jsonArray.add(jsonObject);
8485
}
@@ -237,7 +238,7 @@ else if (param instanceof Byte) {
237238
}
238239

239240
public static JsonArray toJsonArray(List<String> strings) {
240-
JsonArrayBuilder array = Json.createArrayBuilder();
241+
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
241242
if (strings != null) {
242243
for (String connector : strings) {
243244
array.add(connector);
@@ -247,7 +248,7 @@ public static JsonArray toJsonArray(List<String> strings) {
247248
}
248249

249250
public static JsonObject toJsonObject(Map<String, Object> map) {
250-
JsonObjectBuilder jsonObjectBuilder = Json.createObjectBuilder();
251+
JsonObjectBuilder jsonObjectBuilder = JsonLoader.createObjectBuilder();
251252
if (map != null) {
252253
for (Map.Entry<String, Object> entry : map.entrySet()) {
253254
addToObject(entry.getKey(), entry.getValue(), jsonObjectBuilder);

artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/TransportConfiguration.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
import org.apache.activemq.artemis.core.client.ActiveMQClientMessageBundle;
2424
import org.apache.activemq.artemis.core.remoting.impl.TransportConfigurationUtil;
2525
import org.apache.activemq.artemis.core.remoting.impl.netty.TransportConstants;
26+
import org.apache.activemq.artemis.utils.JsonLoader;
2627
import org.apache.activemq.artemis.utils.UUIDGenerator;
2728

28-
import javax.json.Json;
2929
import javax.json.JsonObject;
3030

3131
/**
@@ -65,7 +65,7 @@ public class TransportConfiguration implements Serializable {
6565
private static final byte TYPE_STRING = 3;
6666

6767
public JsonObject toJson() {
68-
return Json.createObjectBuilder()
68+
return JsonLoader.createObjectBuilder()
6969
.add("name", name)
7070
.add("factoryClassName", factoryClassName)
7171
.add("params", JsonUtil.toJsonObject(params))

artemis-core-client/src/main/java/org/apache/activemq/artemis/api/core/management/DayCounterInfo.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@
1717
package org.apache.activemq.artemis.api.core.management;
1818

1919
import org.apache.activemq.artemis.api.core.JsonUtil;
20+
import org.apache.activemq.artemis.utils.JsonLoader;
2021

21-
import javax.json.Json;
2222
import javax.json.JsonArray;
2323
import javax.json.JsonArrayBuilder;
2424
import javax.json.JsonObject;
@@ -37,14 +37,14 @@ public final class DayCounterInfo {
3737
// Static --------------------------------------------------------
3838

3939
public static String toJSON(final DayCounterInfo[] infos) {
40-
JsonObjectBuilder json = Json.createObjectBuilder();
41-
JsonArrayBuilder counters = Json.createArrayBuilder();
40+
JsonObjectBuilder json = JsonLoader.createObjectBuilder();
41+
JsonArrayBuilder counters = JsonLoader.createArrayBuilder();
4242
for (DayCounterInfo info : infos) {
43-
JsonArrayBuilder counter = Json.createArrayBuilder();
43+
JsonArrayBuilder counter = JsonLoader.createArrayBuilder();
4444
for (int c : info.getCounters()) {
4545
counter.add(c);
4646
}
47-
JsonObjectBuilder dci = Json.createObjectBuilder()
47+
JsonObjectBuilder dci = JsonLoader.createObjectBuilder()
4848
.add("date", info.getDate())
4949
.add("counters", counter);
5050
counters.add(dci);

artemis-core-client/src/main/java/org/apache/activemq/artemis/core/security/Role.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,11 @@
1616
*/
1717
package org.apache.activemq.artemis.core.security;
1818

19-
import javax.json.Json;
2019
import javax.json.JsonObject;
2120
import java.io.Serializable;
2221

22+
import org.apache.activemq.artemis.utils.JsonLoader;
23+
2324
/**
2425
* A role is used by the security store to define access rights and is configured on a connection factory or an address.
2526
*/
@@ -46,7 +47,7 @@ public class Role implements Serializable {
4647
private final boolean browse;
4748

4849
public JsonObject toJson() {
49-
return Json.createObjectBuilder()
50+
return JsonLoader.createObjectBuilder()
5051
.add("name", name)
5152
.add("send", send)
5253
.add("consume", consume)
Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
/**
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
18+
package org.apache.activemq.artemis.utils;
19+
20+
import javax.json.JsonArrayBuilder;
21+
import javax.json.JsonBuilderFactory;
22+
import javax.json.JsonObjectBuilder;
23+
import javax.json.JsonReader;
24+
import javax.json.JsonReaderFactory;
25+
import javax.json.JsonWriter;
26+
import javax.json.JsonWriterFactory;
27+
import javax.json.spi.JsonProvider;
28+
import javax.json.stream.JsonGenerator;
29+
import javax.json.stream.JsonGeneratorFactory;
30+
import javax.json.stream.JsonParser;
31+
import javax.json.stream.JsonParserFactory;
32+
import java.io.InputStream;
33+
import java.io.OutputStream;
34+
import java.io.Reader;
35+
import java.io.Writer;
36+
import java.security.AccessController;
37+
import java.security.PrivilegedAction;
38+
import java.util.Map;
39+
40+
/** This is to make sure we use the proper classLoader to load JSon libraries.
41+
* This is equivalent to using {@link javax.json.Json} */
42+
public class JsonLoader {
43+
44+
private static final JsonProvider provider;
45+
static {
46+
provider = loadProvider();
47+
}
48+
49+
50+
private static JsonProvider loadProvider() {
51+
return AccessController.doPrivileged(new PrivilegedAction<JsonProvider>() {
52+
@Override
53+
public JsonProvider run() {
54+
ClassLoader originalLoader = Thread.currentThread().getContextClassLoader();
55+
try {
56+
Thread.currentThread().setContextClassLoader(JsonLoader.class.getClassLoader());
57+
return JsonProvider.provider();
58+
}
59+
finally {
60+
Thread.currentThread().setContextClassLoader(originalLoader);
61+
}
62+
}
63+
});
64+
65+
}
66+
67+
68+
69+
public static JsonParser createParser(Reader reader) {
70+
return provider.createParser(reader);
71+
}
72+
73+
public static JsonParser createParser(InputStream in) {
74+
return provider.createParser(in);
75+
}
76+
77+
public static JsonGenerator createGenerator(Writer writer) {
78+
return provider.createGenerator(writer);
79+
}
80+
81+
public static JsonGenerator createGenerator(OutputStream out) {
82+
return provider.createGenerator(out);
83+
}
84+
85+
public static JsonParserFactory createParserFactory(Map<String, ?> config) {
86+
return provider.createParserFactory(config);
87+
}
88+
89+
public static JsonGeneratorFactory createGeneratorFactory(Map<String, ?> config) {
90+
return provider.createGeneratorFactory(config);
91+
}
92+
93+
public static JsonWriter createWriter(Writer writer) {
94+
return provider.createWriter(writer);
95+
}
96+
97+
public static JsonWriter createWriter(OutputStream out) {
98+
return provider.createWriter(out);
99+
}
100+
101+
public static JsonReader createReader(Reader reader) {
102+
return provider.createReader(reader);
103+
}
104+
105+
public static JsonReader createReader(InputStream in) {
106+
return provider.createReader(in);
107+
}
108+
109+
public static JsonReaderFactory createReaderFactory(Map<String, ?> config) {
110+
return provider.createReaderFactory(config);
111+
}
112+
113+
public static JsonWriterFactory createWriterFactory(Map<String, ?> config) {
114+
return provider.createWriterFactory(config);
115+
}
116+
117+
public static JsonArrayBuilder createArrayBuilder() {
118+
return provider.createArrayBuilder();
119+
}
120+
121+
public static JsonObjectBuilder createObjectBuilder() {
122+
return provider.createObjectBuilder();
123+
}
124+
125+
public static JsonBuilderFactory createBuilderFactory(Map<String, ?> config) {
126+
return provider.createBuilderFactory(config);
127+
}
128+
129+
130+
}

artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSQueueControlImpl.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.apache.activemq.artemis.jms.management.impl;
1818

1919
import javax.jms.InvalidSelectorException;
20-
import javax.json.Json;
2120
import javax.json.JsonArrayBuilder;
2221
import javax.management.MBeanInfo;
2322
import javax.management.StandardMBean;
@@ -48,6 +47,7 @@
4847
import org.apache.activemq.artemis.jms.management.impl.openmbean.JMSOpenTypeSupport;
4948
import org.apache.activemq.artemis.jms.server.JMSServerManager;
5049
import org.apache.activemq.artemis.utils.Base64;
50+
import org.apache.activemq.artemis.utils.JsonLoader;
5151
import org.apache.activemq.artemis.utils.SelectorTranslator;
5252
import org.apache.activemq.artemis.utils.UUIDGenerator;
5353

@@ -75,7 +75,7 @@ private static String createFilterForJMSMessageID(final String jmsMessageID) thr
7575
}
7676

7777
static String toJSON(final Map<String, Object>[] messages) {
78-
JsonArrayBuilder array = Json.createArrayBuilder();
78+
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
7979
for (Map<String, Object> message : messages) {
8080
array.add(JsonUtil.toJsonObject(message));
8181
}

artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSServerControlImpl.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
package org.apache.activemq.artemis.jms.management.impl;
1818

1919
import javax.jms.JMSRuntimeException;
20-
import javax.json.Json;
2120
import javax.json.JsonArray;
2221
import javax.json.JsonArrayBuilder;
2322
import javax.json.JsonObject;
@@ -65,6 +64,7 @@
6564
import org.apache.activemq.artemis.jms.server.config.impl.ConnectionFactoryConfigurationImpl;
6665
import org.apache.activemq.artemis.jms.server.management.JMSNotificationType;
6766
import org.apache.activemq.artemis.spi.core.protocol.RemotingConnection;
67+
import org.apache.activemq.artemis.utils.JsonLoader;
6868
import org.apache.activemq.artemis.utils.TypedProperties;
6969

7070
public class JMSServerControlImpl extends AbstractControl implements JMSServerControl, NotificationEmitter, org.apache.activemq.artemis.core.server.management.NotificationListener {
@@ -602,7 +602,7 @@ public String listConnectionsAsJSON() throws Exception {
602602
clearIO();
603603

604604
try {
605-
JsonArrayBuilder array = Json.createArrayBuilder();
605+
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
606606

607607
Set<RemotingConnection> connections = server.getActiveMQServer().getRemotingService().getConnections();
608608

@@ -620,7 +620,7 @@ public String listConnectionsAsJSON() throws Exception {
620620
for (RemotingConnection connection : connections) {
621621
ServerSession session = jmsSessions.get(connection.getID());
622622
if (session != null) {
623-
JsonObjectBuilder objectBuilder = Json.createObjectBuilder()
623+
JsonObjectBuilder objectBuilder = JsonLoader.createObjectBuilder()
624624
.add("connectionID", connection.getID().toString())
625625
.add("clientAddress", connection.getRemoteAddress())
626626
.add("creationTime", connection.getCreationTime());
@@ -650,7 +650,7 @@ public String listConsumersAsJSON(String connectionID) throws Exception {
650650
clearIO();
651651

652652
try {
653-
JsonArrayBuilder array = Json.createArrayBuilder();
653+
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
654654

655655
Set<RemotingConnection> connections = server.getActiveMQServer().getRemotingService().getConnections();
656656
for (RemotingConnection connection : connections) {
@@ -822,7 +822,7 @@ public String listNetworkTopology() throws Exception {
822822

823823
clearIO();
824824
try {
825-
JsonArrayBuilder brokers = Json.createArrayBuilder();
825+
JsonArrayBuilder brokers = JsonLoader.createArrayBuilder();
826826
ClusterManager clusterManager = server.getActiveMQServer().getClusterManager();
827827
if (clusterManager != null) {
828828
Set<ClusterConnection> clusterConnections = clusterManager.getClusterConnections();
@@ -831,7 +831,7 @@ public String listNetworkTopology() throws Exception {
831831
Collection<TopologyMemberImpl> members = topology.getMembers();
832832
for (TopologyMemberImpl member : members) {
833833

834-
JsonObjectBuilder obj = Json.createObjectBuilder();
834+
JsonObjectBuilder obj = JsonLoader.createObjectBuilder();
835835
TransportConfiguration live = member.getLive();
836836
if (live != null) {
837837
obj.add("nodeID", member.getNodeId())
@@ -862,7 +862,7 @@ private JsonObject toJSONObject(ServerConsumer consumer) {
862862
if (destinationInfo == null) {
863863
return null;
864864
}
865-
JsonObjectBuilder obj = Json.createObjectBuilder()
865+
JsonObjectBuilder obj = JsonLoader.createObjectBuilder()
866866
.add("consumerID", consumer.getID())
867867
.add("connectionID", consumer.getConnectionID().toString())
868868
.add("sessionID", consumer.getSessionID())
@@ -905,7 +905,7 @@ public void onNotification(org.apache.activemq.artemis.core.server.management.No
905905
}
906906

907907
private JsonArray toJsonArray(Collection<ServerSession> sessions) {
908-
JsonArrayBuilder array = Json.createArrayBuilder();
908+
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
909909

910910
for (ServerSession session : sessions) {
911911
Set<ServerConsumer> consumers = session.getServerConsumers();

artemis-jms-server/src/main/java/org/apache/activemq/artemis/jms/management/impl/JMSTopicControlImpl.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import java.util.List;
2222
import java.util.Map;
2323

24-
import javax.json.Json;
2524
import javax.json.JsonArrayBuilder;
2625
import javax.json.JsonObject;
2726
import javax.management.MBeanInfo;
@@ -39,6 +38,7 @@
3938
import org.apache.activemq.artemis.jms.client.ActiveMQDestination;
4039
import org.apache.activemq.artemis.jms.client.ActiveMQMessage;
4140
import org.apache.activemq.artemis.jms.server.JMSServerManager;
41+
import org.apache.activemq.artemis.utils.JsonLoader;
4242
import org.apache.activemq.artemis.utils.SelectorTranslator;
4343

4444
import static org.apache.activemq.artemis.api.core.JsonUtil.nullSafe;
@@ -292,7 +292,7 @@ private Object[] listSubscribersInfos(final DurabilityType durability) {
292292
private String listSubscribersInfosAsJSON(final DurabilityType durability) throws Exception {
293293
try {
294294
List<QueueControl> queues = getQueues(durability);
295-
JsonArrayBuilder array = Json.createArrayBuilder();
295+
JsonArrayBuilder array = JsonLoader.createArrayBuilder();
296296

297297
for (QueueControl queue : queues) {
298298
String clientID = null;
@@ -313,7 +313,7 @@ else if (queue.getName().startsWith(ResourceNames.JMS_TOPIC)) {
313313

314314
String filter = queue.getFilter() != null ? queue.getFilter() : null;
315315

316-
JsonObject info = Json.createObjectBuilder()
316+
JsonObject info = JsonLoader.createObjectBuilder()
317317
.add("queueName", queue.getName())
318318
.add("clientID", nullSafe(clientID))
319319
.add("selector", nullSafe(filter))

0 commit comments

Comments
 (0)