diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala index 122d752547865a90372feefa62f9d232c5a9344d..7f12fc689f525fadfe1a497430d9086634b402f8 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/domain/Recording.scala @@ -203,7 +203,8 @@ case class RecMeta(id: String, meetingId: String, internalMeetingId: Option[ Str val buffer = new scala.xml.NodeBuffer map.foreach {case (key, value) => - val m = "<" + key + ">" + value + "</" + key + ">" + // Need to escape value otherwise loadString would choke. + val m = "<" + key + ">" + xml.Utility.escape(value) + "</" + key + ">" buffer += scala.xml.XML.loadString(m) } <metadata>{buffer}</metadata> @@ -281,7 +282,8 @@ case class RecMeta(id: String, meetingId: String, internalMeetingId: Option[ Str val buffer = new scala.xml.NodeBuffer map.foreach {case (key, value) => - val m = "<" + key + ">" + value + "</" + key + ">" + // Need to escape value otherwise loadString would choke. + val m = "<" + key + ">" + xml.Utility.escape(value) + "</" + key + ">" buffer += scala.xml.XML.loadString(m) } <meta>{buffer}</meta> diff --git a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala index dda58baeb4b10e4c3fed3d9a9c7779e120a96493..9773d95faf4dfda4b620c58d7a3d577bb40420aa 100755 --- a/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala +++ b/bbb-common-web/src/main/scala/org/bigbluebutton/api2/util/RecMetaXmlHelper.scala @@ -39,6 +39,10 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper { try { writer.write("<?xml version='1.0' encoding='" + Encoding + "'?>\n") writer.write(pp.format(metadata.getRecMeta.toMetadataXml())) + } catch { + case ex: Exception => + logger.info("Exception while saving {}", xml.getAbsolutePath) + logger.info("Exception details: {}", ex.fillInStackTrace()) } finally { writer.close() } @@ -47,25 +51,45 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper { logger.info("Failed to save metadataxml {}", xml.getAbsolutePath) case ex: Exception => logger.info("Exception while saving {}", xml.getAbsolutePath) - logger.info("Exception details: {}", ex.getMessage) + logger.info("Exception details: {}", ex.fillInStackTrace()) } } def getRecordingMetadata(xml: File): Option[RecordingMetadata] = { loadMetadataXml(xml.getAbsolutePath) match { case Some(mXML) => - RecMeta.getRecMeta(mXML) match { - case Some(rm) => - val rec = new RecordingMetadata() - rec.setRecMeta(rm) - Some(rec) - case None => None + try { + RecMeta.getRecMeta(mXML) match { + case Some(rm) => + val rec = new RecordingMetadata() + rec.setRecMeta(rm) + Some(rec) + case None => None + } + } catch { + case ex: Exception => + logger.info("Exception while saving {}", xml.getAbsolutePath) + logger.info("Exception details: {}", ex.fillInStackTrace()) + None } + case None => None } } def getRecordings2x(recs: util.ArrayList[RecordingMetadata]): String = { + + def toXml(rec: RecMeta): Option[Elem] = { + try { + Some(rec.toXml()) + } catch { + case ex: Exception => + logger.info("Exception while building xml for recording {}", rec.id) + logger.info("Exception details: {}", ex.fillInStackTrace()) + None + } + } + val recMeta = recs.asScala map(r => r.getRecMeta) if (recMeta.isEmpty) { val resp = @@ -80,7 +104,9 @@ class RecMetaXmlHelper extends RecordingServiceGW with LogHelper { p.format(<recording>{resp}</recording>) } else { val buffer = new scala.xml.NodeBuffer - recMeta foreach(rm => buffer += rm.toXml()) + recMeta foreach { rm => + toXml(rm) foreach (r => buffer += r) + } val resp = <response> <returncode>SUCCESS</returncode>