Yep that was it. I have created
https://issues.apache.org/jira/browse/FLINK-11853 so that it is easier for
others to work around if they have restrictions on the HTTP client library
choice

On Thu, 7 Mar 2019 at 11:47, Stephen Connolly <
stephen.alan.conno...@gmail.com> wrote:

>
>
> On Thu, 7 Mar 2019 at 11:33, Chesnay Schepler <ches...@apache.org> wrote:
>
>> I've heard of cases where client libraries are automatically changing
>> the HTTP method when provided with a body.
>>
>
> Hmmm thanks for that... I'll dig into it
>
>
>>
>> To figure out what exactly is received by Flink, enable TRACE logging,
>> try again and look for logging messages from
>> "org.apache.flink.runtime.rest.handler.router.RouterHandler"
>>
>> On 07.03.2019 11:25, Stephen Connolly wrote:
>> > In the documentation for the /jars/:jarid/plan endpoint
>> >
>> https://ci.apache.org/projects/flink/flink-docs-stable/monitoring/rest_api.html#jars-jarid-plan
>> >
>> > It says:
>> >
>> > > Program arguments can be passed both via the JSON request
>> > (recommended) or query parameters.
>> >
>> > Has anyone got sample code that sends the JSON request?
>> >
>> > I have got the end-point working with query parameters, but I need to
>> > support more than 2083 GET URL length limit.
>> >
>> > When I have my code like this:
>> >
>> >         UriTemplate template = UriTemplate.fromTemplate(apiUrl)
>> >                 .literal("/v1/jars")
>> >                 .path("jarId")
>> >                 .literal("/plan")
>> >                 .query("entryClass", "programArg*", "parallelism")
>> >                 .build()
>> >                 .set("jarId", jarId);
>> >         if (requestBody.getEntryClass() != null) {
>> >             // TODO find a way to have this as entry-class even if the
>> > spec says no
>> >             template.set("entryClass", requestBody.getEntryClass());
>> >         }
>> >         if (!requestBody.getProgramArgs().isEmpty()) {
>> >             template.set("programArg",
>> > requestBody.getProgramArgs().toArray(new String[0]));
>> >         }
>> >         if (requestBody.getParallelism() > 0) {
>> >             template.set("parallelism", requestBody.getParallelism());
>> >         }
>> >         return get(
>> >                 template,
>> >                 null,
>> >                 null,
>> >                 JsonNode.class,
>> >                 MEDIA_TYPE_JSON
>> >         );
>> >
>> > Then I get the plan returned.
>> >
>> > When I change to this
>> >
>> >         UriTemplate template = UriTemplate.fromTemplate(apiUrl)
>> >                 .literal("/v1/jars")
>> >                 .path("jarId")
>> >                 .literal("/plan")
>> >                 .build()
>> >                 .set("jarId", jarId);
>> >         return get(
>> >                 template,
>> >                 requestBody,
>> >                 MEDIA_TYPE_JSON,
>> >                 JsonNode.class,
>> >                 MEDIA_TYPE_JSON
>> >         );
>> >
>> > I get a 404.
>> >
>> > Basically, adding the request body makes the URL go 404... For fun I
>> > tried having both query parameters and request body and that gets a
>> > 404 also.
>> >
>> > So does anyone have a working example using the JSON request body (and
>> > let's not get started on how a request body is a really bad idea for
>> > GET requests)
>>
>>
>>

Reply via email to