Skip to content

Commit c18df0c

Browse files
author
Dennis Labordus
authored
Merge pull request #143 from com-pas/update-websocket-impl
Updated use of CoMPAS Core projects for Rest/Websockets
2 parents 7abb069 + 27035f3 commit c18df0c

File tree

24 files changed

+173
-216
lines changed

24 files changed

+173
-216
lines changed

app/pom.xml

+5-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,11 @@ SPDX-License-Identifier: Apache-2.0
3838

3939
<dependency>
4040
<groupId>org.lfenergy.compas.core</groupId>
41-
<artifactId>jaxrs-commons</artifactId>
41+
<artifactId>rest-commons</artifactId>
42+
</dependency>
43+
<dependency>
44+
<groupId>org.lfenergy.compas.core</groupId>
45+
<artifactId>websocket-commons</artifactId>
4246
</dependency>
4347

4448
<dependency>

app/src/main/java/org/lfenergy/compas/scl/validator/rest/exception/NsdocNotFoundExceptionHandler.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.validator.rest.exception;
55

6-
import org.lfenergy.compas.core.jaxrs.model.ErrorResponse;
6+
import org.lfenergy.compas.core.commons.model.ErrorResponse;
77
import org.lfenergy.compas.scl.validator.exception.NsdocFileNotFoundException;
88

99
import javax.ws.rs.core.Response;

app/src/main/java/org/lfenergy/compas/scl/validator/rest/v1/SclValidatorServerEndpoint.java

+4-1
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
import io.quarkus.security.Authenticated;
77
import io.vertx.mutiny.core.eventbus.EventBus;
8+
import org.lfenergy.compas.core.websocket.ErrorResponseEncoder;
89
import org.lfenergy.compas.scl.extensions.model.SclFileType;
910
import org.lfenergy.compas.scl.validator.rest.v1.event.SclValidatorEventRequest;
1011
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateRequest;
@@ -21,13 +22,14 @@
2122
import javax.websocket.server.PathParam;
2223
import javax.websocket.server.ServerEndpoint;
2324

25+
import static org.lfenergy.compas.core.websocket.WebsocketSupport.handleException;
2426
import static org.lfenergy.compas.scl.validator.rest.SclResourceConstants.TYPE_PATH_PARAM;
2527

2628
@Authenticated
2729
@ApplicationScoped
2830
@ServerEndpoint(value = "/validate-ws/v1/{" + TYPE_PATH_PARAM + "}",
2931
decoders = {SclValidateRequestDecoder.class, SclValidateResponseDecoder.class},
30-
encoders = {SclValidateRequestEncoder.class, SclValidateResponseEncoder.class})
32+
encoders = {SclValidateRequestEncoder.class, SclValidateResponseEncoder.class, ErrorResponseEncoder.class})
3133
public class SclValidatorServerEndpoint {
3234
private static final Logger LOGGER = LoggerFactory.getLogger(SclValidatorServerEndpoint.class);
3335

@@ -53,6 +55,7 @@ public void onMessage(Session session, SclValidateRequest request, @PathParam(TY
5355
@OnError
5456
public void onError(Session session, @PathParam(TYPE_PATH_PARAM) String type, Throwable throwable) {
5557
LOGGER.warn("Error with session {} for type {}.", session.getId(), type, throwable);
58+
handleException(session, throwable);
5659
}
5760

5861
@OnClose

app/src/main/java/org/lfenergy/compas/scl/validator/rest/v1/event/SclValidatorEventHandler.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
package org.lfenergy.compas.scl.validator.rest.v1.event;
55

66
import io.quarkus.vertx.ConsumeEvent;
7+
import org.lfenergy.compas.core.websocket.WebsocketHandler;
78
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateResponse;
89
import org.lfenergy.compas.scl.validator.service.SclValidatorService;
910

@@ -24,10 +25,10 @@ public SclValidatorEventHandler(SclValidatorService sclValidatorService) {
2425

2526
@ConsumeEvent(value = "validate-ws", blocking = true)
2627
public void validateWebsocketsEvent(SclValidatorEventRequest request) {
27-
var response = new SclValidateResponse();
28-
response.setValidationErrorList(sclValidatorService.validate(request.getType(), request.getSclData()));
29-
30-
var session = request.getSession();
31-
session.getAsyncRemote().sendObject(response);
28+
new WebsocketHandler<SclValidateResponse>().execute(request.getSession(), () -> {
29+
var response = new SclValidateResponse();
30+
response.setValidationErrorList(sclValidatorService.validate(request.getType(), request.getSclData()));
31+
return response;
32+
});
3233
}
3334
}

app/src/main/java/org/lfenergy/compas/scl/validator/rest/v1/websocket/SclValidateRequestDecoder.java

+4-29
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,18 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.validator.rest.v1.websocket;
55

6-
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
6+
import org.lfenergy.compas.core.websocket.AbstractDecoder;
7+
import org.lfenergy.compas.core.websocket.WebsocketSupport;
78
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateRequest;
89

9-
import javax.websocket.Decoder;
10-
import javax.websocket.EndpointConfig;
11-
import javax.xml.bind.JAXBContext;
12-
import java.io.StringReader;
13-
14-
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.WEBSOCKET_DECODER_ERROR_CODE;
15-
16-
public class SclValidateRequestDecoder implements Decoder.Text<SclValidateRequest> {
17-
@Override
18-
public void init(EndpointConfig endpointConfig) {
19-
// do nothing.
20-
}
21-
10+
public class SclValidateRequestDecoder extends AbstractDecoder<SclValidateRequest> {
2211
@Override
2312
public boolean willDecode(String message) {
2413
return (message != null);
2514
}
2615

2716
@Override
2817
public SclValidateRequest decode(String message) {
29-
try {
30-
var jaxbContext = JAXBContext.newInstance(SclValidateRequest.class);
31-
var unmarshaller = jaxbContext.createUnmarshaller();
32-
var reader = new StringReader(message);
33-
return (SclValidateRequest) unmarshaller.unmarshal(reader);
34-
} catch (Exception exp) {
35-
throw new SclValidatorException(WEBSOCKET_DECODER_ERROR_CODE,
36-
"Error unmarshalling SCL Validate Request from Websockets.",
37-
exp);
38-
}
39-
}
40-
41-
@Override
42-
public void destroy() {
43-
// do nothing.
18+
return WebsocketSupport.decode(message, SclValidateRequest.class);
4419
}
4520
}

app/src/main/java/org/lfenergy/compas/scl/validator/rest/v1/websocket/SclValidateRequestEncoder.java

+5-32
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,13 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.validator.rest.v1.websocket;
55

6-
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
6+
import org.lfenergy.compas.core.websocket.AbstractEncoder;
7+
import org.lfenergy.compas.core.websocket.WebsocketSupport;
78
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateRequest;
89

9-
import javax.websocket.Encoder;
10-
import javax.websocket.EndpointConfig;
11-
import javax.xml.bind.JAXBContext;
12-
import java.io.StringWriter;
13-
14-
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.WEBSOCKET_ENCODER_ERROR_CODE;
15-
16-
public class SclValidateRequestEncoder implements Encoder.Text<SclValidateRequest> {
17-
@Override
18-
public void init(EndpointConfig endpointConfig) {
19-
// do nothing.
20-
}
21-
22-
@Override
23-
public String encode(SclValidateRequest request) {
24-
try {
25-
var jaxbContext = JAXBContext.newInstance(SclValidateRequest.class);
26-
var marshaller = jaxbContext.createMarshaller();
27-
28-
var st = new StringWriter();
29-
marshaller.marshal(request, st);
30-
return st.toString();
31-
} catch (Exception exp) {
32-
throw new SclValidatorException(WEBSOCKET_ENCODER_ERROR_CODE,
33-
"Error marshalling SCL Validate Request from Websockets.",
34-
exp);
35-
}
36-
}
37-
10+
public class SclValidateRequestEncoder extends AbstractEncoder<SclValidateRequest> {
3811
@Override
39-
public void destroy() {
40-
// do nothing.
12+
public String encode(SclValidateRequest jaxbObject) {
13+
return WebsocketSupport.encode(jaxbObject, SclValidateRequest.class);
4114
}
4215
}

app/src/main/java/org/lfenergy/compas/scl/validator/rest/v1/websocket/SclValidateResponseDecoder.java

+4-29
Original file line numberDiff line numberDiff line change
@@ -3,43 +3,18 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.validator.rest.v1.websocket;
55

6-
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
6+
import org.lfenergy.compas.core.websocket.AbstractDecoder;
7+
import org.lfenergy.compas.core.websocket.WebsocketSupport;
78
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateResponse;
89

9-
import javax.websocket.Decoder;
10-
import javax.websocket.EndpointConfig;
11-
import javax.xml.bind.JAXBContext;
12-
import java.io.StringReader;
13-
14-
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.WEBSOCKET_DECODER_ERROR_CODE;
15-
16-
public class SclValidateResponseDecoder implements Decoder.Text<SclValidateResponse> {
17-
@Override
18-
public void init(EndpointConfig endpointConfig) {
19-
// do nothing.
20-
}
21-
10+
public class SclValidateResponseDecoder extends AbstractDecoder<SclValidateResponse> {
2211
@Override
2312
public boolean willDecode(String message) {
2413
return (message != null);
2514
}
2615

2716
@Override
2817
public SclValidateResponse decode(String message) {
29-
try {
30-
var jaxbContext = JAXBContext.newInstance(SclValidateResponse.class);
31-
var unmarshaller = jaxbContext.createUnmarshaller();
32-
var reader = new StringReader(message);
33-
return (SclValidateResponse) unmarshaller.unmarshal(reader);
34-
} catch (Exception exp) {
35-
throw new SclValidatorException(WEBSOCKET_DECODER_ERROR_CODE,
36-
"Error unmarshalling SCL Validate Response from Websockets.",
37-
exp);
38-
}
39-
}
40-
41-
@Override
42-
public void destroy() {
43-
// do nothing.
18+
return WebsocketSupport.decode(message, SclValidateResponse.class);
4419
}
4520
}

app/src/main/java/org/lfenergy/compas/scl/validator/rest/v1/websocket/SclValidateResponseEncoder.java

+5-32
Original file line numberDiff line numberDiff line change
@@ -3,40 +3,13 @@
33
// SPDX-License-Identifier: Apache-2.0
44
package org.lfenergy.compas.scl.validator.rest.v1.websocket;
55

6-
import org.lfenergy.compas.scl.validator.exception.SclValidatorException;
6+
import org.lfenergy.compas.core.websocket.AbstractEncoder;
7+
import org.lfenergy.compas.core.websocket.WebsocketSupport;
78
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateResponse;
89

9-
import javax.websocket.Encoder;
10-
import javax.websocket.EndpointConfig;
11-
import javax.xml.bind.JAXBContext;
12-
import java.io.StringWriter;
13-
14-
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.WEBSOCKET_ENCODER_ERROR_CODE;
15-
16-
public class SclValidateResponseEncoder implements Encoder.Text<SclValidateResponse> {
17-
@Override
18-
public void init(EndpointConfig endpointConfig) {
19-
// do nothing.
20-
}
21-
22-
@Override
23-
public String encode(SclValidateResponse response) {
24-
try {
25-
var jaxbContext = JAXBContext.newInstance(SclValidateResponse.class);
26-
var marshaller = jaxbContext.createMarshaller();
27-
28-
var st = new StringWriter();
29-
marshaller.marshal(response, st);
30-
return st.toString();
31-
} catch (Exception exp) {
32-
throw new SclValidatorException(WEBSOCKET_ENCODER_ERROR_CODE,
33-
"Error marshalling SCL Validate Response from Websockets.",
34-
exp);
35-
}
36-
}
37-
10+
public class SclValidateResponseEncoder extends AbstractEncoder<SclValidateResponse> {
3811
@Override
39-
public void destroy() {
40-
// do nothing.
12+
public String encode(SclValidateResponse jaxbObject) {
13+
return WebsocketSupport.encode(jaxbObject, SclValidateResponse.class);
4114
}
4215
}

app/src/test/java/org/lfenergy/compas/scl/validator/rest/CompasSclValidatorConfigurationTest.java

+5-4
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@
1212
import java.nio.file.Path;
1313

1414
import static org.junit.jupiter.api.Assertions.assertNotNull;
15-
import static org.mockito.Mockito.*;
15+
import static org.mockito.Mockito.verify;
16+
import static org.mockito.Mockito.when;
1617

1718
@ExtendWith(MockitoExtension.class)
1819
class CompasSclValidatorConfigurationTest {
@@ -32,7 +33,7 @@ void createOclFileCollector_WhenCalled_ThenObjectReturned() {
3233

3334
assertNotNull(new CompasSclValidatorConfiguration().createOclFileCollector(validatorProperties));
3435

35-
verify(validatorProperties, times(1)).oclCustomDirectory();
36+
verify(validatorProperties).oclCustomDirectory();
3637
}
3738

3839
@Test
@@ -43,7 +44,7 @@ void createSclRiseClipseValidator_WhenCalled_ThenObjectReturned() {
4344
oclFileCollector,
4445
validatorProperties));
4546

46-
verify(validatorProperties, times(1)).tempDirectory();
47+
verify(validatorProperties).tempDirectory();
4748
}
4849

4950
@Test
@@ -58,6 +59,6 @@ void createNsdocFinder_WhenCalled_ThenObjectReturned() {
5859
assertNotNull(new CompasSclValidatorConfiguration().createNsdocFinder(
5960
validatorProperties));
6061

61-
verify(validatorProperties, times(1)).nsdocDirectory();
62+
verify(validatorProperties).nsdocDirectory();
6263
}
6364
}

app/src/test/java/org/lfenergy/compas/scl/validator/rest/exception/NsdocNotFoundExceptionHandlerTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
package org.lfenergy.compas.scl.validator.rest.exception;
55

66
import org.junit.jupiter.api.Test;
7-
import org.lfenergy.compas.core.jaxrs.model.ErrorResponse;
7+
import org.lfenergy.compas.core.commons.model.ErrorResponse;
88
import org.lfenergy.compas.scl.validator.exception.NsdocFileNotFoundException;
99

1010
import static javax.ws.rs.core.Response.Status.NOT_FOUND;

app/src/test/java/org/lfenergy/compas/scl/validator/rest/v1/NsdocResourceTest.java

+7-6
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@
99
import io.quarkus.test.security.TestSecurity;
1010
import io.restassured.http.ContentType;
1111
import org.junit.jupiter.api.Test;
12-
import org.lfenergy.compas.core.jaxrs.JaxrsConstants;
1312
import org.lfenergy.compas.scl.validator.exception.NsdocFileNotFoundException;
1413
import org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode;
1514
import org.lfenergy.compas.scl.validator.model.NsdocFile;
@@ -22,9 +21,11 @@
2221
import static io.restassured.path.xml.config.XmlPathConfig.xmlPathConfig;
2322
import static org.junit.jupiter.api.Assertions.assertEquals;
2423
import static org.junit.jupiter.api.Assertions.assertNotNull;
24+
import static org.lfenergy.compas.core.commons.CommonConstants.COMPAS_COMMONS_V1_NS_URI;
2525
import static org.lfenergy.compas.scl.validator.SclValidatorConstants.SCL_VALIDATOR_SERVICE_V1_NS_URI;
2626
import static org.lfenergy.compas.scl.validator.rest.SclResourceConstants.ID_PARAM;
27-
import static org.mockito.Mockito.*;
27+
import static org.mockito.Mockito.verify;
28+
import static org.mockito.Mockito.when;
2829

2930
@QuarkusTest
3031
@TestHTTPEndpoint(NsdocResource.class)
@@ -52,7 +53,7 @@ void list_WhenCalled_ThenListReturned() {
5253
var files = xmlPath.getList("svs:NsdocListResponse.svs:NsdocFile");
5354
assertNotNull(files);
5455
assertEquals(1, files.size());
55-
verify(nsdocService, times(1)).list();
56+
verify(nsdocService).list();
5657
}
5758

5859
@Test
@@ -78,7 +79,7 @@ void get_WhenCalled_ThenContentReturned() {
7879
var nsdocFile = xmlPath.getString("svs:NsdocResponse.svs:NsdocFile");
7980
assertNotNull(nsdocFile);
8081
assertEquals(result, nsdocFile);
81-
verify(nsdocService, times(1)).get(id);
82+
verify(nsdocService).get(id);
8283
}
8384

8485
@Test
@@ -99,14 +100,14 @@ void get_WhenCalledWithUnknownFile_Then404Returned() {
99100
.response();
100101

101102
var xmlPath = response.xmlPath()
102-
.using(xmlPathConfig().declaredNamespace("commons", JaxrsConstants.COMPAS_COMMONS_V1_NS_URI));
103+
.using(xmlPathConfig().declaredNamespace("commons", COMPAS_COMMONS_V1_NS_URI));
103104
var messages = xmlPath.getList("commons:ErrorResponse.commons:ErrorMessage");
104105
assertNotNull(messages);
105106
assertEquals(1, messages.size());
106107

107108
var code = xmlPath.getString("commons:ErrorResponse.commons:ErrorMessage.commons:Code");
108109
assertEquals(SclValidatorErrorCode.NSDOC_FILE_NOT_FOUND, code);
109110

110-
verify(nsdocService, times(1)).get(id);
111+
verify(nsdocService).get(id);
111112
}
112113
}

app/src/test/java/org/lfenergy/compas/scl/validator/rest/v1/SclValidatorResourceTest.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,8 @@
2424
import static org.junit.jupiter.api.Assertions.assertNotNull;
2525
import static org.lfenergy.compas.scl.validator.SclValidatorConstants.SCL_VALIDATOR_SERVICE_V1_NS_URI;
2626
import static org.lfenergy.compas.scl.validator.rest.SclResourceConstants.TYPE_PATH_PARAM;
27-
import static org.mockito.Mockito.*;
27+
import static org.mockito.Mockito.verify;
28+
import static org.mockito.Mockito.when;
2829

2930
@QuarkusTest
3031
@TestHTTPEndpoint(SclValidatorResource.class)
@@ -58,6 +59,6 @@ void validate_WhenCalled_ThenExpectedResponseIsRetrieved() throws IOException {
5859
var errors = xmlPath.getList("svs:SclValidateResponse.svs:ValidationErrors");
5960
assertNotNull(errors);
6061
assertEquals(1, errors.size());
61-
verify(sclValidatorService, times(1)).validate(sclFileTye, request.getSclData());
62+
verify(sclValidatorService).validate(sclFileTye, request.getSclData());
6263
}
6364
}

0 commit comments

Comments
 (0)