У меня возникли проблемы с выяснением, как это сделать, поэтому я решил опубликовать это здесь. Использовать механизм прокси-клиента RESTeasy на самом деле очень просто.
Как предлагает Чарльз Акалугву, этот подход позволяет вам создать единый интерфейс Java, который вы можете использовать как на стороне клиента, так и на стороне сервера, и в результате получается код на стороне клиента и на стороне сервера, который очевиден и прост в использовании. *
Сначала объявите интерфейс Java для службы. Это будет использоваться как на стороне клиента, так и на стороне сервера, и должно содержать все объявления JAX-RS:
@Path("/path/to/service")
public interface UploadService
{
@POST
@Consumes("text/plan")
public Response uploadFile(InputStream inputStream);
}
Далее напишите сервер, который реализует этот интерфейс. Это так просто, как кажется:
public class UploadServer extends Application implements UploadService
{
@Override
public Response uploadFile(InputStream inputStream)
{
// The inputStream contains the POST data
InputStream.read(...);
// Return the location of the new resource to the client:
Response.created(new URI(location)).build();
}
}
Чтобы ответить на вопрос «как использовать RESTEasy Client Framework для отправки данных в POST», все, что вам нужно сделать, это вызвать интерфейс службы со стороны клиента через прокси-сервер RESTeasy, и RESTeasy выполнит POST за вас. Чтобы создать клиентский прокси:
Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://path/to/service");
ResteasyWebTarget rtarget = (ResteasyWebTarget)target;
UploadService uploadService = rtarget.proxy(UploadService.class);
Чтобы отправить данные в сервис:
InputStream inputStream = new FileInputStream("/tmp/myfile");
uploadService.uploadFile(inputStream);
Естественно, если вы пишете в существующую службу REST, вы можете решить проблему, написав Java-интерфейс только для клиента.