Interface with LinkOS-enabled Zebra printers via your local Tomcat server.
We are attempting to connect to Zebra printers using a Tomcat server. Features at present include:
- Query status: Query of printer status using SDK method
getPrinterStatus()
and supplied TCP/IP addresses. - Send alert to HTTP webhook Servlet POST endpoint to allow printer to send alerts using SDK method
configureAlerts()
. - TODO Multithread / promise queries for the above.
By entering http://localhost:port/servlet/get?ip=10.10.0.1,10.10.0.2
you should be returned with a JSON object with the following information:
[
{
"ipAddress": "10.10.0.1",
"hasError": true,
"message": "Cannot Print because the printer is paused."
},
{
"ipAddress": "10.10.0.2",
"hasError": false,
"message": "Ready To Print."
}
]
-
The query string is parsed using delimiter
,
. Thereafter each IP address string is passed into an opened Zebraconnection
and iterated through to obtain each print status. -
The JSON object is built by GSON factory taking into account the object structure of
ZebraPrinterStatus
public class ZebraPrinterStatus {
private String ipAddress;
private boolean hasError;
private String message;
...
}
- The messages can be configured according to the real statuses returned in
PrinterStatusServlet.java
.
if (printerStatus.isReadyToPrint) {
message = "Ready To Print";
hasError = false;
} else if (printerStatus.isPaused) {
message = "Cannot Print because the printer is paused.";
} ...
Opening POST endpoint in servlet method doPost()
will allow it to handle incoming POST requests from the Zebra printer. Data is sent over as a HTTP multipart-form
POST /http_post/alert.php HTTP/1.1
Host: 10.3.4.58
Accept: */*
Connection: close
Content-Length: 281
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------
----------350c75835f46
------------------------------350c75835f46
Content-Disposition: form-data; name="alertMsg"
ALERT%3A%20PRINTER%20PAUSED
------------------------------350c75835f46
Content-Disposition: form-data; name="uniqueId"
XXQLJ120900310
------------------------------350c75835f46--
This is translated into a JSON object with structure
{
"ipAddress": "1J384DHF843",
"hasError": true,
"message": "ALERT: PRINTER PAUSED"
}
and sent to the webhook. The constant parameter WEBHOOK_URL
in PrinterStatusServlet.java
has been omitted, please furnish your own.
- Note that the IP address of the printer cannot be sent over in this iteration, since the
POST
request does not make this available. - You could configure the 8th parameter in
PrinterAlert
to customize this message. Refer to Zebra Techdocs.
- Install the following
tomcat-8.5.23
gson-2.1
- Ensure you have opened up a
GET
servlet endpoint athttp://localhost:8080/servlet/get
and configured the necessary files. You can refer to several tutorials online to see how this is done. - Do the same for the
POST
endpoint. - Download the LinkOS SDK from Zebra, or import the file that is in
lib/ZSDK_API.jar
. Remember that you would need to include this file in your compile path. - To configure printer alerts, open a servlet that uses SDK method
configureAlerts()
. I have implemented a simple on/offGET
switch at endpointhttp://localhost:8080/servlet/config
.
Use the following script or code to compile the relevant class files.
javac -classpath .:/usr/local/Cellar/tomcat/8.5.23/libexec/lib/*:/usr/local/Cellar/tomcat/8.5.23/libexec/webapps/workato/WEB-INF/lib/ZSDK_API.jar *.java
Or you could run ./compile.sh
.