Well, you need to get the error from the server in order to understand what isn't working. Call the .getError() on the challenge is the challenge is what's invalid. See the acme4j documentation on troubleshooting; you need to make sure that you're checking the status from the server and getting any errors so that you can find out what's wrong.
Just a thought: Remember to invoke fetch() (or update() before acme4j 3.2.0) before reading the status again, like described in the code example. Otherwise you will keep reading the locally cached state, which won't change by itself.