Skip to content

Commit 1c7a1ce

Browse files
remove client notification by rest
1 parent bd93d38 commit 1c7a1ce

23 files changed

+758
-308
lines changed

pom.xml

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,8 @@
1313
<maven.compiler.target>8</maven.compiler.target>
1414
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
1515
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
16-
<quarkus-plugin.version>1.3.1.Final</quarkus-plugin.version>
17-
<quarkus.platform.version>1.3.1.Final</quarkus.platform.version>
16+
<quarkus-plugin.version>1.3.2.Final</quarkus-plugin.version>
17+
<quarkus.platform.version>1.3.2.Final</quarkus.platform.version>
1818
<surefire-plugin.version>2.22.1</surefire-plugin.version>
1919

2020
<sunat-web-services.version>1.3.4.Final</sunat-web-services.version>
@@ -31,6 +31,11 @@
3131
</dependencies>
3232
</dependencyManagement>
3333
<dependencies>
34+
<!--Quarkus-->
35+
<dependency>
36+
<groupId>io.quarkus</groupId>
37+
<artifactId>quarkus-arc</artifactId>
38+
</dependency>
3439
<dependency>
3540
<groupId>io.quarkus</groupId>
3641
<artifactId>quarkus-resteasy</artifactId>
@@ -43,6 +48,10 @@
4348
<groupId>io.quarkus</groupId>
4449
<artifactId>quarkus-hibernate-orm-panache</artifactId>
4550
</dependency>
51+
<dependency>
52+
<groupId>io.quarkus</groupId>
53+
<artifactId>quarkus-agroal</artifactId>
54+
</dependency>
4655
<dependency>
4756
<groupId>org.jboss.resteasy</groupId>
4857
<artifactId>resteasy-multipart-provider</artifactId>
@@ -52,6 +61,37 @@
5261
<artifactId>quarkus-artemis-jms</artifactId>
5362
</dependency>
5463

64+
<!--Camel-->
65+
<dependency>
66+
<groupId>org.apache.camel.quarkus</groupId>
67+
<artifactId>camel-quarkus-core</artifactId>
68+
</dependency>
69+
<dependency>
70+
<groupId>org.apache.camel.quarkus</groupId>
71+
<artifactId>camel-quarkus-direct</artifactId>
72+
</dependency>
73+
<dependency>
74+
<groupId>org.apache.camel.quarkus</groupId>
75+
<artifactId>camel-quarkus-log</artifactId>
76+
</dependency>
77+
<dependency>
78+
<groupId>org.apache.camel.quarkus</groupId>
79+
<artifactId>camel-quarkus-file</artifactId>
80+
</dependency>
81+
<dependency>
82+
<groupId>org.apache.camel.quarkus</groupId>
83+
<artifactId>camel-quarkus-ftp</artifactId>
84+
</dependency>
85+
<dependency>
86+
<groupId>org.apache.camel.quarkus</groupId>
87+
<artifactId>camel-quarkus-aws-s3</artifactId>
88+
</dependency>
89+
90+
<!--Jdbc-->
91+
<dependency>
92+
<groupId>io.quarkus</groupId>
93+
<artifactId>quarkus-jdbc-h2</artifactId>
94+
</dependency>
5595
<dependency>
5696
<groupId>io.quarkus</groupId>
5797
<artifactId>quarkus-jdbc-postgresql</artifactId>
@@ -63,6 +103,7 @@
63103
<version>${sunat-web-services.version}</version>
64104
</dependency>
65105

106+
<!--Tests-->
66107
<dependency>
67108
<groupId>io.quarkus</groupId>
68109
<artifactId>quarkus-junit5</artifactId>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.openubl.exceptions;
2+
3+
public class UnsupportedDocumentTypeException extends Exception {
4+
public UnsupportedDocumentTypeException(Exception e) {
5+
super(e);
6+
}
7+
8+
public UnsupportedDocumentTypeException(String messasge) {
9+
super(messasge);
10+
}
11+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.openubl.exceptions;
2+
3+
public class WSNotAvailableException extends Exception {
4+
public WSNotAvailableException(Exception e) {
5+
super(e);
6+
}
7+
8+
public WSNotAvailableException(String messasge) {
9+
super(messasge);
10+
}
11+
}

src/main/java/org/openubl/factories/ModelFactory.java

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.openubl.factories;
22

33
import io.github.carlosthe19916.webservices.providers.BillServiceModel;
4-
import org.openubl.models.SendFileMessageModel;
4+
import org.openubl.models.MessageModel;
55

66
import javax.jms.JMSException;
77
import javax.jms.Message;
@@ -15,22 +15,16 @@ private ModelFactory() {
1515
// Just static methods
1616
}
1717

18-
public static SendFileMessageModel getSendFilePropertiesModel(Message message) throws JMSException {
19-
SendFileMessageModel.Builder builder = SendFileMessageModel.Builder.aSunatJMSMessageModel();
18+
public static MessageModel getSendFilePropertiesModel(Message message) throws JMSException {
19+
MessageModel.Builder builder = MessageModel.Builder.aSendFileMessageModel();
2020

2121
Enumeration<?> enumeration = message.getPropertyNames();
2222
if (enumeration != null) {
2323
while (enumeration.hasMoreElements()) {
2424
String key = (String) enumeration.nextElement();
2525
switch (key) {
26-
case "documentType":
27-
builder.withDocumentType(message.getStringProperty(key));
28-
break;
29-
case "serverUrl":
30-
builder.withServerUrl(message.getStringProperty(key));
31-
break;
32-
case "fileName":
33-
builder.withFileName(message.getStringProperty(key));
26+
case "entityId":
27+
builder.withEntityId(Long.valueOf(message.getStringProperty(key)));
3428
break;
3529
case "username":
3630
builder.withUsername(message.getStringProperty(key));
@@ -45,12 +39,10 @@ public static SendFileMessageModel getSendFilePropertiesModel(Message message) t
4539
return builder.build();
4640
}
4741

48-
public static Map<String, String> getAsMap(SendFileMessageModel model) {
42+
public static Map<String, String> getAsMap(MessageModel model) {
4943
Map<String, String> map = new HashMap<>();
5044

51-
map.put("fileName", model.getFileName());
52-
map.put("serverUrl", model.getServerUrl());
53-
map.put("documentType", model.getDocumentType());
45+
map.put("entityId", model.getEntityId().toString());
5446
map.put("username", model.getUsername());
5547
map.put("password", model.getPassword());
5648

src/main/java/org/openubl/jms/SendCallbackJMSProducer.java

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,13 @@ public class SendCallbackJMSProducer {
1818
@ConfigProperty(name = "openubl.callbackQueue")
1919
String callbackQueue;
2020

21+
@ConfigProperty(name = "openubl.ticketQueue")
22+
String ticketQueue;
23+
2124
@Inject
2225
ConnectionFactory connectionFactory;
2326

24-
public void produceSendCallbackMessage(BillServiceModel billServiceModel) {
27+
public void produceCDRMessage(BillServiceModel billServiceModel) throws JMSException {
2528
try (JMSContext context = connectionFactory.createContext(Session.AUTO_ACKNOWLEDGE)) {
2629
JMSProducer jmsProducer = context.createProducer();
2730

@@ -34,16 +37,30 @@ public void produceSendCallbackMessage(BillServiceModel billServiceModel) {
3437

3538
message = bytesMessage;
3639
} else {
37-
message = context.createTextMessage("No CDR available");
40+
message = context.createTextMessage("No CDR");
3841
}
3942

4043
for (Map.Entry<String, String> entry : ModelFactory.getAsMap(billServiceModel).entrySet()) {
4144
message.setStringProperty(entry.getKey(), entry.getValue());
4245
}
4346

4447
jmsProducer.send(queue, message);
45-
} catch (JMSException e) {
46-
LOG.error("Error trying to send bytes message", e);
48+
}
49+
}
50+
51+
public void produceTicketMessage(BillServiceModel billServiceModel) throws JMSException {
52+
try (JMSContext context = connectionFactory.createContext(Session.AUTO_ACKNOWLEDGE)) {
53+
JMSProducer jmsProducer = context.createProducer();
54+
55+
Queue queue = context.createQueue(ticketQueue);
56+
57+
Message message = context.createTextMessage(billServiceModel.getTicket());
58+
59+
for (Map.Entry<String, String> entry : ModelFactory.getAsMap(billServiceModel).entrySet()) {
60+
message.setStringProperty(entry.getKey(), entry.getValue());
61+
}
62+
63+
jmsProducer.send(queue, message);
4764
}
4865
}
4966

src/main/java/org/openubl/jms/SendFileJMSConsumer.java

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import org.eclipse.microprofile.config.inject.ConfigProperty;
66
import org.jboss.logging.Logger;
77
import org.openubl.factories.ModelFactory;
8-
import org.openubl.models.SendFileMessageModel;
9-
import org.openubl.providers.SendFileWSProvider;
8+
import org.openubl.models.MessageModel;
9+
import org.openubl.providers.WSProvider;
1010

1111
import javax.enterprise.context.ApplicationScoped;
1212
import javax.enterprise.event.Observes;
@@ -22,7 +22,7 @@ public class SendFileJMSConsumer implements Runnable {
2222
private static final Logger LOG = Logger.getLogger(SendFileJMSConsumer.class);
2323

2424
@Inject
25-
SendFileWSProvider sunatWSProvider;
25+
WSProvider wsProvider;
2626

2727
@Inject
2828
ConnectionFactory connectionFactory;
@@ -43,28 +43,26 @@ void onStop(@Observes ShutdownEvent ev) {
4343
@Override
4444
public void run() {
4545
try (JMSContext context = connectionFactory.createContext(Session.CLIENT_ACKNOWLEDGE)) {
46-
JMSConsumer jmsConsumer = context.createConsumer(context.createQueue(sendFileQueue));
46+
JMSConsumer consumer = context.createConsumer(context.createQueue(sendFileQueue));
4747
while (true) {
48-
Message message = jmsConsumer.receive();
48+
Message message = consumer.receive();
4949
if (message == null) {
5050
return;
5151
}
5252

53-
if (!(message instanceof BytesMessage)) {
54-
LOG.warn("Consumer can not consume messages other than Bytes Messages");
55-
}
53+
MessageModel messageModel = ModelFactory.getSendFilePropertiesModel(message);
5654

57-
SendFileMessageModel model = ModelFactory.getSendFilePropertiesModel(message);
58-
boolean result = sunatWSProvider.sendFile(model, message.getBody(byte[].class));
55+
boolean result = wsProvider.sendFile(messageModel, message.getBody(byte[].class));
5956

6057
if (result) {
6158
message.acknowledge();
59+
LOG.debug("Message acknowledged");
6260
}
6361
}
6462
} catch (JMSException e) {
65-
LOG.error(e);
63+
LOG.error("JMSException", e);
6664
} catch (Throwable e) {
67-
LOG.error("Unexpected exception", e);
65+
LOG.error("Throwable exception", e);
6866
}
6967
}
7068

src/main/java/org/openubl/jms/SendFileJMSProducer.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.eclipse.microprofile.config.inject.ConfigProperty;
44
import org.jboss.logging.Logger;
55
import org.openubl.factories.ModelFactory;
6-
import org.openubl.models.SendFileMessageModel;
6+
import org.openubl.models.MessageModel;
77

88
import javax.enterprise.context.ApplicationScoped;
99
import javax.inject.Inject;
@@ -19,31 +19,34 @@ public class SendFileJMSProducer {
1919
@ConfigProperty(name = "openubl.sendFileQueue")
2020
String sendFileQueue;
2121

22+
@ConfigProperty(name = "openubl.message.delay")
23+
Long messageDelay;
24+
2225
@Inject
2326
ConnectionFactory connectionFactory;
2427

25-
public void produceSendFileMessage(SendFileMessageModel sendFileMessageModel, byte[] file) throws JMSException {
28+
public void produceSendFileMessage(MessageModel messageModel, byte[] file) throws JMSException {
2629
if (file == null || file.length == 0) {
2730
throw new IllegalStateException("Invalid file");
2831
}
2932

3033
try (JMSContext context = connectionFactory.createContext(Session.AUTO_ACKNOWLEDGE)) {
31-
JMSProducer jmsProducer = context.createProducer();
34+
JMSProducer producer = context.createProducer();
35+
producer.setDeliveryDelay(messageDelay);
3236

3337
Queue queue = context.createQueue(sendFileQueue);
3438

3539
BytesMessage message = context.createBytesMessage();
3640
message.writeBytes(file);
3741

38-
for (Map.Entry<String, String> entry : ModelFactory.getAsMap(sendFileMessageModel).entrySet()) {
42+
for (Map.Entry<String, String> entry : ModelFactory.getAsMap(messageModel).entrySet()) {
3943
message.setStringProperty(entry.getKey(), entry.getValue());
4044
}
4145

42-
jmsProducer.send(queue, message);
46+
producer.send(queue, message);
4347
} finally {
44-
LOG.info("File has been sent to the Broker");
48+
LOG.debug(messageModel + " was sent to:" + sendFileQueue);
4549
}
4650
}
4751

48-
4952
}
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package org.openubl.jms;
2+
3+
import io.quarkus.runtime.ShutdownEvent;
4+
import io.quarkus.runtime.StartupEvent;
5+
import org.eclipse.microprofile.config.inject.ConfigProperty;
6+
import org.jboss.logging.Logger;
7+
import org.openubl.factories.ModelFactory;
8+
import org.openubl.models.MessageModel;
9+
import org.openubl.providers.WSProvider;
10+
11+
import javax.enterprise.context.ApplicationScoped;
12+
import javax.enterprise.event.Observes;
13+
import javax.inject.Inject;
14+
import javax.jms.*;
15+
import java.util.concurrent.Executors;
16+
import java.util.concurrent.ScheduledExecutorService;
17+
import java.util.concurrent.TimeUnit;
18+
19+
@ApplicationScoped
20+
public class SendTicketJMSConsumer implements Runnable {
21+
22+
private static final Logger LOG = Logger.getLogger(SendTicketJMSConsumer.class);
23+
24+
@Inject
25+
WSProvider wsProvider;
26+
27+
@Inject
28+
ConnectionFactory connectionFactory;
29+
30+
@ConfigProperty(name = "openubl.ticketQueue")
31+
String ticketQueue;
32+
33+
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
34+
35+
void onStart(@Observes StartupEvent ev) {
36+
scheduler.scheduleWithFixedDelay(this, 0L, 5L, TimeUnit.SECONDS);
37+
}
38+
39+
void onStop(@Observes ShutdownEvent ev) {
40+
scheduler.shutdown();
41+
}
42+
43+
@Override
44+
public void run() {
45+
try (JMSContext context = connectionFactory.createContext(Session.CLIENT_ACKNOWLEDGE)) {
46+
JMSConsumer consumer = context.createConsumer(context.createQueue(ticketQueue));
47+
while (true) {
48+
Message message = consumer.receive();
49+
if (message == null) {
50+
return;
51+
}
52+
53+
MessageModel messageModel = ModelFactory.getSendFilePropertiesModel(message);
54+
55+
boolean result = wsProvider.checkTicket(messageModel, message.getBody(String.class));
56+
57+
if (result) {
58+
message.acknowledge();
59+
}
60+
}
61+
} catch (JMSException e) {
62+
LOG.error("JMSException", e);
63+
} catch (Throwable e) {
64+
LOG.error("Throwable exception", e);
65+
}
66+
}
67+
68+
}

src/main/java/org/openubl/models/FileDeliveryStatusType.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,12 @@
22

33
public enum FileDeliveryStatusType {
44
SCHEDULED_TO_DELIVER,
5+
SCHEDULED_TO_DELIVER_FAILED,
56
RESCHEDULED_TO_DELIVER,
6-
DELIVERED
7+
SCHEDULED_CHECK_TICKET,
8+
RESCHEDULED_CHECK_TICKET,
9+
ERROR_SCHEDULING_CHECK_TICKET,
10+
SCHEDULED_CALLBACK,
11+
ERROR_SCHEDULING_CALLBACK,
12+
OK
713
}

0 commit comments

Comments
 (0)