#ifndef __linux__ #ifndef __APPLE__ //#include "stdafx.h" #include #endif #endif //#include "stdafx.h" #include "SaxonProcessor.h" #include "XdmValue.h" #include "XdmItem.h" #include "XdmNode.h" #include "XdmAtomicValue.h" //#define DEBUG #ifdef DEBUG #include #endif #include //jobject cpp; const char * failure; sxnc_environment * SaxonProcessor::sxn_environ = 0; int SaxonProcessor::refCount = 0; int SaxonProcessor::jvmCreatedCPP=0; bool SaxonProcessor::exceptionOccurred(){ bool found = SaxonProcessor::sxn_environ->env->ExceptionCheck(); if(!found){ if( exception != NULL){ bool result = exception->count() > 1; return result; } else {return false;} } else { return found; } } const char* SaxonProcessor::checkException(jobject cpp) { const char * message = NULL; if(exception == NULL) { message = checkForException(sxn_environ, cpp); } else { message = exception->getErrorMessages(); } return message; } void SaxonProcessor::checkAndCreateException(jclass cppClass){ exception = NULL; if(exceptionOccurred()) { if(exception != NULL) { delete exception; } exception = checkForExceptionCPP(SaxonProcessor::sxn_environ->env, cppClass, NULL); #ifdef DEBUG SaxonProcessor::sxn_environ->env->ExceptionDescribe(); #endif exceptionClear(false); } } void SaxonProcessor::exceptionClear(bool clearCPPException){ SaxonProcessor::sxn_environ->env->ExceptionClear(); if(exception != NULL && clearCPPException) { delete exception; } } SaxonApiException * SaxonProcessor::getException(){ return exception; } SaxonProcessor::SaxonProcessor() { licensei = false; SaxonProcessor(licensei); } SaxonApiException * SaxonProcessor::checkForExceptionCPP(JNIEnv* env, jclass callingClass, jobject callingObject){ if(exception != NULL) { delete exception; } if (env->ExceptionCheck()) { std::string result1 = ""; std::string errorCode = ""; jthrowable exc = env->ExceptionOccurred(); #ifdef DEBUG env->ExceptionDescribe(); #endif jclass exccls(env->GetObjectClass(exc)); jclass clscls(env->FindClass("java/lang/Class")); jmethodID getName(env->GetMethodID(clscls, "getName", "()Ljava/lang/String;")); jstring name(static_cast(env->CallObjectMethod(exccls, getName))); char const* utfName(env->GetStringUTFChars(name, 0)); result1 = (std::string(utfName)); //env->ReleaseStringUTFChars(name, utfName); jmethodID getMessage(env->GetMethodID(exccls, "getMessage", "()Ljava/lang/String;")); if(getMessage) { jstring message(static_cast(env->CallObjectMethod(exc, getMessage))); char const* utfMessage = NULL; if(!message) { utfMessage = ""; return NULL; } else { utfMessage = (env->GetStringUTFChars(message, 0)); } if(utfMessage != NULL) { result1 = (result1 + " : ") + utfMessage; } //env->ReleaseStringUTFChars(message,utfMessage); if(callingObject != NULL && result1.compare(0,36, "net.sf.saxon.option.cpp.SaxonCException", 36) == 0){ jmethodID getErrorCodeID(env->GetMethodID(callingClass, "getExceptions", "()[Lnet/sf/saxon/option/cpp/SaxonCException;")); jclass saxonExceptionClass(env->FindClass("net/sf/saxon/option/cpp/SaxonCException")); if(getErrorCodeID){ jobjectArray saxonExceptionObject((jobjectArray)(env->CallObjectMethod(callingObject, getErrorCodeID))); if(saxonExceptionObject) { jmethodID lineNumID = env->GetMethodID(saxonExceptionClass, "getLinenumber", "()I"); jmethodID ecID = env->GetMethodID(saxonExceptionClass, "getErrorCode", "()Ljava/lang/String;"); jmethodID emID = env->GetMethodID(saxonExceptionClass, "getErrorMessage", "()Ljava/lang/String;"); jmethodID typeID = env->GetMethodID(saxonExceptionClass, "isTypeError", "()Z"); jmethodID staticID = env->GetMethodID(saxonExceptionClass, "isStaticError", "()Z"); jmethodID globalID = env->GetMethodID(saxonExceptionClass, "isGlobalError", "()Z"); int exLength = (int)env->GetArrayLength(saxonExceptionObject); SaxonApiException * saxonExceptions = new SaxonApiException(); for(int i=0; iGetObjectArrayElement(saxonExceptionObject, i); jstring errCode = (jstring)(env->CallObjectMethod(exObj, ecID)); jstring errMessage = (jstring)(env->CallObjectMethod(exObj, emID)); jboolean isType = (env->CallBooleanMethod(exObj, typeID)); jboolean isStatic = (env->CallBooleanMethod(exObj, staticID)); jboolean isGlobal = (env->CallBooleanMethod(exObj, globalID)); saxonExceptions->add((errCode ? env->GetStringUTFChars(errCode,0) : NULL ) ,(errMessage ? env->GetStringUTFChars(errMessage,0) : NULL),(int)(env->CallIntMethod(exObj, lineNumID)), (bool)isType, (bool)isStatic, (bool)isGlobal); //env->ExceptionDescribe(); } //env->ExceptionDescribe(); env->ExceptionClear(); return saxonExceptions; } } } } SaxonApiException * saxonExceptions = new SaxonApiException(NULL, result1.c_str()); //env->ExceptionDescribe(); env->ExceptionClear(); return saxonExceptions; } return NULL; } SaxonProcessor::SaxonProcessor(bool l){ cwd=""; licensei = l; versionStr = NULL; SaxonProcessor::refCount++; exception = NULL; if(SaxonProcessor::jvmCreatedCPP == 0){ SaxonProcessor::jvmCreatedCPP=1; SaxonProcessor::sxn_environ= new sxnc_environment;//(sxnc_environment *)malloc(sizeof(sxnc_environment)); /* * First of all, load required component. * By the time of JET initialization, all components should be loaded. */ /*SaxonProcessor::sxn_environ->myDllHandle = loadDefaultDll ();*/ /* * Initialize JET run-time. * The handle of loaded component is used to retrieve Invocation API. */ initDefaultJavaRT (SaxonProcessor::sxn_environ); } else { #ifdef DEBUG std::cerr<<"SaxonProc constructor: jvm exists! jvmCreatedCPP="<env, "net/sf/saxon/Version"); procClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/s9api/Processor"); saxonCAPIClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/option/cpp/SaxonCAPI"); proc = createSaxonProcessor (SaxonProcessor::sxn_environ->env, procClass, "(Z)V", NULL, licensei); if(!proc) { std::cout<<"proc is NULL in SaxonProcessor constructor"<env, "net/sf/saxon/s9api/XdmAtomicValue"); #ifdef DEBUG jmethodID debugMID = SaxonProcessor::sxn_environ->env->GetStaticMethodID(saxonCAPIClass, "setDebugMode", "(Z)V"); SaxonProcessor::sxn_environ->env->CallStaticVoidMethod(saxonCAPIClass, debugMID, (jboolean)true); #endif } SaxonProcessor::SaxonProcessor(const char * configFile){ cwd=""; versionStr = NULL; SaxonProcessor::refCount++; exception = NULL; if(SaxonProcessor::jvmCreatedCPP == 0){ SaxonProcessor::jvmCreatedCPP=1; //SaxonProcessor::sxn_environ= new sxnc_environment; SaxonProcessor::sxn_environ= (sxnc_environment *)malloc(sizeof(sxnc_environment)); /* * First of all, load required component. * By the time of JET initialization, all components should be loaded. */ /*SaxonProcessor::sxn_environ->myDllHandle = loadDefaultDll ();*/ /* * Initialize JET run-time. * The handle of loaded component is used to retrieve Invocation API. */ initDefaultJavaRT (SaxonProcessor::sxn_environ); } versionClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/Version"); procClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/s9api/Processor"); saxonCAPIClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/option/cpp/SaxonCAPI"); static jmethodID mIDcreateProc = (jmethodID)SaxonProcessor::sxn_environ->env->GetStaticMethodID(saxonCAPIClass,"createSaxonProcessor", "(Ljava/lang/String;)Lnet/sf/saxon/s9api/Processor;"); if (!mIDcreateProc) { std::cerr << "Error: SaxonDll." << "getPrimitiveTypeName" << " not found\n" << std::endl; return ; } proc = SaxonProcessor::sxn_environ->env->CallStaticObjectMethod(saxonCAPIClass, mIDcreateProc,SaxonProcessor::sxn_environ->env->NewStringUTF(configFile)); if(!proc) { checkAndCreateException(saxonCAPIClass); std::cerr << "Error: "<env, "net/sf/saxon/s9api/XdmAtomicValue"); } SaxonProcessor::~SaxonProcessor(){ clearConfigurationProperties(); if(versionStr != NULL) { delete versionStr; } SaxonProcessor::refCount--; //This might be redundant due to the bug fix 2670 } bool SaxonProcessor::isSchemaAwareProcessor(){ if(!licensei) { return false; } else { static jmethodID MID_schema = (jmethodID)SaxonProcessor::sxn_environ->env->GetMethodID(procClass, "isSchemaAware", "()Z"); if (!MID_schema) { std::cerr<<"\nError: Saxonc "<<"SaxonProcessor.isSchemaAware()"<<" not found"<env->CallBooleanMethod(proc, MID_schema)); return licensei; } } void SaxonProcessor::applyConfigurationProperties(){ if(configProperties.size()>0) { int size = configProperties.size(); jclass stringClass = lookForClass(SaxonProcessor::sxn_environ->env, "java/lang/String"); jobjectArray stringArray1 = SaxonProcessor::sxn_environ->env->NewObjectArray( (jint)size, stringClass, 0 ); jobjectArray stringArray2 = SaxonProcessor::sxn_environ->env->NewObjectArray( (jint)size, stringClass, 0 ); static jmethodID mIDappConfig = NULL; if(mIDappConfig == NULL) { mIDappConfig = (jmethodID) SaxonProcessor::sxn_environ->env->GetStaticMethodID(saxonCAPIClass,"applyToConfiguration", "(Lnet/sf/saxon/s9api/Processor;[Ljava/lang/String;[Ljava/lang/String;)V"); if (!mIDappConfig) { std::cerr << "Error: SaxonDll." << "applyToConfiguration" << " not found\n" << std::endl; return; } } int i=0; std::map::iterator iter =configProperties.begin(); for(iter=configProperties.begin(); iter!=configProperties.end(); ++iter, i++) { SaxonProcessor::sxn_environ->env->SetObjectArrayElement( stringArray1, i, SaxonProcessor::sxn_environ->env->NewStringUTF( (iter->first).c_str() )); SaxonProcessor::sxn_environ->env->SetObjectArrayElement( stringArray2, i, SaxonProcessor::sxn_environ->env->NewStringUTF((iter->second).c_str()) ); } SaxonProcessor::sxn_environ->env->CallStaticObjectMethod(saxonCAPIClass, mIDappConfig,proc, stringArray1,stringArray2); if (exceptionOccurred()) { checkAndCreateException(saxonCAPIClass); exceptionClear(false); } SaxonProcessor::sxn_environ->env->DeleteLocalRef(stringArray1); SaxonProcessor::sxn_environ->env->DeleteLocalRef(stringArray2); } } jobjectArray SaxonProcessor::createJArray(XdmValue ** values, int length){ jobjectArray valueArray = NULL; jclass xdmValueClass = lookForClass(SaxonProcessor::sxn_environ->env, "net/sf/saxon/s9api/XdmValue"); valueArray = SaxonProcessor::sxn_environ->env->NewObjectArray((jint) length, xdmValueClass, 0); for (int i=0; igetUnderlyingValue(); if(xx == NULL) { std::cerr<<"value failed"<getUnderlyingValue() == NULL) { std::cerr<<"value["<getUnderlyingValue() is NULL"<env->SetObjectArrayElement(valueArray, i,values[i]->getUnderlyingValue()); } return valueArray; } JParameters SaxonProcessor::createParameterJArray(std::map parameters, std::map properties){ JParameters comboArrays; comboArrays.stringArray = NULL; comboArrays.objectArray = NULL; jclass objectClass = lookForClass(SaxonProcessor::sxn_environ->env, "java/lang/Object"); jclass stringClass = lookForClass(SaxonProcessor::sxn_environ->env, "java/lang/String"); int size = parameters.size() + properties.size(); #ifdef DEBUG std::cerr<<"Properties size: "< 0) { comboArrays.objectArray = SaxonProcessor::sxn_environ->env->NewObjectArray((jint) size, objectClass, 0); comboArrays.stringArray = SaxonProcessor::sxn_environ->env->NewObjectArray((jint) size, stringClass, 0); int i = 0; for (std::map::iterator iter = parameters.begin(); iter != parameters.end(); ++iter, i++) { #ifdef DEBUG std::cerr<<"map 1"<first"<<(iter->first).c_str()<env->SetObjectArrayElement(comboArrays.stringArray, i, SaxonProcessor::sxn_environ->env->NewStringUTF( (iter->first).c_str())); #ifdef DEBUG std::string s1 = typeid(iter->second).name(); std::cerr<<"Type of itr:"<second) == NULL) {std::cerr<<"iter->second is null"<second)->getUnderlyingValue(); if(xx == NULL) { std::cerr<<"value failed"<second)->getUnderlyingValue() == NULL) { std::cerr<<"(iter->second)->getUnderlyingValue() is NULL"<env->SetObjectArrayElement(comboArrays.objectArray, i, (iter->second)->getUnderlyingValue()); } for (std::map::iterator iter = properties.begin(); iter != properties.end(); ++iter, i++) { SaxonProcessor::sxn_environ->env->SetObjectArrayElement(comboArrays.stringArray, i, SaxonProcessor::sxn_environ->env->NewStringUTF( (iter->first).c_str())); SaxonProcessor::sxn_environ->env->SetObjectArrayElement(comboArrays.objectArray, i, SaxonProcessor::sxn_environ->env->NewStringUTF( (iter->second).c_str())); } return comboArrays; } else { return comboArrays; } } SaxonProcessor& SaxonProcessor::operator=( const SaxonProcessor& other ){ versionClass = other.versionClass; procClass = other.procClass; saxonCAPIClass = other.saxonCAPIClass; cwd = other.cwd; proc = other.proc; //SaxonProcessor::sxn_environ= other.environ; parameters = other.parameters; configProperties = other.configProperties; licensei = other.licensei; exception = other.exception; return *this; } XsltProcessor * SaxonProcessor::newXsltProcessor(){ applyConfigurationProperties(); return (new XsltProcessor(this, cwd)); } Xslt30Processor * SaxonProcessor::newXslt30Processor(){ applyConfigurationProperties(); return (new Xslt30Processor(this, cwd)); } XQueryProcessor * SaxonProcessor::newXQueryProcessor(){ applyConfigurationProperties(); return (new XQueryProcessor(this,cwd)); } XPathProcessor * SaxonProcessor::newXPathProcessor(){ applyConfigurationProperties(); return (new XPathProcessor(this, cwd)); } SchemaValidator * SaxonProcessor::newSchemaValidator(){ if(licensei) { applyConfigurationProperties(); return (new SchemaValidator(this, cwd)); } else { std::cerr<<"\nError: Processor is not licensed for schema processing!"<env->GetStaticMethodID(saxonCAPIClass, "getProductVersion", "(Lnet/sf/saxon/s9api/Processor;)Ljava/lang/String;"); if (!MID_version) { std::cerr<<"\nError: MyClassInDll "<<"SaxonCAPI.getProductVersion()"<<" not found"<env->CallStaticObjectMethod(saxonCAPIClass, MID_version, proc)); const char * tempVersionStr = SaxonProcessor::sxn_environ->env->GetStringUTFChars(jstr, NULL); int verLen = strlen(tempVersionStr)+22+strlen(CVERSION)+1; versionStr =new char [verLen]; snprintf(versionStr, verLen, "Saxon/C %s %s %s", CVERSION, "running with", tempVersionStr); //delete tempVersionStr; } return versionStr; } void SaxonProcessor::setcwd(const char* dir){ cwd = std::string(dir); } const char* SaxonProcessor::getcwd(){ return cwd.c_str(); } void SaxonProcessor::setResourcesDirectory(const char* dir){ //memset(&resources_dir[0], 0, sizeof(resources_dir)); #if defined(__linux__) || defined (__APPLE__) strncat(_getResourceDirectory(), dir, strlen(dir)); #else int destSize = strlen(dir) + strlen(dir); strncat_s(_getResourceDirectory(), destSize,dir, strlen(dir)); #endif } void SaxonProcessor::setCatalog(const char* catalogFile, bool isTracing){ jclass xmlResolverClass = lookForClass(SaxonProcessor::sxn_environ->env, "Lnet/sf/saxon/trans/XmlCatalogResolver;"); static jmethodID catalogMID = SaxonProcessor::sxn_environ->env->GetStaticMethodID(xmlResolverClass, "setCatalog", "(Ljava/lang/String;Lnet/sf/saxon/Configuration;Z)V"); if (!catalogMID) { std::cerr<<"\nError: Saxonc."<<"setCatalog()"<<" not found"<env->GetMethodID(procClass, "getUnderlyingConfiguration", "()Lnet/sf/saxon/Configuration;"); if (!configMID) { std::cerr<<"\nError: Saxonc."<<"getUnderlyingConfiguration()"<<" not found"<env->CallObjectMethod(proc, configMID); if(!configObj) { std::cout<<"proc is NULL in SaxonProcessor setcatalog - config obj"<env->CallStaticVoidMethod(xmlResolverClass, catalogMID, SaxonProcessor::sxn_environ->env->NewStringUTF(catalogFile), configObj ,(jboolean)isTracing); #ifdef DEBUG SaxonProcessor::sxn_environ->env->ExceptionDescribe(); #endif } const char * SaxonProcessor::getResourcesDirectory(){ return _getResourceDirectory(); } XdmNode * SaxonProcessor::parseXmlFromString(const char* source){ jmethodID mID = (jmethodID)SaxonProcessor::sxn_environ->env->GetStaticMethodID(saxonCAPIClass, "parseXmlString", "(Lnet/sf/saxon/s9api/Processor;Lnet/sf/saxon/s9api/SchemaValidator;Ljava/lang/String;)Lnet/sf/saxon/s9api/XdmNode;"); if (!mID) { std::cerr<<"\nError: Saxonc."<<"parseXmlString()"<<" not found"<env->CallStaticObjectMethod(saxonCAPIClass, mID, proc, NULL, SaxonProcessor::sxn_environ->env->NewStringUTF(source)); if(xdmNodei) { XdmNode * value = new XdmNode(xdmNodei); value->setProcessor(this); return value; } else if (exceptionOccurred()) { checkAndCreateException(saxonCAPIClass); exceptionClear(false); } #ifdef DEBUG SaxonProcessor::sxn_environ->env->ExceptionDescribe(); #endif return NULL; } int SaxonProcessor::getNodeKind(jobject obj){ jclass xdmNodeClass = lookForClass(SaxonProcessor::sxn_environ->env, "Lnet/sf/saxon/s9api/XdmNode;"); static jmethodID nodeKindMID = (jmethodID) SaxonProcessor::sxn_environ->env->GetMethodID(xdmNodeClass,"getNodeKind", "()Lnet/sf/saxon/s9api/XdmNodeKind;"); if (!nodeKindMID) { std::cerr << "Error: MyClassInDll." << "getNodeKind" << " not found\n" << std::endl; return 0; } jobject nodeKindObj = (SaxonProcessor::sxn_environ->env->CallObjectMethod(obj, nodeKindMID)); if(!nodeKindObj) { return 0; } jclass xdmUtilsClass = lookForClass(SaxonProcessor::sxn_environ->env, "Lnet/sf/saxon/option/cpp/XdmUtils;"); jmethodID mID2 = (jmethodID) SaxonProcessor::sxn_environ->env->GetStaticMethodID(xdmUtilsClass,"convertNodeKindType", "(Lnet/sf/saxon/s9api/XdmNodeKind;)I"); if (!mID2) { std::cerr << "Error: MyClassInDll." << "convertNodeKindType" << " not found\n" << std::endl; return 0; } if(!nodeKindObj){ return 0; } int nodeKind = (int)(SaxonProcessor::sxn_environ->env->CallStaticIntMethod(xdmUtilsClass, mID2, nodeKindObj)); return nodeKind; } XdmNode * SaxonProcessor::parseXmlFromFile(const char* source){ jmethodID mID = (jmethodID)SaxonProcessor::sxn_environ->env->GetStaticMethodID(saxonCAPIClass, "parseXmlFile", "(Lnet/sf/saxon/s9api/Processor;Ljava/lang/String;Lnet/sf/saxon/s9api/SchemaValidator;Ljava/lang/String;)Lnet/sf/saxon/s9api/XdmNode;"); if (!mID) { std::cerr<<"\nError: Saxonc.Dll "<<"parseXmlFile()"<<" not found"<env->CallStaticObjectMethod(saxonCAPIClass, mID, proc, SaxonProcessor::sxn_environ->env->NewStringUTF(cwd.c_str()), NULL, SaxonProcessor::sxn_environ->env->NewStringUTF(source)); if(exceptionOccurred()) { checkAndCreateException(saxonCAPIClass); exceptionClear(false); } else { XdmNode * value = new XdmNode(xdmNodei); value->setProcessor(this); return value; } return NULL; } XdmNode * SaxonProcessor::parseXmlFromUri(const char* source){ jmethodID mID = (jmethodID)SaxonProcessor::sxn_environ->env->GetStaticMethodID(saxonCAPIClass, "parseXmlFile", "(Lnet/sf/saxon/s9api/Processor;Ljava/lang/String;Ljava/lang/String;)Lnet/sf/saxon/s9api/XdmNode;"); if (!mID) { std::cerr<<"\nError: Saxonc.Dll "<<"parseXmlFromUri()"<<" not found"<env->CallStaticObjectMethod(saxonCAPIClass, mID, proc, SaxonProcessor::sxn_environ->env->NewStringUTF(""), SaxonProcessor::sxn_environ->env->NewStringUTF(source)); if(exceptionOccurred()) { checkAndCreateException(saxonCAPIClass); } else { XdmNode * value = new XdmNode(xdmNodei); value->setProcessor(this); return value; } return NULL; } /** * Set a configuration property. * * @param name of the property * @param value of the property */ void SaxonProcessor::setConfigurationProperty(const char * name, const char * value){ if(name != NULL){ configProperties.insert(std::pair(std::string(name), std::string((value == NULL ? "" : value)))); } } void SaxonProcessor::clearConfigurationProperties(){ configProperties.clear(); } void SaxonProcessor::release(){ if(SaxonProcessor::jvmCreatedCPP!=0) { SaxonProcessor::jvmCreatedCPP =0; //std::cerr<<"SaxonProc: JVM finalized calling !"<jvm); //delete SaxonProcessor::sxn_environ; /*clearParameters(); clearProperties();*/ } else { #ifdef DEBUG std::cerr<<"SaxonProc: JVM finalize not called!"<env->GetMethodID (xdmAtomicClass, "", "(Ljava/lang/String;)V")); jobject obj2 = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, obj)); XdmAtomicValue * value = new XdmAtomicValue(obj2, "xs:string"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeStringValue(std::string str){ jobject obj = getJavaStringValue(SaxonProcessor::sxn_environ, str.c_str()); jmethodID mID_atomic = (jmethodID)(SaxonProcessor::sxn_environ->env->GetMethodID (xdmAtomicClass, "", "(Ljava/lang/String;)V")); jobject obj2 = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, obj)); XdmAtomicValue * value = new XdmAtomicValue(obj2, "xs:string"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeIntegerValue(int i){ //jobject obj = integerValue(*SaxonProcessor::sxn_environ, i); jmethodID mID_atomic = (jmethodID)(SaxonProcessor::sxn_environ->env->GetMethodID (xdmAtomicClass, "", "(J)V")); jobject obj = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, (jlong)i)); XdmAtomicValue * value = new XdmAtomicValue(obj, "Q{http://www.w3.org/2001/XMLSchema}integer"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeDoubleValue(double d){ //jobject obj = doubleValue(*SaxonProcessor::sxn_environ, d); jmethodID mID_atomic = (jmethodID)(SaxonProcessor::sxn_environ->env->GetMethodID (xdmAtomicClass, "", "(D)V")); jobject obj = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, (jdouble)d)); XdmAtomicValue * value = new XdmAtomicValue(obj, "Q{http://www.w3.org/2001/XMLSchema}double"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeFloatValue(float d){ //jobject obj = doubleValue(*SaxonProcessor::sxn_environ, d); jmethodID mID_atomic = (jmethodID)(SaxonProcessor::sxn_environ->env->GetMethodID (xdmAtomicClass, "", "(F)V")); jobject obj = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, (jfloat)d)); XdmAtomicValue * value = new XdmAtomicValue(obj, "Q{http://www.w3.org/2001/XMLSchema}float"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeLongValue(long l){ //jobject obj = longValue(*SaxonProcessor::sxn_environ, l); jmethodID mID_atomic = (jmethodID)(SaxonProcessor::sxn_environ->env->GetMethodID (xdmAtomicClass, "", "(J)V")); jobject obj = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, (jlong)l)); XdmAtomicValue * value = new XdmAtomicValue(obj, "Q{http://www.w3.org/2001/XMLSchema}long"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeBooleanValue(bool b){ //jobject obj = booleanValue(*SaxonProcessor::sxn_environ, b); jmethodID mID_atomic = (jmethodID)(SaxonProcessor::sxn_environ->env->GetMethodID (xdmAtomicClass, "", "(Z)V")); jobject obj = (jobject)(SaxonProcessor::sxn_environ->env->NewObject(xdmAtomicClass, mID_atomic, (jboolean)b)); XdmAtomicValue * value = new XdmAtomicValue(obj, "Q{http://www.w3.org/2001/XMLSchema}boolean"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeQNameValue(const char* str){ jobject val = xdmValueAsObj(SaxonProcessor::sxn_environ, "QName", str); XdmAtomicValue * value = new XdmAtomicValue(val, "QName"); value->setProcessor(this); return value; } XdmAtomicValue * SaxonProcessor::makeAtomicValue(const char * typei, const char * strValue){ jobject obj = xdmValueAsObj(SaxonProcessor::sxn_environ, typei, strValue); XdmAtomicValue * value = new XdmAtomicValue(obj, typei); value->setProcessor(this); return value; } const char * SaxonProcessor::getStringValue(XdmItem * item){ const char *result = stringValue(SaxonProcessor::sxn_environ, item->getUnderlyingValue()); #ifdef DEBUG if(result == NULL) { std::cout<<"getStringValue of XdmItem is NULL"<