Scala XML validation by XSD and parsing -
Scala XML validation by XSD and parsing -
i need validate xml file xsd, , parse xml if possible. have next example:
import java.io.fileinputstream import javax.xml.xmlconstants import javax.xml.parsers.saxparserfactory import javax.xml.transform.stream.streamsource import javax.xml.validation.schemafactory import org.xml.sax.saxparseexception import org.xml.sax.helpers.defaulthandler import scala.util.try import scala.xml.xml object xmltup extends app { val schema = { val mill = schemafactory.newinstance(xmlconstants.w3c_xml_schema_ns_uri) val xsdstream = new fileinputstream("xsd.xsd") val schema = factory.newschema(new streamsource(xsdstream)) xsdstream.close() schema } val saxparser = { val f = saxparserfactory.newinstance() f.setnamespaceaware(true) f.setschema(schema) f.newsaxparser() } //doesn't work val xml1 = new fileinputstream("xml.xml") println { try{xml.withsaxparser(saxparser).load(xml1)} } xml1.close() //works val xml2 = new fileinputstream("xml.xml") val handler = new defaulthandler() { override def error(ex: saxparseexception) { println("validation error!") } } saxparser.parse(xml2, handler) xml2.close() } when utilize scala xml (doesn't work), got success , haven't validation error, next code (works) got "validation error" message. why happend? how can validate xml xsd scala xml class?
i utilize scalaxb sbt (my xsd files located in subproject genscalaxb).
add project/plugin.sbt:
class="lang-scala prettyprint-override">resolvers += resolver.sonatyperepo("public") addsbtplugin("org.scalaxb" % "sbt-scalaxb" % "1.2.1") add build.sbt (map optional - custom packages):
class="lang-scala prettyprint-override">lazy val `genscalaxb` = project("genscalaxb", file("genscalaxb")).settings(scalaxbsettings: _*).settings( packagenames in scalaxb in compile := map(new uri("https://github.com/ajozwik/mvn2sbt") -> "pl.jozwik.gen", new uri("http://maven.apache.org/pom/4.0.0") -> "org.maven"), sourcegenerators in compile <+= scalaxb in compile ) put xsd files to: genscalaxb/src/main/xsd
i utilize in in function, see in github:
private def handlepomfile(pomxml: file, parent: option[mavendependency]) = { val xmlfromfile = try(xml.xml.loadfile(pomxml)) match { case success(pom) => pom case failure(th) => logger.error(s"${pomxml.getabsolutepath} failed parse") throw th } val pommodel = scalaxb.fromxml[org.maven.model](xmlfromfile) createprojectmap(pomxml.getparentfile, pommodel, parent) } the xsd file maven-4.0.0.xsd
xml files - poms.
xml scala validation xsd
Comments
Post a Comment