/** * Parse the payloads in the given DistributionEnvelope and its manifest * * @returns Array of Payload instances */ public Payload[] getPayloads(DistributionEnvelope d) { StringWriter extractBuffer = new StringWriter(); XmlTextWriter extractWriter = new XmlTextWriter(extractBuffer); StringReader sr = new StringReader(d.getEnvelope()); XmlTextReader rdr = new XmlTextReader(sr); payloadExtractor.Transform(rdr, extractWriter); return splitPayloads(extractBuffer.GetStringBuilder().ToString()); }
/** * Implementation of the interface' "handle()" method. Determines the * file name and tries to write it. Note that this doesn't return any * ITK response because formally such a response requires a router. Providing * an ITK router here would put a dependency on the ITK code, in the TMS * adapter. An implementation that does do ITK responses will be found in * the router package. */ public void handle(DistributionEnvelope d) { StringBuilder sb = new StringBuilder(spoolDirectory); sb.Append("\\"); sb.Append(getLastServiceURIElement(d.getService())); sb.Append("_"); sb.Append(getFileSafeMessageID(d.getTrackingId())); sb.Append(".message"); string filename = sb.ToString(); try { using (FileStream fs = new FileStream(filename, FileMode.Create)) { using (StreamWriter sw = new StreamWriter(fs)) { d.parsePayloads(); sw.Write(d.getEnvelope()); sw.Flush(); sw.Close(); } } } catch (Exception e) { EventLog ev = new EventLog("Application"); ev.Source = LOGSOURCE; StringBuilder sbe = new StringBuilder("Failed to save DistributionEnvelope "); sbe.Append(d.getTrackingId()); sbe.Append(" service "); sbe.Append(d.getService()); sbe.Append(" from "); sbe.Append(d.getSender().getUri()); sbe.Append(". Reason: "); sbe.Append(e.ToString()); ev.WriteEntry(sbe.ToString(), EventLogEntryType.Error); } }