@Override public void storeRepresentation(Representation representation) throws ResourceException { if (delegate.acceptsUpload()) { upload(representation); } else { Object payloadInstance = delegate.getPayloadInstance(Method.PUT); if (payloadInstance == null) { payloadInstance = delegate.getPayloadInstance(); } Object payload = deserialize(payloadInstance); Object result = null; try { result = delegate.put(getContext(), getRequest(), getResponse(), payload); } catch (PlexusResourceException e) { // set the status getResponse().setStatus(e.getStatus()); // try to get the responseObject result = e.getResultObject(); } if (result != null) { getResponse().setEntity(doRepresent(result, representation, getResponse())); } } }
@Override public void acceptRepresentation(Representation representation) throws ResourceException { if (delegate.acceptsUpload()) { upload(representation); } else { Object payloadInstance = delegate.getPayloadInstance(Method.POST); if (payloadInstance == null) { payloadInstance = delegate.getPayloadInstance(); } Object payload = deserialize(payloadInstance); Object result = null; try { result = delegate.post(getContext(), getRequest(), getResponse(), payload); // This is a post, so set the status correctly // but only if the status was not changed to be something else, like a 202 if (getResponse().getStatus() == Status.SUCCESS_OK) { getResponse().setStatus(Status.SUCCESS_CREATED); } } catch (PlexusResourceException e) { // set the status getResponse().setStatus(e.getStatus()); // try to get the responseObject result = e.getResultObject(); } if (result != null) { getResponse().setEntity(doRepresent(result, representation, getResponse())); } } }
public RestletResource( Context context, Request request, Response response, PlexusResource delegate) { super(context, request, response); this.delegate = delegate; // set variants getVariants().clear(); getVariants().addAll(delegate.getVariants()); // mimic the constructor setAvailable(delegate.isAvailable()); setReadable(delegate.isReadable()); setModifiable(delegate.isModifiable()); setNegotiateContent(delegate.isNegotiateContent()); }
protected Object deserialize(Object root) throws ResourceException { Object result = null; if (root != null) { if (String.class.isAssignableFrom(root.getClass())) { try { result = getRequest().getEntity().getText(); } catch (IOException e) { throw new ResourceException( Status.SERVER_ERROR_INTERNAL, "Cannot get the representation!", e); } } XStreamRepresentation representation = createRepresentation(getRequest().getEntity()); if (representation != null) { try { result = representation.getPayload(root); } catch (XStreamException e) { logger.warn( "Invalid XML, unable to parse using XStream {}", (delegate == null ? "" : delegate.getClass()), e); throw new ResourceException( Status.CLIENT_ERROR_BAD_REQUEST, "Invalid XML, unable to parse using XStream", e); } } } return result; }
@Override public void removeRepresentations() throws ResourceException { delegate.delete(getContext(), getRequest(), getResponse()); // if we have an Entity set, then return a 200 (default) // if not return a 204 if (getResponse().getStatus() == Status.SUCCESS_OK && !getResponse().isEntityAvailable()) { getResponse().setStatus(Status.SUCCESS_NO_CONTENT); } }
public void upload(Representation representation) throws ResourceException { Object result = null; List<FileItem> files = null; try { RestletFileUpload uploadRequest = new RestletFileUpload(getFileItemFactory()); files = uploadRequest.parseRepresentation(representation); result = delegate.upload(getContext(), getRequest(), getResponse(), files); } catch (FileUploadException e) { // try to take simply the body as stream String name = getRequest().getResourceRef().getPath(); if (name.contains("/")) { name = name.substring(name.lastIndexOf("/") + 1, name.length()); } FileItem file = new FakeFileItem(name, representation); files = new ArrayList<FileItem>(); files.add(file); result = delegate.upload(getContext(), getRequest(), getResponse(), files); } // only if the status was not changed to be something else, like a 202 if (getResponse().getStatus() == Status.SUCCESS_OK) { getResponse().setStatus(Status.SUCCESS_CREATED); } if (result != null) { // TODO: representation cannot be returned as multipart! (representation above is possibly // multipart) getResponse().setEntity(doRepresent(result, getPreferredVariant(), getResponse())); } }
@Override public Representation represent(Variant variant) throws ResourceException { Object result; try { result = delegate.get(getContext(), getRequest(), getResponse(), variant); } catch (PlexusResourceException e) { // set the status getResponse().setStatus(e.getStatus()); // try to get the responseObject result = e.getResultObject(); } return (result != null) ? doRepresent(result, variant, getResponse()) : null; }