Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.72 KB | None | 0 0
  1. package ee.cone.core.c4converter.base
  2.  
  3. import java.nio.file.Path
  4.  
  5. import ee.cone.base.util.NeedSome
  6. import ee.cone.core.c4base.HTDocsPathResolver
  7. import ee.cone.core.c4converter.xml.XMLParser
  8. import ee.cone.core.c4converter.xml.XMLParserTypes.{MessageBody, MessageType}
  9. import javax.xml.transform.stream.StreamSource
  10. import javax.xml.validation.{Schema, SchemaFactory}
  11. import org.xml.sax.SAXParseException
  12.  
  13. import scala.util.{Failure, Success, Try}
  14. import scala.xml.factory.XMLLoader
  15. import scala.xml.parsing.ConsoleErrorHandler
  16. import scala.xml.{Elem, NamespaceBinding, TopScope}
  17.  
  18. class TKX2XMLParserImpl(
  19.   htdocs: HTDocsPathResolver
  20. ) extends XMLParser[Message] {
  21.   val reader: XMLLoader[Elem] = {
  22.     val schemaLang: String = javax.xml.XMLConstants.W3C_XML_SCHEMA_NS_URI
  23.     val xsdFile: Path = htdocs(ee.cone.core.c4converter.base.PublicPath.`/schema.xsd`)
  24.     val readOnly = java.nio.file.StandardOpenOption.READ
  25.     val inputStream = java.nio.file.Files.newInputStream(xsdFile, readOnly)
  26.     val xsdStream: StreamSource = new javax.xml.transform.stream.StreamSource(inputStream)
  27.     val testJoiner = SchemaFactory.newInstance(schemaLang)
  28.  
  29.     val schema: Schema = testJoiner.newSchema(xsdStream)
  30.  
  31.     trait myErrorHandler extends ConsoleErrorHandler {
  32.       override def error(ex: SAXParseException): Unit = {
  33.         super.error(ex)
  34.         throw ex
  35.       }
  36.     }
  37.     val factory = javax.xml.parsers.SAXParserFactory.newInstance()
  38.     factory.setNamespaceAware(true)
  39.     factory.setSchema(schema)
  40.     val validatingParser = factory.newSAXParser()
  41.     val sitemap: XMLLoader[Elem] = new scala.xml.factory.XMLLoader[scala.xml.Elem] {
  42.       override def parser = validatingParser
  43.       override def adapter =
  44.         new scala.xml.parsing.NoBindingFactoryAdapter
  45.           with myErrorHandler
  46.  
  47.     }
  48.     inputStream.close()
  49.     sitemap
  50.   }
  51.   def fromXML(xmlStr: String): Try[Message] = {
  52.     for {
  53.       xml <- Try(reader.loadString(xmlStr))
  54.       result <- ee.cone.core.c4converter.scalaxb.fromXMLEither[Message](xml) match {
  55.         case Left(a) =>
  56.           Failure(new Exception(a))
  57.         case Right(b) =>
  58.           Success(b)
  59.       }
  60.     } yield {
  61.       result
  62.     }
  63.   }
  64.  
  65.  
  66.   val scope: NamespaceBinding = ee.cone.mod.edi.tkx2_xml.xml.base.XMLProtocol.defaultScope
  67.   //val p = new scala.xml.PrettyPrinter(192, 4)
  68.  
  69.   def toXML(message: Message, charset: String): Try[(MessageType, MessageBody)] =
  70.     Try {
  71.       (message.msgBody.msgbodyoption.key.getOrElse(""), ee.cone.core.c4converter.scalaxb.toXML[Message](message, "message", scope)
  72.         .mkString("\n")
  73.       )
  74.     }.flatMap {
  75.       case m@(tpe, body) =>
  76.         fromXML(body).map(_ => m)
  77.       case m =>
  78.         Success(m)
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement