Skip to content

Commit 2233dbe

Browse files
committed
Fixed NPE when accessory was removed from registry
1 parent 7fbdf84 commit 2233dbe

File tree

2 files changed

+29
-27
lines changed

2 files changed

+29
-27
lines changed

src/main/java/com/beowulfe/hap/impl/HomekitRegistry.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,14 @@
11
package com.beowulfe.hap.impl;
22

3-
import java.util.ArrayList;
4-
import java.util.Collection;
5-
import java.util.Collections;
6-
import java.util.HashMap;
7-
import java.util.List;
8-
import java.util.Map;
9-
import java.util.concurrent.ConcurrentHashMap;
10-
11-
import org.slf4j.Logger;
12-
import org.slf4j.LoggerFactory;
13-
143
import com.beowulfe.hap.HomekitAccessory;
154
import com.beowulfe.hap.Service;
165
import com.beowulfe.hap.characteristics.Characteristic;
176
import com.beowulfe.hap.impl.services.AccessoryInformationService;
7+
import org.slf4j.Logger;
8+
import org.slf4j.LoggerFactory;
9+
10+
import java.util.*;
11+
import java.util.concurrent.ConcurrentHashMap;
1812

1913
public class HomekitRegistry {
2014

@@ -72,7 +66,11 @@ public List<Service> getServices(Integer aid) {
7266
}
7367

7468
public Map<Integer, Characteristic> getCharacteristics(Integer aid) {
75-
return Collections.unmodifiableMap(characteristics.get(accessories.get(aid)));
69+
Map<Integer, Characteristic> characteristics = this.characteristics.get(accessories.get(aid));
70+
if (characteristics == null) {
71+
return Collections.emptyMap();
72+
}
73+
return Collections.unmodifiableMap(characteristics);
7674
}
7775

7876
public void add(HomekitAccessory accessory) {

src/main/java/com/beowulfe/hap/impl/json/CharacteristicsController.java

Lines changed: 19 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,5 @@
11
package com.beowulfe.hap.impl.json;
22

3-
import java.io.ByteArrayInputStream;
4-
import java.io.ByteArrayOutputStream;
5-
6-
import javax.json.Json;
7-
import javax.json.JsonArray;
8-
import javax.json.JsonArrayBuilder;
9-
import javax.json.JsonObject;
10-
import javax.json.JsonObjectBuilder;
11-
import javax.json.JsonValue;
12-
13-
import org.slf4j.Logger;
14-
import org.slf4j.LoggerFactory;
15-
163
import com.beowulfe.hap.characteristics.Characteristic;
174
import com.beowulfe.hap.characteristics.EventableCharacteristic;
185
import com.beowulfe.hap.impl.HomekitRegistry;
@@ -21,6 +8,13 @@
218
import com.beowulfe.hap.impl.http.HttpRequest;
229
import com.beowulfe.hap.impl.http.HttpResponse;
2310
import com.beowulfe.hap.impl.responses.NotFoundResponse;
11+
import org.slf4j.Logger;
12+
import org.slf4j.LoggerFactory;
13+
14+
import javax.json.*;
15+
import java.io.ByteArrayInputStream;
16+
import java.io.ByteArrayOutputStream;
17+
import java.util.Map;
2418

2519
public class CharacteristicsController {
2620

@@ -49,9 +43,19 @@ public HttpResponse get(HttpRequest request) throws Exception {
4943
int aid = Integer.parseInt(parts[0]);
5044
int iid = Integer.parseInt(parts[1]);
5145
JsonObjectBuilder characteristic = Json.createObjectBuilder();
52-
registry.getCharacteristics(aid).get(iid).supplyValue(characteristic);
46+
Map<Integer, Characteristic> characteristicMap = registry.getCharacteristics(aid);
47+
if (!characteristicMap.isEmpty()) {
48+
Characteristic targetCharacteristic = characteristicMap.get(iid);
49+
if (targetCharacteristic != null) {
50+
targetCharacteristic.supplyValue(characteristic);
5351

54-
characteristics.add(characteristic.add("aid", aid).add("iid", iid).build());
52+
characteristics.add(characteristic.add("aid", aid).add("iid", iid).build());
53+
} else {
54+
logger.warn("Accessory " + aid + " does not have characteristic " + iid + "Request: " + uri);
55+
}
56+
} else {
57+
logger.warn("Accessory " + aid + " has no characteristics or does not exist. Request: " + uri);
58+
}
5559
}
5660
try(ByteArrayOutputStream baos = new ByteArrayOutputStream()) {
5761
Json.createWriter(baos).write(Json.createObjectBuilder().add("characteristics", characteristics.build()).build());

0 commit comments

Comments
 (0)