ParsedItemID pid = ParsedItemID.Parse(request.getAttribute("id"));
ParsedItemID pid = ParsedItemID.parse(request.getAttribute("id"));
    public Element handle(Element request, Map context) throws ServiceException {        long startTime = sWatch.start();        try {            ZimbraContext lc = getZimbraContext(context);            Account acct = getRequestedAccount(lc);            Mailbox mbox = getRequestedMailbox(lc);            OperationContext octxt = lc.getOperationContext();            ParsedItemID pid = ParsedItemID.Parse(request.getAttribute("id"));            int compNum = (int)request.getAttributeLong("comp", 0);                        sLog.info("<CancelAppointmentException id="+pid+" comp="+compNum+">");                        synchronized(mbox) {                Appointment appt = mbox.getAppointmentById(pid.getItemIDInt());                 Invite inv = appt.getInvite(pid.getSubIdInt(), compNum);                                Element recurElt = request.getOptionalElement("inst");                if (recurElt != null) {                    if (inv.hasRecurId()) {                        throw MailServiceException.CANNOT_CANCEL_INSTANCE_OF_EXCEPTION(" for CancelAppointmentRequest("+pid+","+compNum+")");                    }                    cancelInstance(octxt, request, acct, mbox, inv, recurElt);                } else {                    cancelInvite(octxt, request, acct, mbox, inv);                }            } // synchronized on mailbox                                    Element response = lc.createElement(MailService.CANCEL_APPOINTMENT_EXCEPTION_RESPONSE);            return response;        } finally {            sWatch.stop(startTime);        }            }        