Fix compile errors and warnings.

This commit is contained in:
Igor Kulikov 2021-02-09 14:30:06 +02:00
parent 43178107c3
commit 59a54211f9
15 changed files with 38 additions and 55 deletions

View File

@ -169,11 +169,11 @@ public class LwM2MModelsRepository {
* PageNumber = 1, PageSize = List<LwM2mObject>.size()
*/
public PageData<LwM2mObject> findLwm2mListObjects(PageLink pageLink) {
PageImpl page = new PageImpl(getLwm2mObjects(getObjectIdFromTextSearch(pageLink.getTextSearch()),
PageImpl<LwM2mObject> page = new PageImpl<>(getLwm2mObjects(getObjectIdFromTextSearch(pageLink.getTextSearch()),
pageLink.getTextSearch(),
pageLink.getSortOrder().getProperty(),
pageLink.getSortOrder().getDirection().name()));
PageData pageData = new PageData(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.hasNext());
PageData<LwM2mObject> pageData = new PageData<>(page.getContent(), page.getTotalPages(), page.getTotalElements(), page.hasNext());
return pageData;
}

View File

@ -15,7 +15,6 @@
*/
package org.thingsboard.server.common.data.lwm2m;
import lombok.Builder;
import lombok.Data;
@Data
@ -23,12 +22,8 @@ public class ServerSecurityConfig {
String host;
Integer port;
String serverPublicKey;
@Builder.Default
boolean bootstrapServerIs = true;
@Builder.Default
Integer clientHoldOffTime = 1;
@Builder.Default
Integer serverId = 111;
@Builder.Default
Integer bootstrapServerAccountTimeout = 0;
}

View File

@ -25,6 +25,7 @@ import org.eclipse.californium.core.network.Endpoint;
import org.eclipse.californium.core.network.Exchange;
import org.eclipse.californium.core.server.resources.CoapExchange;
import org.eclipse.californium.core.server.resources.Resource;
import org.eclipse.californium.elements.EndpointContext;
import org.thingsboard.server.common.data.DataConstants;
import org.thingsboard.server.common.data.DeviceTransportType;
import org.thingsboard.server.common.data.security.DeviceTokenCredentials;
@ -264,12 +265,15 @@ public class CoapTransportResource extends CoapResource {
}
private TransportProtos.SessionInfoProto lookupAsyncSessionInfo(Request request) {
String token = request.getSource().getHostAddress() + ":" + request.getSourcePort() + ":" + request.getTokenString();
EndpointContext sourceContext = request.getSourceContext();
String token = sourceContext.getPeerAddress().getAddress().getHostAddress() + ":" + sourceContext.getPeerAddress().getPort() + ":" + request.getTokenString();
return tokenToSessionIdMap.remove(token);
}
private String registerAsyncCoapSession(CoapExchange exchange, Request request, TransportProtos.SessionInfoProto sessionInfo, UUID sessionId) {
String token = request.getSource().getHostAddress() + ":" + request.getSourcePort() + ":" + request.getTokenString();
EndpointContext sourceContext = request.getSourceContext();
String token = sourceContext.getPeerAddress().getAddress().getHostAddress() + ":" + sourceContext.getPeerAddress().getPort() + ":" + request.getTokenString();
tokenToSessionIdMap.putIfAbsent(token, sessionInfo);
CoapSessionListener attrListener = new CoapSessionListener(sessionId, exchange);
transportService.registerAsyncSession(sessionInfo, attrListener);

View File

@ -107,7 +107,7 @@
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>

View File

@ -15,7 +15,6 @@
*/
package org.thingsboard.server.transport.lwm2m.bootstrap.secure;
import lombok.Builder;
import lombok.Data;
import org.eclipse.leshan.core.SecurityMode;
import org.eclipse.leshan.core.request.BindingMode;
@ -40,7 +39,6 @@ public class LwM2MBootstrapConfig {
* notifIfDisabled: boolean,
* binding: string
* */
@Builder.Default
LwM2MBootstrapServers servers;
/** -bootstrapServer, lwm2mServer

View File

@ -15,19 +15,13 @@
*/
package org.thingsboard.server.transport.lwm2m.bootstrap.secure;
import lombok.Builder;
import lombok.Data;
@Data
public class LwM2MBootstrapServers {
@Builder.Default
private Integer shortId = 123;
@Builder.Default
private Integer lifetime = 300;
@Builder.Default
private Integer defaultMinPeriod = 1;
@Builder.Default
private boolean notifIfDisabled = true;
@Builder.Default
private String binding = "U";
}

View File

@ -15,7 +15,6 @@
*/
package org.thingsboard.server.transport.lwm2m.bootstrap.secure;
import lombok.Builder;
import lombok.Data;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.leshan.core.SecurityMode;
@ -24,28 +23,18 @@ import org.eclipse.leshan.core.SecurityMode;
@Data
public class LwM2MServerBootstrap {
@Builder.Default
String clientPublicKeyOrId = "";
@Builder.Default
String clientSecretKey = "";
@Builder.Default
String serverPublicKey = "";
@Builder.Default
Integer clientHoldOffTime = 1;
@Builder.Default
Integer bootstrapServerAccountTimeout = 0;
@Builder.Default
String host = "0.0.0.0";
@Builder.Default
Integer port = 0;
@Builder.Default
String securityMode = SecurityMode.NO_SEC.name();
@Builder.Default
Integer serverId = 123;
@Builder.Default
boolean bootstrapServerIs = false;
public LwM2MServerBootstrap(){};

View File

@ -25,6 +25,7 @@ import org.eclipse.leshan.server.security.SecurityChecker;
import org.eclipse.leshan.server.security.SecurityInfo;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
@Slf4j
@ -49,10 +50,11 @@ public class LwM2mDefaultBootstrapSessionManager extends DefaultBootstrapSession
this.securityChecker = securityChecker;
}
@SuppressWarnings("deprecation")
public BootstrapSession begin(String endpoint, Identity clientIdentity) {
boolean authorized;
if (bsSecurityStore != null) {
List<SecurityInfo> securityInfos = (clientIdentity.getPskIdentity() != null && !clientIdentity.getPskIdentity().isEmpty()) ? Arrays.asList(bsSecurityStore.getByIdentity(clientIdentity.getPskIdentity())) : bsSecurityStore.getAllByEndpoint(endpoint);
List<SecurityInfo> securityInfos = (clientIdentity.getPskIdentity() != null && !clientIdentity.getPskIdentity().isEmpty()) ? Collections.singletonList(bsSecurityStore.getByIdentity(clientIdentity.getPskIdentity())) : bsSecurityStore.getAllByEndpoint(endpoint);
log.info("Bootstrap session started securityInfos: [{}]", securityInfos);
authorized = securityChecker.checkSecurityInfos(endpoint, clientIdentity, securityInfos);
} else {

View File

@ -16,7 +16,6 @@
package org.thingsboard.server.transport.lwm2m.secure;
import com.google.gson.JsonObject;
import lombok.Builder;
import lombok.Data;
import org.eclipse.leshan.server.bootstrap.BootstrapConfig;
import org.eclipse.leshan.server.security.SecurityInfo;
@ -29,7 +28,6 @@ import static org.thingsboard.server.transport.lwm2m.secure.LwM2MSecurityMode.DE
public class ReadResultSecurityStore {
private ValidateDeviceCredentialsResponseMsg msg;
private SecurityInfo securityInfo;
@Builder.Default
private int securityMode = DEFAULT_MODE.code;
/** bootstrap */

View File

@ -312,6 +312,7 @@ public class LwM2MTransportHandler {
return object;
}
@SuppressWarnings("unchecked")
public static <T> Optional<T> decode(byte[] byteArray) {
try {
FSTConfiguration config = FSTConfiguration.createDefaultConfiguration();

View File

@ -232,6 +232,7 @@ public class LwM2MTransportRequest {
* @param timeoutInMs -
*/
@SuppressWarnings("unchecked")
private void sendRequest(LeshanServer lwServer, Registration registration, DownlinkRequest request, long timeoutInMs) {
LwM2MClient lwM2MClient = this.service.lwM2mInMemorySecurityStore.getLwM2MClientWithReg(registration, null);
lwServer.send(registration, request, timeoutInMs, (ResponseCallback<?>) response -> {

View File

@ -15,11 +15,13 @@
*/
package org.thingsboard.server.transport.lwm2m.server;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken;
import lombok.extern.slf4j.Slf4j;
import org.eclipse.leshan.core.model.ResourceModel;
import org.eclipse.leshan.core.node.LwM2mObject;
@ -564,7 +566,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
* @return true if path isPresent in postAttributeProfile
*/
private boolean validatePathInAttrProfile(LwM2MClientProfile profile, String path) {
Set<String> attributesSet = new Gson().fromJson(profile.getPostAttributeProfile(), Set.class);
Set<String> attributesSet = new Gson().fromJson(profile.getPostAttributeProfile(), new TypeToken<>(){}.getType());
return attributesSet.stream().filter(p -> p.equals(path)).findFirst().isPresent();
}
@ -574,7 +576,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
* @return true if path isPresent in postAttributeProfile
*/
private boolean validatePathInTelemetryProfile(LwM2MClientProfile profile, String path) {
Set<String> telemetriesSet = new Gson().fromJson(profile.getPostTelemetryProfile(), Set.class);
Set<String> telemetriesSet = new Gson().fromJson(profile.getPostTelemetryProfile(), new TypeToken<>(){}.getType());
return telemetriesSet.stream().filter(p -> p.equals(path)).findFirst().isPresent();
}
@ -592,10 +594,10 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
Set<String> clientInstances = this.getAllInstancesInClient(registration);
Set<String> result;
if (GET_TYPE_OPER_READ.equals(typeOper)) {
result = new ObjectMapper().readValue(lwM2MClientProfile.getPostAttributeProfile().getAsJsonArray().toString().getBytes(), Set.class);
result.addAll(new ObjectMapper().readValue(lwM2MClientProfile.getPostTelemetryProfile().getAsJsonArray().toString().getBytes(), Set.class));
result = new ObjectMapper().readValue(lwM2MClientProfile.getPostAttributeProfile().getAsJsonArray().toString().getBytes(), new TypeReference<>() {});
result.addAll(new ObjectMapper().readValue(lwM2MClientProfile.getPostTelemetryProfile().getAsJsonArray().toString().getBytes(), new TypeReference<>() {}));
} else {
result = new ObjectMapper().readValue(lwM2MClientProfile.getPostObserveProfile().getAsJsonArray().toString().getBytes(), Set.class);
result = new ObjectMapper().readValue(lwM2MClientProfile.getPostObserveProfile().getAsJsonArray().toString().getBytes(), new TypeReference<>() {});
}
Set<String> pathSent = ConcurrentHashMap.newKeySet();
result.forEach(p -> {
@ -794,17 +796,17 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
// #1
JsonArray attributeOld = lwM2MClientProfileOld.getPostAttributeProfile();
Set attributeSetOld = new Gson().fromJson(attributeOld, Set.class);
Set<String> attributeSetOld = new Gson().fromJson(attributeOld, new TypeToken<>(){}.getType());
JsonArray telemetryOld = lwM2MClientProfileOld.getPostTelemetryProfile();
Set telemetrySetOld = new Gson().fromJson(telemetryOld, Set.class);
Set<String> telemetrySetOld = new Gson().fromJson(telemetryOld, new TypeToken<>(){}.getType());
JsonArray observeOld = lwM2MClientProfileOld.getPostObserveProfile();
JsonObject keyNameOld = lwM2MClientProfileOld.getPostKeyNameProfile();
LwM2MClientProfile lwM2MClientProfileNew = lwM2mInMemorySecurityStore.getProfiles().get(deviceProfile.getUuidId());
JsonArray attributeNew = lwM2MClientProfileNew.getPostAttributeProfile();
Set attributeSetNew = new Gson().fromJson(attributeNew, Set.class);
Set<String> attributeSetNew = new Gson().fromJson(attributeNew, new TypeToken<>(){}.getType());
JsonArray telemetryNew = lwM2MClientProfileNew.getPostTelemetryProfile();
Set telemetrySetNew = new Gson().fromJson(telemetryNew, Set.class);
Set<String> telemetrySetNew = new Gson().fromJson(telemetryNew, new TypeToken<>(){}.getType());
JsonArray observeNew = lwM2MClientProfileNew.getPostObserveProfile();
JsonObject keyNameNew = lwM2MClientProfileNew.getPostKeyNameProfile();
@ -812,20 +814,20 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
ResultsAnalyzerParameters sentAttrToThingsboard = new ResultsAnalyzerParameters();
// #3.1
if (!attributeOld.equals(attributeNew)) {
ResultsAnalyzerParameters postAttributeAnalyzer = this.getAnalyzerParameters(new Gson().fromJson(attributeOld, Set.class), attributeSetNew);
ResultsAnalyzerParameters postAttributeAnalyzer = this.getAnalyzerParameters(new Gson().fromJson(attributeOld, new TypeToken<Set<String>>(){}.getType()), attributeSetNew);
sentAttrToThingsboard.getPathPostParametersAdd().addAll(postAttributeAnalyzer.getPathPostParametersAdd());
sentAttrToThingsboard.getPathPostParametersDel().addAll(postAttributeAnalyzer.getPathPostParametersDel());
}
// #3.2
if (!attributeOld.equals(attributeNew)) {
ResultsAnalyzerParameters postTelemetryAnalyzer = this.getAnalyzerParameters(new Gson().fromJson(telemetryOld, Set.class), telemetrySetNew);
ResultsAnalyzerParameters postTelemetryAnalyzer = this.getAnalyzerParameters(new Gson().fromJson(telemetryOld, new TypeToken<Set<String>>(){}.getType()), telemetrySetNew);
sentAttrToThingsboard.getPathPostParametersAdd().addAll(postTelemetryAnalyzer.getPathPostParametersAdd());
sentAttrToThingsboard.getPathPostParametersDel().addAll(postTelemetryAnalyzer.getPathPostParametersDel());
}
// #3.3
if (!keyNameOld.equals(keyNameNew)) {
ResultsAnalyzerParameters keyNameChange = this.getAnalyzerKeyName(new Gson().fromJson(keyNameOld.toString(), ConcurrentHashMap.class),
new Gson().fromJson(keyNameNew.toString(), ConcurrentHashMap.class));
ResultsAnalyzerParameters keyNameChange = this.getAnalyzerKeyName(new Gson().fromJson(keyNameOld.toString(), new TypeToken<ConcurrentHashMap<String, String>>(){}.getType()),
new Gson().fromJson(keyNameNew.toString(), new TypeToken<ConcurrentHashMap<String, String>>(){}.getType()));
sentAttrToThingsboard.getPathPostParametersAdd().addAll(keyNameChange.getPathPostParametersAdd());
}
@ -849,8 +851,8 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
// #5.1
if (!observeOld.equals(observeNew)) {
Set observeSetOld = new Gson().fromJson(observeOld, Set.class);
Set observeSetNew = new Gson().fromJson(observeNew, Set.class);
Set<String> observeSetOld = new Gson().fromJson(observeOld, new TypeToken<>(){}.getType());
Set<String> observeSetNew = new Gson().fromJson(observeNew, new TypeToken<>(){}.getType());
//#5.2 add
// path Attr/Telemetry includes newObserve
attributeSetOld.addAll(telemetrySetOld);
@ -1120,7 +1122,7 @@ public class LwM2MTransportServiceImpl implements LwM2MTransportService {
private List<String> getNamesAttrFromProfileIsWritable(LwM2MClient lwM2MClient) {
LwM2MClientProfile profile = lwM2mInMemorySecurityStore.getProfile(lwM2MClient.getProfileUuid());
Set attrSet = new Gson().fromJson(profile.getPostAttributeProfile(), Set.class);
ConcurrentMap<String, String> keyNamesMap = new Gson().fromJson(profile.getPostKeyNameProfile().toString(), ConcurrentHashMap.class);
ConcurrentMap<String, String> keyNamesMap = new Gson().fromJson(profile.getPostKeyNameProfile().toString(), new TypeToken<ConcurrentHashMap<String, String>>(){}.getType());
ConcurrentMap<String, String> keyNamesIsWritable = keyNamesMap.entrySet()
.stream()

View File

@ -14,7 +14,7 @@
# limitations under the License.
#
FROM thingsboard/openjdk8
FROM thingsboard/openjdk11
COPY start-tb-lwm2m-transport.sh ${pkg.name}.deb /tmp/

View File

@ -98,7 +98,7 @@
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<artifactId>mockito-core</artifactId>
<scope>test</scope>
</dependency>
<dependency>

View File

@ -14,10 +14,9 @@
# limitations under the License.
#
export JAVA_OPTS="$JAVA_OPTS -Xloggc:@pkg.logFolder@/gc.log -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
export JAVA_OPTS="$JAVA_OPTS -XX:+PrintHeapAtGC -XX:+PrintTenuringDistribution -XX:+PrintGCApplicationStoppedTime -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10"
export JAVA_OPTS="$JAVA_OPTS -XX:GCLogFileSize=10M -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
export JAVA_OPTS="$JAVA_OPTS -XX:CMSWaitDuration=10000 -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+CMSParallelInitialMarkEnabled"
export JAVA_OPTS="$JAVA_OPTS -XX:+CMSEdenChunksRecordAlways -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly"
export JAVA_OPTS="$JAVA_OPTS -Xlog:gc*,heap*,age*,safepoint=debug:file=@pkg.logFolder@/gc.log:time,uptime,level,tags:filecount=10,filesize=10M"
export JAVA_OPTS="$JAVA_OPTS -XX:+IgnoreUnrecognizedVMOptions -XX:+HeapDumpOnOutOfMemoryError"
export JAVA_OPTS="$JAVA_OPTS -XX:-UseBiasedLocking -XX:+UseTLAB -XX:+ResizeTLAB -XX:+PerfDisableSharedMem -XX:+UseCondCardMark"
export JAVA_OPTS="$JAVA_OPTS -XX:+UseG1GC -XX:MaxGCPauseMillis=500 -XX:+UseStringDeduplication -XX:+ParallelRefProcEnabled -XX:MaxTenuringThreshold=10"
export LOG_FILENAME=${pkg.name}.out
export LOADER_PATH=${pkg.installFolder}/conf