package org.jboss.resteasy.test.form.resteasy1405; import java.io.Closeable; import java.io.IOException; import java.io.InputStream; import javax.ws.rs.Consumes; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import javax.xml.transform.stream.StreamSource; import org.jboss.logging.Logger; import org.jboss.resteasy.annotations.providers.multipart.MultipartForm; import org.jboss.resteasy.plugins.providers.multipart.InputPart; import org.jboss.resteasy.test.client.resource.LinkHeaderService; @Path("/") public class MyResource { private static Logger log = org.jboss.logging.Logger.getLogger(MyResource.class); @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_PLAIN) @Path("/field") @POST public Response byField(@MultipartForm ByFieldForm form) { log.info("Entered byField"); try { log.info("Name: " + form.getName()); InputData input = parse(form.getData()); log.info("Items: " + input.getItems() + " (" + form.getData().getMediaType() + ')'); OutputData output = new OutputData().withName(form.getName()).withContentType(form.getData().getMediaType()) .withItems(input.getItems()); return Response.ok().entity(output).build(); } catch (IOException | JAXBException e) { return Response.serverError().entity(e.getMessage()).build(); } } @Consumes(MediaType.MULTIPART_FORM_DATA) @Produces(MediaType.TEXT_PLAIN) @Path("/setter") @POST public Response bySetter(@MultipartForm BySetterForm form) { log.info("Entered bySetter"); try { log.info("Name: " + form.getName()); InputData input = parse(form.getData()); log.info("Items: " + input.getItems() + " (" + form.getData().getMediaType() + ')'); OutputData output = new OutputData().withName(form.getName()).withContentType(form.getData().getMediaType()) .withItems(input.getItems()); return Response.ok().entity(output).build(); } catch (IOException | JAXBException e) { return Response.serverError().entity(e.getMessage()).build(); } } private InputData parse(InputPart part) throws JAXBException, IOException { JAXBContext jaxbc = JAXBContext.newInstance(InputData.class); Unmarshaller unmarshaller = jaxbc.createUnmarshaller(); try (InputStream stream = part.getBody(InputStream.class, null)) { StreamSource source = new StreamSource(stream); return unmarshaller.unmarshal(source, InputData.class).getValue(); } finally { if (unmarshaller instanceof Closeable) { ((Closeable) unmarshaller).close(); } } } }