20#include <rtl/ustring.hxx>
21#include <rtl/ustrbuf.hxx>
23#include <libxml/xpathInternals.h>
24#include <osl/file.hxx>
25#include <osl/thread.hxx>
29#include <elements.hxx>
35#define UNO_JAVA_JFW_PARAMETER "UNO_JAVA_JFW_PARAMETER_"
36#define UNO_JAVA_JFW_JREHOME "UNO_JAVA_JFW_JREHOME"
37#define UNO_JAVA_JFW_ENV_JREHOME "UNO_JAVA_JFW_ENV_JREHOME"
38#define UNO_JAVA_JFW_CLASSPATH "UNO_JAVA_JFW_CLASSPATH"
39#define UNO_JAVA_JFW_ENV_CLASSPATH "UNO_JAVA_JFW_ENV_CLASSPATH"
40#define UNO_JAVA_JFW_CLASSPATH_URLS "UNO_JAVA_JFW_CLASSPATH_URLS"
41#define UNO_JAVA_JFW_VENDOR_SETTINGS "UNO_JAVA_JFW_VENDOR_SETTINGS"
51constexpr rtl_TextEncoding PathEncoding() {
return RTL_TEXTENCODING_UTF8; }
53rtl_TextEncoding PathEncoding() {
return osl_getThreadTextEncoding(); }
60 OUString sSystemPathSettings;
61 if (osl_getSystemPathFromFileURL(sURL.pData,
62 & sSystemPathSettings.pData) != osl_File_E_None)
65 "[Java framework] Error in function getVendorSettingsPath (fwkbase.cxx) ");
66 OString osSystemPathSettings =
OUStringToOString(sSystemPathSettings, PathEncoding());
67 return osSystemPathSettings;
70OUString getParam(OUString
const &
name)
76 "Using bootstrap parameter " <<
name <<
" = \"" << retVal <<
"\""
77 << (b ?
"" :
" (undefined)"));
81OUString getParamFirstUrl(OUString
const &
name)
86 return getParam(
name).trim().getToken(0,
' ');
97 if (sSettingsPath.isEmpty())
99 OString sMsg(
"[Java framework] A vendor settings file was not specified."
104 if (sSettingsPath.isEmpty())
111 OString::Concat(
"[Java framework] Error while parsing file: ")
112 + sSettingsPath +
".");
115 int res = xmlXPathRegisterNs(
120 "[Java framework] Error in constructor VendorSettings::VendorSettings() (fwkbase.cxx)");
125 OSL_ASSERT(!sVendor.empty());
128 reinterpret_cast<xmlChar
const *
>(
130 "/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"" + osVendor
131 +
"\"]/jf:minVersion").getStr()),
133 if (xmlXPathNodeSetIsEmpty(pathObject->nodesetval))
137#if defined MACOSX && defined __aarch64__
147 OString sExpression =
148 "/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"" +
149 osVendor +
"\"]/jf:minVersion";
152 xmlXPathEvalExpression(
reinterpret_cast<xmlChar
const *
>(sExpression.getStr()),
154 if (xmlXPathNodeSetIsEmpty(xPathObjectMin->nodesetval))
162 xPathObjectMin->nodesetval->nodeTab[0]->xmlChildrenNode, 1);
167 sExpression =
"/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"" +
168 osVendor +
"\"]/jf:maxVersion";
170 reinterpret_cast<xmlChar
const *
>(sExpression.getStr()),
172 if (xmlXPathNodeSetIsEmpty(xPathObjectMax->nodesetval))
180 xPathObjectMax->nodesetval->nodeTab[0]->xmlChildrenNode, 1);
185 sExpression =
"/jf:javaSelection/jf:vendorInfos/jf:vendor[@name=\"" +
186 osVendor +
"\"]/jf:excludeVersions/jf:version";
188 xmlXPathEvalExpression(
reinterpret_cast<xmlChar
const *
>(sExpression.getStr()),
190 if (!xmlXPathNodeSetIsEmpty(xPathObjectVersions->nodesetval))
192 xmlNode* cur = xPathObjectVersions->nodesetval->nodeTab[0];
193 while (cur !=
nullptr)
195 if (cur->type == XML_ELEMENT_NODE )
197 if (xmlStrcmp(cur->name,
reinterpret_cast<xmlChar
const *
>(
"version")) == 0)
201 OUString usVersion = sVersion;
213 ::std::vector<OString> vecParams;
215 for (sal_Int32
i = 1; ;
i++)
223 vecParams.push_back(sParam);
226 "Using bootstrap parameter " <<
sName <<
" = " << sParam);
236 return getParamFirstUrl(
"UNO_JAVA_JFW_USER_DATA");
241 return getParamFirstUrl(
"UNO_JAVA_JFW_SHARED_DATA");
260 char * pCp = getenv(
"CLASSPATH");
268 " and class path is: " << (pCp ? pCp :
""));
284 OUString sAbsoluteUrl;
286 if (File::getAbsoluteFileURL(sBaseDir, sVendor, sAbsoluteUrl)
290 "[Java framework] Invalid value for bootstrap variable: "
292 sVendor = sAbsoluteUrl;
298 "[Java framework] Invalid value for bootstrap variable: "
321 "[Java framework] Both bootstrap parameter "
324 "Check bootstrap parameters: environment variables, command line "
325 "arguments, rc/ini files for executable and java framework library.");
329 const char * pJRE = getenv(
"JAVA_HOME");
334 "[Java framework] Both bootstrap parameter "
336 "JAVA_HOME is not set.");
338 std::string_view osJRE(pJRE);
339 OUString usJRE = OStringToOUString(osJRE, osl_getThreadTextEncoding());
340 if (File::getFileURLFromSystemPath(usJRE, sJRE) != File::E_None)
343 "[Java framework] Error in function BootParams::getJREHome() "
348 " with JAVA_HOME = " << pJRE);
354 "[Java framework] The bootstrap parameter "
356 " must be set in direct mode.");
378 static bool g_bMode =
false;
384 bool bDirectMode =
true;
397 if (!aBoot->getFrom(sParams, sValue))
420 if (sParams.isEmpty())
428 if (!token.isEmpty())
430 OUString systemPathElement;
431 oslFileError rc = osl_getSystemPathFromFileURL(
432 token.pData, &systemPathElement.pData );
433 OSL_ASSERT( rc == osl_File_E_None );
434 if (rc == osl_File_E_None && !systemPathElement.isEmpty())
436 if (buf.getLength() > 0)
438 buf.append( systemPathElement );
443 return buf.makeStringAndClear();
450 OUStringBuffer sBufCP(4096);
453 if (!sUserClassPath.empty())
454 sBufCP.append(sUserClassPath);
458 if (!sAppCP.isEmpty())
460 if (!sUserClassPath.empty())
464 sBufCP.append(sAppCP);
468 if (sPaths.isEmpty()) {
472 OString sOptionClassPath =
"-Djava.class.path=" + sPaths;
473 return sOptionClassPath;
491 if (osl_getSystemPathFromFileURL(sURL.pData,
492 & sPath.pData) != osl_File_E_None)
495 "[Java framework] Error in function ::getSettingsPath (fwkbase.cxx).");
CXPathContextPtr m_xmlPathContextVendorSettings
CXmlDocPtr m_xmlDocVendorSettings
VersionInfo getVersionInformation(std::u16string_view sVendor) const
#define SAL_PATHSEPARATOR
#define NS_JAVA_FRAMEWORK
#define UNO_JAVA_JFW_CLASSPATH_URLS
#define UNO_JAVA_JFW_JREHOME
#define UNO_JAVA_JFW_VENDOR_SETTINGS
#define UNO_JAVA_JFW_ENV_CLASSPATH
#define UNO_JAVA_JFW_PARAMETER
#define UNO_JAVA_JFW_CLASSPATH
#define UNO_JAVA_JFW_ENV_JREHOME
#define SAL_INFO_IF(condition, area, stream)
#define SAL_WARN(area, stream)
#define SAL_INFO(area, stream)
::std::vector< OString > getVMParameters()
OUString getClasspathUrls()
OUString getVendorSettings()
OString getSettingsPath(const OUString &sURL)
const rtl::Bootstrap * Bootstrap()
provides a bootstrap class which already knows the values from the jvmfkwrc file.
void setJavaSelected()
Called from writeJavaInfoData.
OUString getApplicationClassPath()
bool wasJavaSelectedInSameProcess()
Determines if the currently selected Java was set in this process.
OString getSharedSettingsPath()
Returns the system path of the share settings file.
OString makeClassPathOption(std::u16string_view sUserClassPath)
creates the -Djava.class.path option with the complete classpath, including the paths which are set b...
OString getVendorSettingsPath()
jfw::FileStatus checkFileURL(const OUString &sURL)
checks if the URL is a file.
OUString getLibraryLocation()
Returns the file URL of the directory where the framework library (this library) resides.
OString getUserSettingsPath()
Get the system path to the javasettings.xml Converts the URL returned from getUserSettingsURL to a Sy...
std::basic_string_view< charT, traits > trim(std::basic_string_view< charT, traits > str)
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
OString OUStringToOString(std::u16string_view str, ConnectionSettings const *settings)
::std::vector< OUString > vecExcludeVersions