Я бы предложил писать бины вручную, и, если нужно, аннотировать только аннотациями JAXB. Для большинства аксессоров / мутаторов (геттеров / сеттеров) вам не нужно; по умолчанию учитываются все средства доступа и поля общедоступных компонентов, имя получено с использованием соглашения компонентов, а по умолчанию используются элементы вместо атрибутов (поэтому атрибуты необходимо аннотировать).
В качестве альтернативы вы можете, конечно, написать схему вручную, сгенерировать bean-компоненты с использованием JAXB, если вам очень нравится W3C Schema. И просто используйте полученный код, а не схему, для привязки данных.
Что касается POJO: это может быть очень просто. Что-то вроде:
@XmlRootElement("Response")
class Response {
public int responseCode;
public String responseMessage;
public String token; // or perhaps byte[] works for automated base64?
}
и аналогично для других. Или используйте getters / setters, если они вам нравятся и не возражаете против многословия. Это просто контейнеры данных, не нужно слишком увлекаться.
И если вам необходимо автоматически определять тип по содержимому, рассмотрите возможность использования синтаксического анализатора Stax, чтобы увидеть, что такое корневой элемент, а затем выполните привязку с помощью JAXB Unmarshaller, передав XMLStreamReader, который указывает на этот корневой элемент. Таким образом, вы можете передать объект другого типа для привязки.
И наконец: отправка / получение запросов: старый добрый HttpURLConnection работает нормально для запросов GET и POST (конструкция, скажем, с использованием URL.openConnection ()). Джакарта HttpClient имеет больше возможностей, если это необходимо. Поэтому часто вам не нужен отдельный REST-клиент - они могут пригодиться, но обычно основываются на простых http-клиентах.