Skip to content

Commit e224576

Browse files
author
Dennis Labordus
committed
Updated use of CoMPAS Core projects for Rest/Websockets.
Signed-off-by: Dennis Labordus <[email protected]>
1 parent 557195a commit e224576

File tree

16 files changed

+110
-211
lines changed

16 files changed

+110
-211
lines changed

app/pom.xml

Lines changed: 5 additions & 1 deletion
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

Lines changed: 1 addition & 1 deletion
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/event/SclValidatorEventHandler.java

Lines changed: 6 additions & 5 deletions
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

Lines changed: 4 additions & 29 deletions
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

Lines changed: 5 additions & 32 deletions
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

Lines changed: 4 additions & 29 deletions
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

Lines changed: 5 additions & 32 deletions
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/exception/NsdocNotFoundExceptionHandlerTest.java

Lines changed: 1 addition & 1 deletion
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

Lines changed: 2 additions & 2 deletions
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,6 +21,7 @@
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;
2727
import static org.mockito.Mockito.*;
@@ -99,7 +99,7 @@ void get_WhenCalledWithUnknownFile_Then404Returned() {
9999
.response();
100100

101101
var xmlPath = response.xmlPath()
102-
.using(xmlPathConfig().declaredNamespace("commons", JaxrsConstants.COMPAS_COMMONS_V1_NS_URI));
102+
.using(xmlPathConfig().declaredNamespace("commons", COMPAS_COMMONS_V1_NS_URI));
103103
var messages = xmlPath.getList("commons:ErrorResponse.commons:ErrorMessage");
104104
assertNotNull(messages);
105105
assertEquals(1, messages.size());

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

Lines changed: 60 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55

66
import org.junit.jupiter.api.Test;
77
import org.junit.jupiter.api.extension.ExtendWith;
8+
import org.lfenergy.compas.core.commons.exception.CompasException;
9+
import org.lfenergy.compas.core.commons.model.ErrorResponse;
810
import org.lfenergy.compas.scl.extensions.model.SclFileType;
911
import org.lfenergy.compas.scl.validator.model.ValidationError;
1012
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateResponse;
@@ -20,6 +22,8 @@
2022
import java.util.ArrayList;
2123

2224
import static org.junit.jupiter.api.Assertions.assertEquals;
25+
import static org.lfenergy.compas.core.commons.exception.CompasErrorCode.WEBSOCKET_GENERAL_ERROR_CODE;
26+
import static org.lfenergy.compas.scl.validator.exception.SclValidatorErrorCode.LOADING_OCL_FILES_FAILED;
2327
import static org.mockito.Mockito.*;
2428

2529
@ExtendWith(MockitoExtension.class)
@@ -39,11 +43,7 @@ void validateWebsocketsEvent_WhenCalled_ThenExpectedCallsAreMade() {
3943
var session = Mockito.mock(Session.class);
4044
var async = Mockito.mock(RemoteEndpoint.Async.class);
4145
when(session.getAsyncRemote()).thenReturn(async);
42-
43-
var request = Mockito.mock(SclValidatorEventRequest.class);
44-
when(request.getSession()).thenReturn(session);
45-
when(request.getType()).thenReturn(type);
46-
when(request.getSclData()).thenReturn(sclData);
46+
var request = new SclValidatorEventRequest(session, type, sclData);
4747

4848
when(service.validate(type, sclData)).thenReturn(veList);
4949

@@ -56,8 +56,60 @@ void validateWebsocketsEvent_WhenCalled_ThenExpectedCallsAreMade() {
5656
assertEquals(veList, response.getValidationErrorList());
5757

5858
verify(service, times(1)).validate(type, sclData);
59-
verify(request, times(1)).getSession();
60-
verify(request, times(1)).getType();
61-
verify(request, times(1)).getSclData();
59+
}
60+
61+
@Test
62+
void validateWebsocketsEvent_WhenCalledAndCompasExceptionThrownByService_ThenErrorResponseReturned() {
63+
var type = SclFileType.CID;
64+
var sclData = "Some SCL Data";
65+
var errorMessage = "Some Error";
66+
67+
var session = Mockito.mock(Session.class);
68+
var async = Mockito.mock(RemoteEndpoint.Async.class);
69+
when(session.getAsyncRemote()).thenReturn(async);
70+
var request = new SclValidatorEventRequest(session, type, sclData);
71+
72+
when(service.validate(type, sclData))
73+
.thenThrow(new CompasException(LOADING_OCL_FILES_FAILED, errorMessage));
74+
75+
eventHandler.validateWebsocketsEvent(request);
76+
77+
verify(session, times(1)).getAsyncRemote();
78+
ArgumentCaptor<ErrorResponse> captor = ArgumentCaptor.forClass(ErrorResponse.class);
79+
verify(async, times(1)).sendObject(captor.capture());
80+
var response = captor.getValue();
81+
assertEquals(1, response.getErrorMessages().size());
82+
var message = response.getErrorMessages().get(0);
83+
assertEquals(LOADING_OCL_FILES_FAILED, message.getCode());
84+
assertEquals(errorMessage, message.getMessage());
85+
86+
verify(service, times(1)).validate(type, sclData);
87+
}
88+
89+
@Test
90+
void validateWebsocketsEvent_WhenCalledAndRuntimeExceptionThrownByService_ThenErrorResponseReturned() {
91+
var type = SclFileType.CID;
92+
var sclData = "Some SCL Data";
93+
var errorMessage = "Some Error";
94+
95+
var session = Mockito.mock(Session.class);
96+
var async = Mockito.mock(RemoteEndpoint.Async.class);
97+
when(session.getAsyncRemote()).thenReturn(async);
98+
var request = new SclValidatorEventRequest(session, type, sclData);
99+
100+
when(service.validate(type, sclData)).thenThrow(new RuntimeException(errorMessage));
101+
102+
eventHandler.validateWebsocketsEvent(request);
103+
104+
verify(session, times(1)).getAsyncRemote();
105+
ArgumentCaptor<ErrorResponse> captor = ArgumentCaptor.forClass(ErrorResponse.class);
106+
verify(async, times(1)).sendObject(captor.capture());
107+
var response = captor.getValue();
108+
assertEquals(1, response.getErrorMessages().size());
109+
var message = response.getErrorMessages().get(0);
110+
assertEquals(WEBSOCKET_GENERAL_ERROR_CODE, message.getCode());
111+
assertEquals(errorMessage, message.getMessage());
112+
113+
verify(service, times(1)).validate(type, sclData);
62114
}
63115
}

0 commit comments

Comments
 (0)