27#include <com/sun/star/lang/IllegalArgumentException.hpp>
28#include <com/sun/star/lang/WrappedTargetRuntimeException.hpp>
29#include <com/sun/star/uno/Reference.hxx>
30#include <com/sun/star/uno/XInterface.hpp>
31#include <com/sun/star/uri/UriReferenceFactory.hpp>
32#include <com/sun/star/uri/XVndSunStarExpandUrlReference.hpp>
33#include <com/sun/star/util/theMacroExpander.hpp>
35#include <rtl/ustring.hxx>
44 css::uno::Reference< css::uno::XComponentContext >
const & context,
45 JNIEnv * environment, std::u16string_view classPath)
48 assert(environment !=
nullptr);
49 jclass classUrl(environment->FindClass(
"java/net/URL"));
50 if (classUrl ==
nullptr) {
54 environment->GetMethodID(classUrl,
"<init>",
"(Ljava/lang/String;)V"));
55 if (ctorUrl ==
nullptr) {
58 ::std::vector< jobject > urls;
59 for (::sal_Int32
i = 0;
i != -1;) {
62 css::uno::Reference< css::uri::XVndSunStarExpandUrlReference >
64 css::uri::UriReferenceFactory::create(context)->
parse(url),
67 css::uno::Reference< css::util::XMacroExpander > expander =
68 css::util::theMacroExpander::get(context);
70 url = expUrl->expand( expander );
71 }
catch (
const css::lang::IllegalArgumentException & e) {
73 throw css::lang::WrappedTargetRuntimeException(
74 "com.sun.star.lang.IllegalArgumentException: "
80 arg.l = environment->NewString(
81 reinterpret_cast< jchar
const *
>(url.getStr()),
82 static_cast< jsize
>(url.getLength()));
83 if (arg.l ==
nullptr) {
86 jobject o(environment->NewObjectA(classUrl, ctorUrl, &arg));
93 jobjectArray
result = environment->NewObjectArray(
94 static_cast< jsize
>(urls.size()), classUrl,
nullptr);
101 for (
auto const& url : urls)
103 environment->SetObjectArrayElement(
result,
idx++, url);
Any SAL_CALL getCaughtException()
JVMACCESS_DLLPUBLIC jobjectArray translateToUrls(css::uno::Reference< css::uno::XComponentContext > const &context, JNIEnv *environment, std::u16string_view classPath)
translates a class path into a java.net.URL[] instance.
std::basic_string_view< charT, traits > getToken(std::basic_string_view< charT, traits > sv, charT delimiter, std::size_t &position)
bool parse(OUString const &uri, SourceProviderScannerData *data)