Skip to content

Commit 8f138b1

Browse files
author
Dennis Labordus
committed
Websocket version. Removed other Async solutions.
Signed-off-by: Dennis Labordus <[email protected]>
1 parent 0fcb3d9 commit 8f138b1

14 files changed

+358
-207
lines changed

app/pom.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,10 +65,6 @@ SPDX-License-Identifier: Apache-2.0
6565
<groupId>io.quarkus</groupId>
6666
<artifactId>quarkus-resteasy-jaxb</artifactId>
6767
</dependency>
68-
<dependency>
69-
<groupId>io.quarkus</groupId>
70-
<artifactId>quarkus-resteasy-mutiny</artifactId>
71-
</dependency>
7268
<dependency>
7369
<groupId>io.quarkus</groupId>
7470
<artifactId>quarkus-vertx</artifactId>

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

Lines changed: 0 additions & 47 deletions
This file was deleted.

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

Lines changed: 0 additions & 46 deletions
This file was deleted.

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

Lines changed: 0 additions & 49 deletions
This file was deleted.

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

Lines changed: 0 additions & 51 deletions
This file was deleted.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
// SPDX-FileCopyrightText: 2022 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.validator.rest.v1;
5+
6+
import io.quarkus.security.Authenticated;
7+
import io.vertx.mutiny.core.eventbus.EventBus;
8+
import org.lfenergy.compas.scl.extensions.model.SclFileType;
9+
import org.lfenergy.compas.scl.validator.rest.v1.event.AsyncWebsocketEventRequest;
10+
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateRequest;
11+
import org.lfenergy.compas.scl.validator.rest.v1.websocket.AsyncWebsocketRequestDecoder;
12+
import org.lfenergy.compas.scl.validator.rest.v1.websocket.AsyncWebsocketResponseEncoder;
13+
import org.slf4j.Logger;
14+
import org.slf4j.LoggerFactory;
15+
16+
import javax.enterprise.context.ApplicationScoped;
17+
import javax.inject.Inject;
18+
import javax.websocket.OnError;
19+
import javax.websocket.OnMessage;
20+
import javax.websocket.Session;
21+
import javax.websocket.server.PathParam;
22+
import javax.websocket.server.ServerEndpoint;
23+
import java.io.IOException;
24+
25+
import static org.lfenergy.compas.scl.validator.rest.SclResourceConstants.TYPE_PATH_PARAM;
26+
27+
@Authenticated
28+
@ApplicationScoped
29+
@ServerEndpoint(value = "/validate-ws/v1/{" + TYPE_PATH_PARAM + "}",
30+
decoders = AsyncWebsocketRequestDecoder.class,
31+
encoders = AsyncWebsocketResponseEncoder.class)
32+
public class AsyncWebsocketResource {
33+
private static final Logger LOGGER = LoggerFactory.getLogger(AsyncWebsocketResource.class);
34+
35+
private final EventBus bus;
36+
37+
@Inject
38+
public AsyncWebsocketResource(EventBus bus) {
39+
this.bus = bus;
40+
}
41+
42+
@OnError
43+
public void onError(Session session, @PathParam(TYPE_PATH_PARAM) String type, Throwable throwable) throws IOException {
44+
LOGGER.info("Error with session {} for type {}.", session.getId(), type, throwable);
45+
session.close();
46+
}
47+
48+
@OnMessage
49+
public void validateSCL(Session session, SclValidateRequest request, @PathParam(TYPE_PATH_PARAM) String type) {
50+
LOGGER.info("Message from session {} for type {}.", session.getId(), type);
51+
bus.send("validate-ws", new AsyncWebsocketEventRequest(
52+
session, SclFileType.valueOf(type), request.getSclData()));
53+
}
54+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// SPDX-FileCopyrightText: 2022 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.validator.rest.v1.event;
5+
6+
import io.quarkus.vertx.ConsumeEvent;
7+
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateResponse;
8+
import org.lfenergy.compas.scl.validator.service.SclValidatorService;
9+
10+
import javax.enterprise.context.ApplicationScoped;
11+
import javax.inject.Inject;
12+
import java.io.IOException;
13+
14+
@ApplicationScoped
15+
public class AsyncWebsocketEventHandler {
16+
private final SclValidatorService sclValidatorService;
17+
18+
@Inject
19+
public AsyncWebsocketEventHandler(SclValidatorService sclValidatorService) {
20+
this.sclValidatorService = sclValidatorService;
21+
}
22+
23+
@ConsumeEvent(value = "validate-ws", blocking = true)
24+
public void validateEvent(AsyncWebsocketEventRequest request) throws IOException {
25+
var response = new SclValidateResponse();
26+
response.setValidationErrorList(sclValidatorService.validate(request.getType(), request.getSclData()));
27+
28+
var session = request.getSession();
29+
session.getAsyncRemote().sendObject(response);
30+
session.close();
31+
}
32+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
// SPDX-FileCopyrightText: 2022 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.validator.rest.v1.event;
5+
6+
import org.lfenergy.compas.scl.extensions.model.SclFileType;
7+
8+
import javax.websocket.Session;
9+
10+
public class AsyncWebsocketEventRequest {
11+
private final Session session;
12+
private final SclFileType type;
13+
private final String sclData;
14+
15+
public AsyncWebsocketEventRequest(Session session, SclFileType type, String sclData) {
16+
this.session = session;
17+
this.type = type;
18+
this.sclData = sclData;
19+
}
20+
21+
public Session getSession() {
22+
return session;
23+
}
24+
25+
public SclFileType getType() {
26+
return type;
27+
}
28+
29+
public String getSclData() {
30+
return sclData;
31+
}
32+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// SPDX-FileCopyrightText: 2022 Alliander N.V.
2+
//
3+
// SPDX-License-Identifier: Apache-2.0
4+
package org.lfenergy.compas.scl.validator.rest.v1.websocket;
5+
6+
import org.lfenergy.compas.scl.validator.rest.v1.model.SclValidateRequest;
7+
8+
import javax.websocket.Decoder;
9+
import javax.websocket.EndpointConfig;
10+
import javax.xml.bind.JAXBContext;
11+
import javax.xml.bind.Unmarshaller;
12+
import java.io.StringReader;
13+
14+
public class AsyncWebsocketRequestDecoder implements Decoder.Text<SclValidateRequest> {
15+
@Override
16+
public SclValidateRequest decode(String message) {
17+
SclValidateRequest request = null;
18+
try {
19+
JAXBContext jaxbContext = JAXBContext.newInstance(SclValidateRequest.class);
20+
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
21+
StringReader reader = new StringReader(message);
22+
request = (SclValidateRequest) unmarshaller.unmarshal(reader);
23+
} catch (Exception ex) {
24+
ex.printStackTrace();
25+
}
26+
return request;
27+
}
28+
29+
@Override
30+
public boolean willDecode(String message) {
31+
return (message != null);
32+
}
33+
34+
@Override
35+
public void init(EndpointConfig endpointConfig) {
36+
// do nothing.
37+
}
38+
39+
@Override
40+
public void destroy() {
41+
// do nothing.
42+
}
43+
}

0 commit comments

Comments
 (0)