responses) {
+ this.responses = responses;
+ }
+}
diff --git a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageLogResponse.java b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageLogResponse.java
index 2013da2695833b55872bcf81ca052a9f0c856f68..fb8e5fe44944ea1cf5f8a84ab4f21eb2aa49a238 100644
--- a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageLogResponse.java
+++ b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageLogResponse.java
@@ -12,7 +12,7 @@ import java.util.List;
/**
* Represents a message log response with a unique message UUID, an optional Message level response UUID and a {@link MessageLogModel} list of validations.
*/
-@XmlRootElement
+@XmlRootElement(namespace = "http://www.erst.dk/oxalis/api", name ="messageLogResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class MessageLogResponse {
diff --git a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModel.java b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModel.java
index da4a526df806404d6a4e8c104f0cf9e20ca050a2..d65fdb3fc5fce715bbf4ff88f7eb61f4e0d448f3 100644
--- a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModel.java
+++ b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModel.java
@@ -27,7 +27,8 @@ import java.time.LocalDateTime;
"transmissionId",
"documentTypeId",
"peppolProcessId",
- "remoteHost"
+ "remoteHost",
+ "messageLevelResponseUuid"
})
public class MessageModel {
@XmlElement
@@ -75,6 +76,10 @@ public class MessageModel {
example = "http://localhost:8080/oxalis/as4")
private String remoteHost;
+ @XmlElement
+ @Schema(description = "The UUID of the Message Level Response or OIOUBL Application Response which has been sent for this message in the event of validation errors")
+ private String messageLevelResponseUuid;
+
/**
* Returns the status of the document.
*
@@ -311,6 +316,25 @@ public class MessageModel {
model.setDocumentTypeId(m.getDocumentTypeId());
model.setPeppolProcessId(m.getPeppolProcessId());
model.setTransmissionId(m.getTransmissionId());
+ model.setMessageLevelResponseUuid(m.getMessageLevelResponseUuid());
return model;
}
+
+ /**
+ * Gets the UUID of the Message Level Response or OIOUBL Application Response which
+ * has been sent regarding this message in the event of validation errors.
+ * @return The UUID of the response.
+ */
+ public String getMessageLevelResponseUuid() {
+ return messageLevelResponseUuid;
+ }
+
+ /**
+ * Sets the UUID of the Message Level Response or OIOUBL Application Response which
+ * has been sent regarding this message in the event of validation errors.
+ * @param messageLevelResponseUuid The UUID of the response.
+ */
+ public void setMessageLevelResponseUuid(String messageLevelResponseUuid) {
+ this.messageLevelResponseUuid = messageLevelResponseUuid;
+ }
}
diff --git a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModelResponse.java b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModelResponse.java
index a3cd5f20dda4944fb89d787312522dec087cdaf4..8222ed4903442b01135e7798b6c8d1837567adf7 100644
--- a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModelResponse.java
+++ b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageModelResponse.java
@@ -12,7 +12,7 @@ import java.util.List;
/**
* Represents a response containing a {@link MessageModel}.
*/
-@XmlRootElement
+@XmlRootElement(namespace = "http://www.erst.dk/oxalis/api", name ="messageModelResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class MessageModelResponse {
@XmlElement
diff --git a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageResponse.java b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageResponse.java
index 42ae51939e5e7b76cc0309e841bd46f24a919ec6..0a22d84976324a98f1369a56029fc85113e8f7ca 100644
--- a/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageResponse.java
+++ b/src/main/java/dk/erst/oxalis/as4/handlers/dto/MessageResponse.java
@@ -10,7 +10,7 @@ import javax.xml.bind.annotation.XmlRootElement;
/**
* Represents a message response with a unique message UUID.
*/
-@XmlRootElement
+@XmlRootElement(namespace = "http://www.erst.dk/oxalis/api", name ="messageResponse")
@XmlAccessorType(XmlAccessType.FIELD)
public class MessageResponse {
diff --git a/src/main/java/dk/erst/oxalis/as4/handlers/dto/UpdateStatusRequest.java b/src/main/java/dk/erst/oxalis/as4/handlers/dto/UpdateStatusRequest.java
index 7e34160621eef447b7cf516ff8b852f5f9be6a4a..273f991cfa89290e78feb0c582da452c250ebd7a 100644
--- a/src/main/java/dk/erst/oxalis/as4/handlers/dto/UpdateStatusRequest.java
+++ b/src/main/java/dk/erst/oxalis/as4/handlers/dto/UpdateStatusRequest.java
@@ -11,10 +11,10 @@ import javax.xml.bind.annotation.XmlRootElement;
/**
* Represents a request to update the status of a message.
*/
-@XmlRootElement(name = "UpdateStatusRequest")
+@XmlRootElement(namespace = "http://www.erst.dk/oxalis/api", name = "updateStatusRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class UpdateStatusRequest {
- @XmlElement(name = "MessageStatus")
+ @XmlElement
@Schema(description = "Status to set on the message. Must be either RECEIVED or CREATED.",
example = "RECEIVED")
private MessageStatus messageStatus;
diff --git a/src/main/java/dk/erst/oxalis/as4/handlers/dto/ValidationResult.java b/src/main/java/dk/erst/oxalis/as4/handlers/dto/ValidationResult.java
index 45c2af601e1b36b4cfc44a2689185592b6bca0ff..adc75497024bafccc00f1178e621610bee19fa82 100644
--- a/src/main/java/dk/erst/oxalis/as4/handlers/dto/ValidationResult.java
+++ b/src/main/java/dk/erst/oxalis/as4/handlers/dto/ValidationResult.java
@@ -14,7 +14,7 @@ import java.util.stream.Collectors;
/**
* Validation result containing any errors or warnings.
*/
-@XmlRootElement
+@XmlRootElement(namespace = "http://www.erst.dk/oxalis/api", name ="validationResult")
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ValidationResult", propOrder = {
"validationType",
@@ -253,23 +253,26 @@ public class ValidationResult {
if(validationType != null) {
sb.append(" (validation type: ").append(validationType).append(")");
}
- sb.append(": \n");
+ sb.append(": ");
if(hasErrors()) {
- sb.append(getErrors().size() + " errors: \n")
- .append(getErrors().stream().map(e -> e.toString()).collect(Collectors.joining("\n")))
- .append("\n");
+ sb.append(getErrors().size())
+ .append(" errors: [")
+ .append(getErrors().stream().map(e -> e.toString()).collect(Collectors.joining(", ")))
+ .append("]");
} else {
- sb.append("0 errors \n");
+ sb.append("0 errors");
}
+ sb.append(", ");
if(hasWarnings()) {
- sb.append(getWarnings().size() + " warnings: \n")
- .append(getWarnings().stream().map(e -> e.toString()).collect(Collectors.joining("\n")))
- .append("\n");
+ sb.append(getWarnings().size())
+ .append(" warnings: [")
+ .append(getWarnings().stream().map(e -> e.toString()).collect(Collectors.joining(", ")))
+ .append("]");
} else {
- sb.append("0 Warnings \n");
+ sb.append("0 warnings");
}
return sb.toString();
diff --git a/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcConf.java b/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcConf.java
index 64dc8490c72df7fdb5285b4d2bfbc97af853e3ee..733309be16e740792e1ab6dac03385f9f7b4219d 100644
--- a/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcConf.java
+++ b/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcConf.java
@@ -115,10 +115,18 @@ public enum JdbcConf {
@DefaultValue("none")
JDBC_LIQUIBASE_CONTEXTS,
/**
- * If set to true, run the liquibase located in /src/main/resources/db/oxalis-as4-db-changelog.xml
+ * If set to true, run the configured {@link #JDBC_LIQUIBASE_CHANGELOG} file.
* Make sure to take a look at the {@link JdbcConf#JDBC_LIQUIBASE_CONTEXTS} before setting this to true
*/
@Path("jdbc.liquibase.run")
@DefaultValue("true")
- JDBC_LIQUIBASE_RUN;
+ JDBC_LIQUIBASE_RUN,
+
+ /**
+ * The changelog file is to be run by liquibase during startup (provided liquibase is enabled via {@link #JDBC_LIQUIBASE_RUN}).
+ * Default is to use the changelog file located in /src/main/resources/db/oxalis-as4-db-changelog.xml
+ */
+ @Path("jdbc.liquibase.changelog")
+ @DefaultValue("db/oxalis-as4-db-changelog.xml")
+ JDBC_LIQUIBASE_CHANGELOG;
}
diff --git a/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcFilter.java b/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcFilter.java
index e5e66491f1b2b27edb19f9465288122f350edd0c..58878d7682c47a7ae748f95e2e4aa8b29e0ad64e 100644
--- a/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcFilter.java
+++ b/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcFilter.java
@@ -14,7 +14,7 @@ import java.util.Enumeration;
/**
* A singleton filter class that applies JDBC operations.
- *
+ *
* This filter class is responsible for managing JDBC driver deregistration, as well as
* cleaning up any abandoned connections. It doesn't apply any filtering operations.
*/
diff --git a/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcModule.java b/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcModule.java
index 15487df69da02e8456639acaeb25204b20828202..cc7ea94e2a214ddedf4739cff5a9c8d93e623766 100644
--- a/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcModule.java
+++ b/src/main/java/dk/erst/oxalis/as4/jdbc/JdbcModule.java
@@ -21,7 +21,7 @@ import java.util.Map;
/**
* This module handles JPA/JDBC configuration by reading the configuration specified from {@link JdbcConf}.
- *
+ *
* eg.;
* {@code
* jpaProperties.put("hibernate.connection.driver_class", settings.getString(JdbcConf.JDBC_DRIVER_CLASS))
@@ -65,7 +65,7 @@ public class JdbcModule extends ServletModule {
/**
*
* This method is responsible for initializing the Database. All the configurations that are passed into the JPA properties module, is taken from the Oxalis.conf file (or default values).
- *
+ *
* Note: if a H2 database is used (based on the configured dialect) a default connection pool is configured (with a maximum size), otherwise a C3P0 connection pool is configured with a min size and a max size.
*
* @param settings {@link JdbcConf} - the configured settings injected into the method
@@ -96,14 +96,14 @@ public class JdbcModule extends ServletModule {
// we have to do liquibase update here (as opposed to configureServlets()), since it requires
// the above values to be present
if(settings.getString(JdbcConf.JDBC_LIQUIBASE_RUN).contentEquals("true")) {
- runLiquibaseMigration(settings.getString(JdbcConf.JDBC_LIQUIBASE_CONTEXTS));
+ runLiquibaseMigration(settings.getString(JdbcConf.JDBC_LIQUIBASE_CHANGELOG), settings.getString(JdbcConf.JDBC_LIQUIBASE_CONTEXTS));
}
else {
logger.info("Skipping liquibase run.");
}
}
- private void runLiquibaseMigration(String liquibaseContexts) {
+ private void runLiquibaseMigration(String changelogFile, String liquibaseContexts) {
logger.info("Running liquibase update with contexts: {}", liquibaseContexts);
String url = jpaProperties.get("hibernate.connection.url");
@@ -122,7 +122,7 @@ public class JdbcModule extends ServletModule {
// see http://www.h2database.com/html/features.html#in_memory_databases
try (Connection connection = DriverManager.getConnection(url, user, password)) {
JdbcConnection liquibaseConnection = new JdbcConnection(connection);
- Liquibase liquibase = new Liquibase("db/oxalis-as4-db-changelog.xml", new ClassLoaderResourceAccessor(), liquibaseConnection);
+ Liquibase liquibase = new Liquibase(changelogFile, new ClassLoaderResourceAccessor(), liquibaseConnection);
liquibase.update(liquibaseContexts);
} catch (SQLException | LiquibaseException e) {
throw new RuntimeException(e);
diff --git a/src/main/java/dk/erst/oxalis/as4/persistence/model/AccountReceiver.java b/src/main/java/dk/erst/oxalis/as4/persistence/model/AccountReceiver.java
index 7de08e390e14828c457ccdebc234497bf11ad12f..194ea19a8227cd94a85a0c0fd36559ccc4845544 100644
--- a/src/main/java/dk/erst/oxalis/as4/persistence/model/AccountReceiver.java
+++ b/src/main/java/dk/erst/oxalis/as4/persistence/model/AccountReceiver.java
@@ -17,10 +17,6 @@ public class AccountReceiver extends AbstractEntity {
@Column(name = "participant_id", nullable = false, unique = true)
private String participantId;
- // currently, transferDelegation identifies parties by cvr number, thus it is required
- @Column(name = "cvr_number", nullable = false)
- private String cvrNumber;
-
/**
* Instantiates a new Account receiver.
*/
@@ -32,12 +28,10 @@ public class AccountReceiver extends AbstractEntity {
*
* @param account the account
* @param participantId the participant id
- * @param cvrNumber the cvr number
*/
- public AccountReceiver(Account account, String participantId, String cvrNumber){
+ public AccountReceiver(Account account, String participantId){
this.account = account;
this.participantId = participantId;
- this.cvrNumber = cvrNumber;
}
/**
@@ -76,21 +70,4 @@ public class AccountReceiver extends AbstractEntity {
this.participantId = participantId;
}
- /**
- * Gets cvr number.
- *
- * @return the cvr number
- */
- public String getCvrNumber() {
- return cvrNumber;
- }
-
- /**
- * Sets cvr number.
- *
- * @param cvrNumber the cvr number
- */
- public void setCvrNumber(String cvrNumber) {
- this.cvrNumber = cvrNumber;
- }
}
diff --git a/src/main/java/dk/erst/oxalis/as4/persistence/model/Message.java b/src/main/java/dk/erst/oxalis/as4/persistence/model/Message.java
index d0a1c8844e566f793c936522cb6e6065d73926bc..8c0bd0a98f37ab8e12176e3fd46d2207ca3bcf3b 100644
--- a/src/main/java/dk/erst/oxalis/as4/persistence/model/Message.java
+++ b/src/main/java/dk/erst/oxalis/as4/persistence/model/Message.java
@@ -18,6 +18,13 @@ public class Message extends AbstractEntity {
@JoinColumns({ @JoinColumn(name = "account_id", nullable = false) })
private Account account;
+ @ManyToOne(fetch = FetchType.LAZY, optional = true)
+ @JoinColumn(name = "original_message", nullable = true)
+ private Message originalMessage;
+
+ @OneToMany(fetch = FetchType.LAZY, mappedBy = "originalMessage")
+ private Set responses;
+
@Enumerated(EnumType.STRING)
@Column(name = "status", nullable = false)
private MessageStatus status = MessageStatus.CREATED;
@@ -468,4 +475,40 @@ public class Message extends AbstractEntity {
public void setMessageLevelResponseUuid(String responseMessageUuid) {
this.messageLevelResponseUuid = responseMessageUuid;
}
+
+ /**
+ * If message is a representation of a response, then this will have a relation to the original message.
+ *
+ * @return the original message
+ */
+ public Message getOriginalMessage() {
+ return originalMessage;
+ }
+
+ /**
+ * Sets the original message that this Message is a response to
+ *
+ * @param originalMessage the original message
+ */
+ public void setOriginalMessage(Message originalMessage) {
+ this.originalMessage = originalMessage;
+ }
+
+ /**
+ * Gets all responses for the Message
+ *
+ * @return the responses
+ */
+ public Set getResponses() {
+ return responses;
+ }
+
+ /**
+ * Sets all responses to the Message.
+ *
+ * @param responses the responses
+ */
+ public void setResponses(Set responses) {
+ this.responses = responses;
+ }
}
diff --git a/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageLog.java b/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageLog.java
index a6566120a38411fd9d8c50dfa3cb3c9e049410e9..a9db8e08b0080d2ed94b0dbba433c2da3f1cfcc3 100644
--- a/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageLog.java
+++ b/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageLog.java
@@ -54,7 +54,7 @@ public class MessageLog {
/**
*
- Creates a MessageLog and accompanying application log.
+ Persists a MessageLog and accompanying application log.
Use this when you have created a Message Log object somewhere else,
but now wish to save it.
*
@@ -120,6 +120,8 @@ public class MessageLog {
msgLog.setType(type);
msgLog.setValidationLineReference(validationLineReference);
+ logger.debug(NemhandelLog.EVENT_TEXT, msgLog.getDescription());
+
return msgLog;
}
diff --git a/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageStatus.java b/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageStatus.java
index 3e02ee4dbb6261eb2447045ada1e8cb7595b7716..6998177f2f1b2f4edc5c1aa2f4487280a6db6e41 100644
--- a/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageStatus.java
+++ b/src/main/java/dk/erst/oxalis/as4/persistence/model/MessageStatus.java
@@ -1,6 +1,5 @@
package dk.erst.oxalis.as4.persistence.model;
-import org.jetbrains.annotations.NotNull;
/**
* Used to describe the status of the Message passing through the flow
@@ -37,7 +36,7 @@ public enum MessageStatus {
* @return the MessageStatus
* @throws IllegalArgumentException if no MessageStatus if found with the given name.
*/
- public static @NotNull MessageStatus getByName(String n) {
+ public static MessageStatus getByName(String n) {
for (MessageStatus v : MessageStatus.values()) {
if (v.name().equalsIgnoreCase(n))
return v;
diff --git a/src/main/java/dk/erst/oxalis/as4/persistence/model/NemhandelLog.java b/src/main/java/dk/erst/oxalis/as4/persistence/model/NemhandelLog.java
index 5fbde49d6a1e22774b8ad46e6453ed16ddfc1e66..8ff65a431e30dbdd6549a56847b310548e4bc6e9 100644
--- a/src/main/java/dk/erst/oxalis/as4/persistence/model/NemhandelLog.java
+++ b/src/main/java/dk/erst/oxalis/as4/persistence/model/NemhandelLog.java
@@ -37,6 +37,7 @@ import java.util.Set;
*/
public class NemhandelLog {
+ static final String EVENT_TEXT = "DocumentLog event recorded with text: \"{}\"";
static final String ENTRY_TEXT = "Entry inserted into DocumentLog with id = [{}], and text: \"{}\"";
static final String MERGE_TEXT = "Entry updated in DocumentLog with id = [{}], and text \"{}\"";
@@ -46,8 +47,8 @@ public class NemhandelLog {
/**
* Creates a MessageLog and accompanying application log
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param em entity manager
* @param message {@link Message}
* @param errorCode error codes as string
@@ -62,8 +63,8 @@ public class NemhandelLog {
}
/**
* Creates a MessageLog and accompanying application log
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param em entity manager
* @param message {@link Message}
* @param errorCode error codes object
@@ -76,8 +77,8 @@ public class NemhandelLog {
}
/**
* Creates a MessageLog and accompanying application log
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param em entity manager
* @param message {@link Message}
* @param errorCode error codes object
@@ -88,8 +89,8 @@ public class NemhandelLog {
}
/**
* Creates a MessageLog and accompanying application log
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param em entity manager
* @param message {@link Message}
* @param errorCode {@link ErrorCodes}
@@ -114,8 +115,8 @@ public class NemhandelLog {
}
/**
* Creates a MessageLog and accompanying application log
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param em entity manager
* @param message {@link Message}
* @param errorCode error codes object
@@ -128,8 +129,8 @@ public class NemhandelLog {
}
/**
* Creates a MessageLog and accompanying application log
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param em entity manager
* @param message {@link Message}
* @param validationMessage {@link ValidationMessage}
@@ -142,10 +143,10 @@ public class NemhandelLog {
/**
* OBS:
* Should use {@link MessageLog#persist(EntityManager)} or {@link MessageLog#merge(EntityManager)}
- * when persisting or merging.
+ * when persisting or merging.
* Should only be used in async env. to avoid breaking the transactions, instead use {@link NemhandelLog#createMessageLog(EntityManager, Message, ValidationMessage)} instead
- * @See {@link MessageLog#persist(EntityManager)}
- * @See {@link MessageLog#merge(EntityManager)}
+ * @see MessageLog#persist(EntityManager)
+ * @see MessageLog#merge(EntityManager)
* @param msg {@link Message}
* @param validationMessage {@link ValidationMessage}
* @return {@link MessageLog} (not persisted)
@@ -172,7 +173,7 @@ public class NemhandelLog {
/**
* Helper class for adding parameters to the MDC for logging purposes.
- * MDC => the stored variables that Logback utilizes for parametrization of a loggable line
+ * MDC => the stored variables that Logback utilizes for parametrization of a loggable line
*/
public static class WithMDC {
private static final String UUID_KEY = "messageUuid";
diff --git a/src/main/java/dk/erst/oxalis/as4/providers/NemhandelProvider.java b/src/main/java/dk/erst/oxalis/as4/providers/NemhandelProvider.java
index 5b1eb67853b696c39be80df2723e00b8a4605819..2fe5500a932d73ad8cc68f1224cd93174909b8fc 100644
--- a/src/main/java/dk/erst/oxalis/as4/providers/NemhandelProvider.java
+++ b/src/main/java/dk/erst/oxalis/as4/providers/NemhandelProvider.java
@@ -4,7 +4,6 @@ import network.oxalis.vefa.peppol.common.model.DocumentTypeIdentifier;
import network.oxalis.vefa.peppol.common.model.ParticipantIdentifier;
import network.oxalis.vefa.peppol.common.util.ModelUtils;
import network.oxalis.vefa.peppol.lookup.api.MetadataProvider;
-import org.jetbrains.annotations.NotNull;
import java.net.URI;
import java.net.URISyntaxException;
@@ -78,7 +77,6 @@ public class NemhandelProvider implements MetadataProvider {
return resolvedServiceMetaDataURIList;
}
- @NotNull
private static URI getUri(URI location) {
if (!location.toString().endsWith("/")) {
try {
diff --git a/src/main/java/dk/erst/oxalis/as4/rest/ForwardedHeaderFilter.java b/src/main/java/dk/erst/oxalis/as4/rest/ForwardedHeaderFilter.java
index ed4e689b09c400766aa6d55f3702b6146ed12f55..f6a5ad7e18c5ddd5fa8f598bfe3ad0f88984d9e8 100644
--- a/src/main/java/dk/erst/oxalis/as4/rest/ForwardedHeaderFilter.java
+++ b/src/main/java/dk/erst/oxalis/as4/rest/ForwardedHeaderFilter.java
@@ -79,7 +79,7 @@ public class ForwardedHeaderFilter implements javax.servlet.Filter {
if (request.getHeader("X-Forwarded-Port") != null) {
forwardedPortHeader = request.getHeader("X-Forwarded-Port");
} else {
- if (this.host.equalsIgnoreCase("localhost")) {
+ if (this.host.equalsIgnoreCase("localhost") || this.host.equals("127.0.0.1")) {
forwardedPortHeader = String.valueOf(request.getServerPort());
} else {
forwardedPortHeader = String.valueOf(-1);
diff --git a/src/main/java/dk/erst/oxalis/as4/rest/openapi/CustomOpenApiServlet.java b/src/main/java/dk/erst/oxalis/as4/rest/openapi/CustomOpenApiServlet.java
index f5d7d78ccce8008d2e998e0094815ba6c5f0710f..6a455f94dd446d64c9ff9feb77e02f336832093a 100644
--- a/src/main/java/dk/erst/oxalis/as4/rest/openapi/CustomOpenApiServlet.java
+++ b/src/main/java/dk/erst/oxalis/as4/rest/openapi/CustomOpenApiServlet.java
@@ -3,13 +3,13 @@ package dk.erst.oxalis.as4.rest.openapi;
import com.google.inject.Inject;
import dk.erst.oxalis.as4.rest.resources.OutboxResource;
import dk.erst.oxalis.as4.util.BaseConfig;
+import dk.erst.oxalis.as4.validation.version.OxalisAS4Version;
import io.swagger.v3.jaxrs2.integration.JaxrsOpenApiContextBuilder;
import io.swagger.v3.jaxrs2.integration.ServletConfigContextUtils;
import io.swagger.v3.oas.integration.OpenApiConfigurationException;
import io.swagger.v3.oas.integration.SwaggerConfiguration;
import io.swagger.v3.oas.models.Components;
import io.swagger.v3.oas.models.OpenAPI;
-import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.info.License;
import io.swagger.v3.oas.models.security.SecurityRequirement;
@@ -58,6 +58,7 @@ public class CustomOpenApiServlet extends io.swagger.v3.jaxrs2.integration.OpenA
OpenAPI oas = new OpenAPI();
Info info = new Info()
.title("NemHandel eDelivery Reference Access Point API")
+ .version(OxalisAS4Version.getVersion())
.description("This is API allows a client to interact with the access point to both send and receive " +
"documents through the NemHandel eDelivery network. It uses simple HTTP basic authentication " +
"for security.\n\n" +
diff --git a/src/main/java/dk/erst/oxalis/as4/rest/resources/InboxResource.java b/src/main/java/dk/erst/oxalis/as4/rest/resources/InboxResource.java
index f95d3b54b373fe63412d820ea9ea87a9414ac6e8..f97ced48fd2fda09f5eea2ce40a57d2224fa9398 100644
--- a/src/main/java/dk/erst/oxalis/as4/rest/resources/InboxResource.java
+++ b/src/main/java/dk/erst/oxalis/as4/rest/resources/InboxResource.java
@@ -41,7 +41,8 @@ public class InboxResource {
description = "This is a paged API over inbox messages (i.e. messages received by this AP).",
tags = "Inbox",
responses = {
- @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = ListMessageResponse.class))),
+ @ApiResponse(responseCode = "200", description = "The list of inbox messages",
+ content = @Content(schema = @Schema(implementation = ListMessageResponse.class))),
@ApiResponse(responseCode = "401", description = "Unauthorized")
})
public Response getList(
@@ -86,7 +87,8 @@ public class InboxResource {
description = "Returns the status of the specified message",
tags = "Inbox",
responses = {
- @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = MessageLogResponse.class))),
+ @ApiResponse(responseCode = "200", description = "The status of the inbox message",
+ content = @Content(schema = @Schema(implementation = MessageModelResponse.class))),
@ApiResponse(responseCode = "401", description = "Unauthorized"),
@ApiResponse(responseCode = "404", description = "Message with the specified UUID does not exist " +
"(for security purposes this is also the result if specifying a message uuid tied to " +
@@ -107,7 +109,8 @@ public class InboxResource {
description = "Returns errors, warnings and general info, if any, related to the specified message",
tags = "Inbox",
responses = {
- @ApiResponse(responseCode = "200", content = @Content(schema = @Schema(implementation = MessageLogResponse.class))),
+ @ApiResponse(responseCode = "200", description = "The document log related to the inbox message",
+ content = @Content(schema = @Schema(implementation = MessageLogResponse.class))),
@ApiResponse(responseCode = "401", description = "Unauthorized"),
@ApiResponse(responseCode = "404", description = "Message with the specified UUID does not exist " +
"(for security purposes this is also the result if specifying a message uuid tied to " +
diff --git a/src/main/java/dk/erst/oxalis/as4/rest/resources/OutboxResource.java b/src/main/java/dk/erst/oxalis/as4/rest/resources/OutboxResource.java
index 72c36f4a4b72446137f5c369681de6092ae33b3f..08d9a9d3ff640c3b61a70cbc792cfd791c545ed4 100644
--- a/src/main/java/dk/erst/oxalis/as4/rest/resources/OutboxResource.java
+++ b/src/main/java/dk/erst/oxalis/as4/rest/resources/OutboxResource.java
@@ -5,14 +5,15 @@ import dk.erst.oxalis.as4.handlers.GetOutboxMessagesHandler;
import dk.erst.oxalis.as4.handlers.GetMessageLogHandler;
import dk.erst.oxalis.as4.handlers.OutboundException;
import dk.erst.oxalis.as4.handlers.SendSbdHandler;
+import dk.erst.oxalis.as4.handlers.dto.*;
+import dk.erst.oxalis.as4.persistence.model.Account;
+import dk.erst.oxalis.as4.persistence.model.MessageDirection;
import dk.erst.oxalis.as4.handlers.dto.MessageModel;
import dk.erst.oxalis.as4.handlers.dto.MessageModelResponse;
import dk.erst.oxalis.as4.handlers.dto.MessageResponse;
import dk.erst.oxalis.as4.handlers.dto.MessageLogResponse;
import dk.erst.oxalis.as4.handlers.dto.ListMessageResponse;
import dk.erst.oxalis.as4.handlers.dto.ValidationResult;
-import dk.erst.oxalis.as4.persistence.model.Account;
-import dk.erst.oxalis.as4.persistence.model.MessageDirection;
import dk.erst.oxalis.as4.persistence.model.NemhandelLog;
import dk.erst.oxalis.as4.rest.security.SecurityContextHolder;
import dk.erst.oxalis.as4.util.SBDMessageContext;
@@ -58,7 +59,7 @@ public class OutboxResource {
summary = "Sends the specified document through the AP. ",
description =
"If the AP is running in NemHandel eDelivery mode, then the document can be signed " +
- "via an ASiC-E container in the header including a transfer-delegation.\n\n" +
+ "via a Nemhandel e-Delivery document signature in the header.\n\n" +
"Example of NemHandel eDelivery compliant document:\n" +
"```" +
"\n" +
@@ -87,44 +88,53 @@ public class OutboxResource {
" PROCESSID\n" +
" urn:www.cenbii.eu:profile:bii04:ver2.0\n" +
"