use of org.glassfish.jersey.media.multipart.MultiPart in project dropwizard by dropwizard.
the class FormsAppTest method canSubmitFormAndReceiveResponse.
@Test
void canSubmitFormAndReceiveResponse() throws IOException {
config.setChunkedEncodingEnabled(false);
final Client client = new JerseyClientBuilder(RULE.getEnvironment()).using(config).build("test client 1");
try (final FormDataMultiPart fdmp = new FormDataMultiPart()) {
final MultiPart mp = fdmp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("file").fileName("fileName").build(), "CONTENT"));
final String url = String.format("http://localhost:%d/uploadFile", RULE.getLocalPort());
final String response = client.target(url).register(MultiPartFeature.class).request().post(Entity.entity(mp, mp.getMediaType()), String.class);
assertThat(response).isEqualTo("fileName:\nCONTENT");
}
}
use of org.glassfish.jersey.media.multipart.MultiPart in project dropwizard by dropwizard.
the class FormsAppTest method failOnNoChunkedEncoding.
/**
* Test confirms that chunked encoding has to be disabled in order for
* sending forms to work. Maybe someday this requirement will be relaxed and
* this test can be updated for the new behavior. For more info, see issues
* #1013 and #1094
*/
@Test
void failOnNoChunkedEncoding() throws IOException {
final Client client = new JerseyClientBuilder(RULE.getEnvironment()).using(config).build("test client 2");
try (final FormDataMultiPart fdmp = new FormDataMultiPart()) {
final MultiPart mp = fdmp.bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("file").fileName("fileName").build(), "CONTENT"));
final String url = String.format("http://localhost:%d/uploadFile", RULE.getLocalPort());
final Response response = client.target(url).register(MultiPartFeature.class).request().post(Entity.entity(mp, mp.getMediaType()));
assertThat(response.getStatus()).isEqualTo(400);
assertThat(response.readEntity(ErrorMessage.class)).isEqualTo(new ErrorMessage(400, "HTTP 400 Bad Request"));
}
}
use of org.glassfish.jersey.media.multipart.MultiPart in project jersey by jersey.
the class MultiPartReaderClientSide method readMultiPart.
protected MultiPart readMultiPart(final Class<MultiPart> type, final Type genericType, final Annotation[] annotations, MediaType mediaType, final MultivaluedMap<String, String> headers, final InputStream stream) throws IOException, MIMEParsingException {
mediaType = unquoteMediaTypeParameters(mediaType, "boundary");
final MIMEMessage mimeMessage = new MIMEMessage(stream, mediaType.getParameters().get("boundary"), mimeConfig);
final boolean formData = MediaTypes.typeEqual(mediaType, MediaType.MULTIPART_FORM_DATA_TYPE);
final MultiPart multiPart = formData ? new FormDataMultiPart() : new MultiPart();
final MessageBodyWorkers workers = messageBodyWorkers.get();
multiPart.setMessageBodyWorkers(workers);
final MultivaluedMap<String, String> multiPartHeaders = multiPart.getHeaders();
for (final Map.Entry<String, List<String>> entry : headers.entrySet()) {
final List<String> values = entry.getValue();
for (final String value : values) {
multiPartHeaders.add(entry.getKey(), value);
}
}
final boolean fileNameFix;
if (!formData) {
multiPart.setMediaType(mediaType);
fileNameFix = false;
} else {
// see if the User-Agent header corresponds to some version of MS Internet Explorer
// if so, need to set fileNameFix to true to handle issue http://java.net/jira/browse/JERSEY-759
final String userAgent = headers.getFirst(HttpHeaders.USER_AGENT);
fileNameFix = userAgent != null && userAgent.contains(" MSIE ");
}
for (final MIMEPart mimePart : getMimeParts(mimeMessage)) {
final BodyPart bodyPart = formData ? new FormDataBodyPart(fileNameFix) : new BodyPart();
// Configure providers.
bodyPart.setMessageBodyWorkers(workers);
// Copy headers.
for (final Header header : mimePart.getAllHeaders()) {
bodyPart.getHeaders().add(header.getName(), header.getValue());
}
try {
final String contentType = bodyPart.getHeaders().getFirst("Content-Type");
if (contentType != null) {
bodyPart.setMediaType(MediaType.valueOf(contentType));
}
bodyPart.getContentDisposition();
} catch (final IllegalArgumentException ex) {
throw new BadRequestException(ex);
}
// Copy data into a BodyPartEntity structure.
bodyPart.setEntity(new BodyPartEntity(mimePart));
// Add this BodyPart to our MultiPart.
multiPart.getBodyParts().add(bodyPart);
}
return multiPart;
}
use of org.glassfish.jersey.media.multipart.MultiPart in project jersey by jersey.
the class Jersey2421Test method testMultiPartFeatureOnClient.
/**
* Test that multipart feature works on the client-side - custom connector checks presence of {@code boundary} parameter in
* the {@code Content-Type} header (the header is added to the request in MBW).
*/
@Test
public void testMultiPartFeatureOnClient() throws Exception {
final Client client = ClientBuilder.newClient(new ClientConfig().connectorProvider(new TestConnector())).register(MultiPartFeature.class);
final MultiPart entity = new FormDataMultiPart().bodyPart(new FormDataBodyPart(FormDataContentDisposition.name("part").build(), "CONTENT"));
final Response response = client.target("http://localhost").request().post(Entity.entity(entity, MediaType.MULTIPART_FORM_DATA_TYPE));
assertThat(response.getStatus(), is(200));
}
use of org.glassfish.jersey.media.multipart.MultiPart in project jersey by jersey.
the class FormDataMultiPartReaderWriterTest method testProducesFormDataUsingMultiPart.
// Test a response of type "multipart/form-data". The example comes from
// Section 6 of RFC 1867.
@Test
public void testProducesFormDataUsingMultiPart() {
final Invocation.Builder request = target().path("ProducesFormDataUsingMultiPart").request("multipart/form-data");
try {
final MultiPart result = request.get(MultiPart.class);
checkMediaType(new MediaType("multipart", "form-data"), result.getMediaType());
assertEquals(2, result.getBodyParts().size());
final BodyPart part1 = result.getBodyParts().get(0);
checkMediaType(new MediaType("text", "plain"), part1.getMediaType());
checkEntity("Joe Blow\r\n", (BodyPartEntity) part1.getEntity());
final String value1 = part1.getHeaders().getFirst("Content-Disposition");
assertEquals("form-data; name=\"field1\"", value1);
final BodyPart part2 = result.getBodyParts().get(1);
checkMediaType(new MediaType("text", "plain"), part2.getMediaType());
checkEntity("... contents of file1.txt ...\r\n", (BodyPartEntity) part2.getEntity());
final String value2 = part2.getHeaders().getFirst("Content-Disposition");
assertEquals("form-data; name=\"pics\"; filename=\"file1.txt\"", value2);
result.getParameterizedHeaders();
result.cleanup();
} catch (final IOException | ParseException e) {
e.printStackTrace(System.out);
fail("Caught exception: " + e);
}
}
Aggregations