Android TCP server that maps data to an object and sends it to a service
When messageLength happens to be too large the code just loops around to the next messageLength = in.readShort();. However, the message body is still there, and readShort will pull the short from it. Chances are, it would be interpreted as a valid message length, and the stream gets irrecoverably out of sync.

You must discard the entire message by reading it.
DataInputStream.read() hey return less bytes than requested. Yet again, the stream gets out of sync. You must read the message body in the loop, until it is consumed entirely.
Closing the server socket every time a data socket fails seems drastic. There is nothing wrong with the server socket, and could be reused. It may need to be reopened only if accept fails.
I recommend to move openSocket call to the exception clause:

    while (True) {
        try {
            messageLength = in.readShort();
            ....
        } catch(Exception e) {
            closeSocket();
            Log.d(APPNAME, e.toString());
            openSocket();
        }


One nesting level down.
You may want to be more precise about exceptions. It is very well possible that the exception has nothing to do with the socket (e.g. may sendMessage throw? was it a keyboard interrupt? ObjectMapper throw? something else? It is impossible to tell from the given code). In such cases different recovery is necessary, but the socket should likely remain intact.