Skip to content

Commit 5fdb22f

Browse files
committed
8308876: JFR: Deserialization of EventTypeInfo uses incorrect attribute names
Reviewed-by: mgronlun
1 parent bd113ee commit 5fdb22f

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

src/jdk.management.jfr/share/classes/jdk/management/jfr/EventTypeInfo.java

+16-8
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
* @since 9
4545
*/
4646
public final class EventTypeInfo {
47-
private final List<SettingDescriptorInfo> settings;
47+
private final List<SettingDescriptorInfo> settingDescriptors;
4848
private final long id;
4949
private final String name;
5050
private final String description;
@@ -53,7 +53,7 @@ public final class EventTypeInfo {
5353

5454
// package private
5555
EventTypeInfo(EventType eventType) {
56-
this.settings = creatingSettingDescriptorInfos(eventType);
56+
this.settingDescriptors = creatingSettingDescriptorInfos(eventType);
5757
this.id = eventType.getId();
5858
this.name = eventType.getName();
5959
this.label = eventType.getLabel();
@@ -62,12 +62,20 @@ public final class EventTypeInfo {
6262
}
6363

6464
private EventTypeInfo(CompositeData cd) {
65-
this.settings = createSettings(cd.get("settings"));
65+
if (cd.containsKey("settings")) {
66+
this.settingDescriptors = createSettingDescriptors(cd.get("settings"));
67+
} else {
68+
this.settingDescriptors = createSettingDescriptors(cd.get("settingDescriptors"));
69+
}
6670
this.id = (long) cd.get("id");
6771
this.name = (String) cd.get("name");
6872
this.label = (String) cd.get("label");
6973
this.description = (String) cd.get("description");
70-
this.categoryNames = createCategoryNames((Object[]) cd.get("category"));
74+
if (cd.containsKey("category")) {
75+
this.categoryNames = createCategoryNames((Object[]) cd.get("category"));
76+
} else {
77+
this.categoryNames = createCategoryNames((Object[]) cd.get("categoryNames"));
78+
}
7179
}
7280

7381
private static List<String> createCategoryNames(Object[] array) {
@@ -87,7 +95,7 @@ private static List<SettingDescriptorInfo> creatingSettingDescriptorInfos(EventT
8795
return Collections.unmodifiableList(settingDescriptorInfos);
8896
}
8997

90-
private static List<SettingDescriptorInfo> createSettings(Object settings) {
98+
private static List<SettingDescriptorInfo> createSettingDescriptors(Object settings) {
9199
if (settings instanceof Object[] settingsArray) {
92100
List<SettingDescriptorInfo> list = new ArrayList<>(settingsArray.length);
93101
for (Object element : settingsArray) {
@@ -174,7 +182,7 @@ public String getDescription() {
174182
* @see EventType#getSettingDescriptors()
175183
*/
176184
public List<SettingDescriptorInfo> getSettingDescriptors() {
177-
return settings;
185+
return settingDescriptors;
178186
}
179187

180188
/**
@@ -229,11 +237,11 @@ public String toString() {
229237
* <td>{@code String}</td>
230238
* </tr>
231239
* <tr>
232-
* <th scope="row">category</th>
240+
* <th scope="row">categoryNames</th>
233241
* <td><code>ArrayType(1, SimpleType.STRING)</code></td>
234242
* </tr>
235243
* <tr>
236-
* <th scope="row">settings</th>
244+
* <th scope="row">settingDescriptors</th>
237245
* <td>{@code javax.management.openmbean.CompositeData[]} whose element type
238246
* is the mapped type for {@link SettingDescriptorInfo} as specified in the
239247
* {@link SettingDescriptorInfo#from} method.</td>

test/jdk/jdk/jfr/jmx/info/TestEventTypeInfo.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,14 @@
4242
* @summary Test for EventTypeInfo
4343
* @requires vm.hasJFR
4444
* @library /test/lib /test/jdk
45-
* @run main/othervm jdk.jfr.jmx.info.TestEventTypeInfo
45+
* @run main/othervm -Djdk.attach.allowAttachSelf=true -Dcom.sun.management.jmxremote jdk.jfr.jmx.info.TestEventTypeInfo
4646
*/
4747
public class TestEventTypeInfo {
4848
public static void main(String[] args) throws Throwable {
4949
FlightRecorder jfr = FlightRecorder.getFlightRecorder();
5050

51-
FlightRecorderMXBean bean = JmxHelper.getFlighteRecorderMXBean();
51+
long selfPID = JmxHelper.getPID();
52+
FlightRecorderMXBean bean = JmxHelper.getFlighteRecorderMXBean(selfPID);
5253
List<EventTypeInfo> typeInfos = bean.getEventTypes();
5354

5455
Map<String, EventType> types = new HashMap<>();

0 commit comments

Comments
 (0)