У меня есть требование загружать различные версии jar-файлов анализатора в spark при применении преобразования.
Исполнитель должен вызвать метод синтаксического анализа синтаксического анализатора на основе полученной версии Xml.
Я попытался использовать загрузчик классов URL, но все же он дает мне исключение класса не найден
def parserCCDAMessageageDynamically (inputData: (String, String), applicationId: String, orgcode: String, envPath: String): (List [(String, List [Row])], (List [Row], List [Row])) = {
println("Handle the error codes generated *********inputData._1.**********" + inputData._1)
var resultList = mutable.ListBuffer[(String, List[Row])]()
var listAuditDetails: mutable.ArrayBuffer[Row] = mutable.ArrayBuffer.empty
var listMetadata: mutable.ArrayBuffer[Row] = mutable.ArrayBuffer.empty
val objectName = "com.flblue.parser.ccda.driver.CDAParsingDriver"
println("The object name " + objectName)
var classLoader = new URLClassLoader(Array[URL](new File("/opt/hdp/usr/data/test/mapa/cie/ccda_parser/interim/edifecs_integration/parser-r21/lib").toURI.toURL,
new File("/opt/hdp/usr/data/test/mapa/cie/ccda_parser/interim/edifecs_integration/parser-r21/conf").toURI.toURL))
println("The class loader us ais " + classLoader)
val runtimeMirror = universe.runtimeMirror(classLoader)
val moduleSymbol = runtimeMirror.moduleSymbol(Class.forName(objectName))
val targetMethod = moduleSymbol.typeSignature.members.filter(x => x.isMethod && x.name.toString == "parseCDAWithFileName").head.asMethod
val output =runtimeMirror.reflect(runtimeMirror.reflectModule(moduleSymbol).instance).reflectMethod(targetMethod)(inputData._2,inputData._1, mapAsJavaMap(Map[String, String]()).asInstanceOf[java.util.Map[java.lang.String, java.lang.String]],mapAsJavaMap(Map[String, String]()).asInstanceOf[java.util.Map[java.lang.String, java.lang.String]])
println("The output is as fllows" + output)
(resultList.toList, (listAuditDetails.toList, listMetadata.toList))
}