diff --git a/src/main/java/envoy/client/EnvoyClient.java b/src/main/java/envoy/client/EnvoyClient.java
index c832ee0..38b7248 100644
--- a/src/main/java/envoy/client/EnvoyClient.java
+++ b/src/main/java/envoy/client/EnvoyClient.java
@@ -1,113 +1,123 @@
-package envoy.client;
-
-import java.io.IOException;
-import java.time.Instant;
-import java.util.Properties;
-
-import javax.ws.rs.client.Client;
-import javax.ws.rs.client.ClientBuilder;
-import javax.ws.rs.client.Entity;
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
-import javax.xml.bind.JAXBContext;
-import javax.xml.bind.JAXBException;
-import javax.xml.bind.Marshaller;
-import javax.xml.datatype.DatatypeConfigurationException;
-import javax.xml.datatype.DatatypeFactory;
-
-import envoy.schema.Message;
-import envoy.schema.ObjectFactory;
-
-/**
- * Project: envoy-client
- * File: EnvoyClient.java
- * Created: 28 Sep 2019
- * Author: Kai S. K. Engelbart & Maximilian Käfer
- */
-
-public class EnvoyClient {
-
- private DatatypeFactory datatypeFactory;
-
- private static final Properties serverProps = new Properties();
-
- static {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- try {
- serverProps.load(loader.getResourceAsStream("server.properties"));
-
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
-
- public EnvoyClient() {
- try {
- datatypeFactory = DatatypeFactory.newInstance();
- } catch (DatatypeConfigurationException e) {
- e.printStackTrace();
- }
- }
-
- /**
- * Sends a message with text content to the server.
- * Because sending a request is a blocking operation, it is executed
- * asynchronously.
- *
- * @param sender Name of the sender
- * @param recipient Name of the recipient
- * @param textContent Content (text) of the message
- */
- public void sendMessage(Message message) {
- new Thread(() -> {
- // Print message XML to console
- JAXBContext jc;
- try {
- jc = JAXBContext.newInstance("envoy.schema");
- Marshaller m = jc.createMarshaller();
- m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
- m.marshal(message, System.out);
- } catch (JAXBException e) {
- e.printStackTrace();
- }
-
- // Send message
- String url = String.format("%s:%s/envoy-server/rest/message/send",
- serverProps.getProperty("server"),
- serverProps.getProperty("port"));
- Client client = ClientBuilder.newClient();
- WebTarget target = client.target(url);
- Response response = target.request().post(Entity.entity(message, "application/xml"));
- System.out.println("Response code: " + response.getStatus());
- response.close();
- client.close();
- }).start();
- }
-
- /**
- * Creates a {@link Message} object serializable to XML.
- *
- * @param senderID The ID of the sender
- * @param recipientID The ID of the recipient
- * @param textContent The content (text) of the message
- * @return Prepared {@link Message} object
- */
- public Message createMessage(String senderID, String recipientID, String textContent) {
- ObjectFactory factory = new ObjectFactory();
- Message.MetaData metaData = factory.createMessageMetaData();
- metaData.setSender(senderID);
- metaData.setRecipient(recipientID);
- metaData.setState(false);
- metaData.setDate(datatypeFactory.newXMLGregorianCalendar(Instant.now().toString()));
-
- Message.Content content = factory.createMessageContent();
- content.setType("text");
- content.setText(textContent);
-
- Message message = factory.createMessage();
- message.setMetaData(metaData);
- message.getContent().add(content);
-
- return message;
- }
+package envoy.client;
+
+import java.io.IOException;
+import java.time.Instant;
+import java.util.Properties;
+
+import javax.ws.rs.client.Client;
+import javax.ws.rs.client.ClientBuilder;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBException;
+import javax.xml.bind.Marshaller;
+import javax.xml.datatype.DatatypeConfigurationException;
+import javax.xml.datatype.DatatypeFactory;
+
+import envoy.schema.Message;
+import envoy.schema.Messages;
+import envoy.schema.ObjectFactory;
+
+/**
+ * Project: envoy-client
+ * File: EnvoyClient.java
+ * Created: 28 Sep 2019
+ * Author: Kai S. K. Engelbart & Maximilian Käfer
+ */
+
+public class EnvoyClient {
+
+ private ObjectFactory objectFactory = new ObjectFactory();
+ private DatatypeFactory datatypeFactory;
+
+ private static final Properties serverProps = new Properties();
+
+ static {
+ ClassLoader loader = Thread.currentThread().getContextClassLoader();
+ try {
+ serverProps.load(loader.getResourceAsStream("server.properties"));
+
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+
+ public EnvoyClient() {
+ try {
+ datatypeFactory = DatatypeFactory.newInstance();
+ } catch (DatatypeConfigurationException e) {
+ e.printStackTrace();
+ }
+ }
+
+ /**
+ * Sends a message with text content to the server.
+ * Because sending a request is a blocking operation, it is executed
+ * asynchronously.
+ *
+ * @param sender Name of the sender
+ * @param recipient Name of the recipient
+ * @param textContent Content (text) of the message
+ */
+ public void sendMessage(Message message) {
+ new Thread(() -> {
+ // Wrap single message into messages list
+ Messages messages = wrapMessage(message);
+
+ // Print message XML to console
+ JAXBContext jc;
+ try {
+ jc = JAXBContext.newInstance("envoy.schema");
+ Marshaller m = jc.createMarshaller();
+ m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
+ m.marshal(messages, System.out);
+ } catch (JAXBException e) {
+ e.printStackTrace();
+ }
+
+ // Send message
+ String url = String.format("%s:%s/envoy-server/rest/message/send",
+ serverProps.getProperty("server"),
+ serverProps.getProperty("port"));
+ Client client = ClientBuilder.newClient();
+ WebTarget target = client.target(url);
+ Response response = target.request().post(Entity.entity(message, "application/xml"));
+ System.out.println("Response code: " + response.getStatus());
+ response.close();
+ client.close();
+ }).start();
+ }
+
+ /**
+ * Creates a {@link Message} object serializable to XML.
+ *
+ * @param senderID The ID of the sender
+ * @param recipientID The ID of the recipient
+ * @param textContent The content (text) of the message
+ * @return Prepared {@link Message} object
+ */
+ public Message createMessage(String senderID, String recipientID, String textContent) {
+ Message.MetaData metaData = objectFactory.createMessageMetaData();
+ metaData.setSender(senderID);
+ metaData.setRecipient(recipientID);
+ metaData.setState(false);
+ metaData.setDate(datatypeFactory.newXMLGregorianCalendar(Instant.now().toString()));
+
+ Message.Content content = objectFactory.createMessageContent();
+ content.setType("text");
+ content.setText(textContent);
+
+ Message message = objectFactory.createMessage();
+ message.setMetaData(metaData);
+ message.getContent().add(content);
+
+ return message;
+ }
+
+ public Messages wrapMessage(Message... messages) {
+ Messages wrapper = objectFactory.createMessages();
+ wrapper.getMessage().addAll(Arrays.asList(messages));
+ return wrapper;
+ }
}
\ No newline at end of file