private void diagnose(String baseError, Exception failure, Response r, int expected, int faultStatus) { if (failure != null) { System.err.println(baseError + failure.getClass().getSimpleName() + ":" + failure.getMessage()); } else if (r.getStatus() != expected) { System.err.println(baseError + getStatus(r)); if (r.getStatus() == faultStatus) { try { Fault fault = unmarshall(r, Fault.class); System.out.println("reason: " + fault.getReason()); System.out.println("detail: " + fault.getDetail()); } catch (Exception e) { // be tolerant of fault unmarshall failures } } } }
protected void display(Action action) throws Exception { System.out.print("[" + getLink(action.getLink(), "replay")); System.out.println("] " + action.getStatus()); if (Status.FAILED.equals(action.getStatus()) && action.isSetFault()) { System.out.println("[" + action.getFault().getReason() + "]"); if (detail) { System.out.println("[" + action.getFault().getDetail() + "]"); } } } }
/** * Validate presence of required parameters. * * @param reason the fault reason * @param detail the fault detail * @param model the incoming representation * @param frameOffset the stack frame offset of the public resource method * @param missingMembers the stack frame offset of the public resource method * @param required the required field names * @return error Response if appropriate */ private static Response assertRequired(String reason, String detail, Object model, int frameOffset, String... required) { List<String> missing = doAssertRequired(reason, detail, model, frameOffset, required); Response response = null; if (!missing.isEmpty()) { StackTraceElement[] trace = new Throwable().getStackTrace(); Fault fault = new Fault(); fault.setReason(reason); fault.setDetail(MessageFormat.format(detail, model.getClass().getSimpleName(), missing, trace[frameOffset + 1].getMethodName())); response = Response.status(INCOMPLETE_PARAMS_STATUS) .entity(fault) .build(); } return response; } /**
public void doAction(String verb, Action action, Link link, boolean detail) throws Exception { Response r = null; Exception failure = null; try { WebClient post = getClient(link.getHref()); r = post.path("/").post(action); } catch (Exception e) { failure = e; } int expectedStatus = action.isAsync() ? 202 : 200; if (failure != null || r.getStatus() != expectedStatus) { diagnose(verb + " failed with ", failure, r, expectedStatus); } else { Action reaction = unmarshall(r, Action.class); String monitor = Status.COMPLETE.equals(reaction.getStatus()) || Status.FAILED.equals(reaction.getStatus()) ? "" : ", monitor @ " + reaction.getHref(); System.out.println(verb + " " + reaction.getStatus() + monitor); if (Status.FAILED.equals(reaction.getStatus()) && reaction.isSetFault()) { System.out.println("[" + reaction.getFault().getReason() + "]"); if (detail) { System.out.println("[" + reaction.getFault().getDetail() + "]"); } } } }
/** * Impose immutability constraints. * * @param <T> representation type * @param strict array of strictly immutable field names * @param incoming incoming representation * @param existing existing representation * @param reason the fault reason * @param detail the fault detail * @return error Response if appropriate */ public static <T extends BaseResource> Response imposeConstraints(String[] strict, T incoming, T existing, String reason, String detail) { for (String s: strict) { String field = capitalize(s); if (isSet(incoming, field) && different(incoming, existing, field)) { Fault fault = new Fault(); fault.setReason(reason); fault.setDetail(MessageFormat.format(detail, s)); return Response.status(BROKEN_CONSTRAINT_STATUS) .entity(fault) .build(); } } return null; } }
public static Creation parse(PowerShellParser parser, String output) { Creation creation = new Creation(); for (PowerShellParser.Entity entity : parser.parse(output)) { if (isStatus(entity)) { String status = creation.getStatus()!=null ? creation.getStatus().getState() : null; creation.setStatus(StatusUtils.create(parseStatus(entity, StringUtils.isNullOrEmpty(status) ? CreationStatus.FAILED : CreationStatus.fromValue(status)))); if (CreationStatus.FAILED.value().equals(status)) { creation.setFault(new Fault()); creation.getFault().setReason(FAILURE_REASON); creation.getFault().setDetail(entity.isSet("exception") ? entity.get("exception") : entity.get("message")); break; } } } return creation; }