Hi Daniel,yes, you were right, thank you very much!I assume a copy-paste bug in your code: the type description manager object does not implement XMultiComponentFactory, it implements e.g. com.sun.star.container.XHierarchicalNameAccess. Still, while exploring that corner it seems that I am not too successful to
Don't know what I am doing wrong, though. Maybe, if someone could take a look at the following Java code example (one can compile it and run it supplying the port number to connect to on the commandline): ----------------------- cut here ---------------------- import com.sun.star.beans.PropertyValue; import com.sun.star.beans.XPropertySet;
import com.sun.star.bridge.XUnoUrlResolver;
import com.sun.star.comp.helper.Bootstrap;
import com.sun.star.container.XHierarchicalNameAccess;
import com.sun.star.frame.XComponentLoader;
import com.sun.star.lang.XMultiComponentFactory;
import com.sun.star.lang.XMultiServiceFactory;
// import com.sun.star.lang.XTypeProvider;
import com.sun.star.reflection.TypeDescriptionSearchDepth;
// import com.sun.star.reflection.XIdlClass;
// import com.sun.star.reflection.XIdlField2;
// import com.sun.star.reflection.XIdlField;
// import com.sun.star.reflection.XIdlMember;
// import com.sun.star.reflection.XIdlMethod;
import com.sun.star.reflection.XIdlReflection;
import com.sun.star.reflection.XInterfaceTypeDescription;
import com.sun.star.reflection.XTypeDescription;
import com.sun.star.reflection.XTypeDescriptionEnumeration;
import com.sun.star.reflection.XTypeDescriptionEnumerationAccess;
import com.sun.star.uno.Any;
import com.sun.star.uno.Type;
import com.sun.star.uno.TypeClass;
import com.sun.star.uno.UnoRuntime;
import com.sun.star.uno.XComponentContext;
import com.sun.star.uno.XCurrentContext;
import com.sun.star.uno.XInterface;
import com.sun.star.uno.XNamingService;
public class TestRgf
{
static String unoURL=null;
static XComponentContext context=null;
static XUnoUrlResolver xuur=null;
static XNamingService xns=null;
static XMultiComponentFactory xmcf=null;
static XComponentContext xcc=null;
static XIdlReflection theCoreReflection=null;
static XMultiComponentFactory theServiceManager=null;
public static XHierarchicalNameAccess theTypeDescriptionManager=null;
static void test ()
{
String strClass="com.sun.star.uno.Any", strTmp="";
strClass="com.sun.star.comp.helper.Bootstrap";
try
{
// creates exception "com.sun.star.container.NoSuchElementException", no
// matter which class name gets supplied
strTmp=theTypeDescriptionManager.getByHierarchicalName( strClass ).toString();
}
catch (Exception e)
{
strTmp=e.toString();
}
say("test():\tclassName="+pp(strClass)+"\n\tstrTmp="+pp(strTmp));
}
static void testTypeDescriptionEnumeration()
{
XTypeDescriptionEnumerationAccess enumerationAccess = (XTypeDescriptionEnumerationAccess)
UnoRuntime.queryInterface(XTypeDescriptionEnumerationAccess.class, theTypeDescriptionManager);
say("testTypeDescriptionEnumeration(): enumerationAccess:\n\t"+pp(enumerationAccess));
try
{
TypeClass tc[] = {TypeClass.INTERFACE, TypeClass.SERVICE};
XTypeDescriptionEnumeration tdEnum=null;
String module="com.sun.star.reflection";
tdEnum=enumerationAccess.createTypeDescriptionEnumeration(
module, // module to analyze
tc, // types to enumerate
TypeDescriptionSearchDepth.ONE // ONE level deep only, INFINITE possible too
);
say("tdEnum="+pp(tdEnum));
say("\ttdEnum.hasMoreElements()="+pp(""+tdEnum.hasMoreElements()));
XTypeDescription xtd=null;
while (tdEnum.hasMoreElements())
{
xtd=tdEnum.nextTypeDescription();
say("\txtd=["+pp(xtd)); // show toString() result
}
}
catch (Exception e)
{
say("exception occurred: "+pp(e));
// e.printStackTrace();
}
}
static void connect(String strPort)
{
try
{
unoURL="uno:socket,host=localhost,port="+strPort+";urp;StarOffice.NamingService";
say("unoURL:\t"+pp(unoURL));
context=Bootstrap.createInitialComponentContext(null);
say("context:\t"+pp(context));
xuur=(XUnoUrlResolver) UnoRuntime.queryInterface(
XUnoUrlResolver.class,
context.getServiceManager().createInstanceWithContext(
"com.sun.star.bridge.UnoUrlResolver", context)
);
say("xuur:\t"+pp(xuur));
xns=(XNamingService) UnoRuntime.queryInterface(
XNamingService.class,
xuur.resolve(unoURL)
);
say("xns:\t"+pp(xns));
xmcf=(XMultiComponentFactory) UnoRuntime.queryInterface(
XMultiComponentFactory.class,
xns.getRegisteredObject("StarOffice.ServiceManager")
);
say("xmcf:\t"+pp(xmcf));
// get the default context (should contain the singletons)
xcc=(XComponentContext) UnoRuntime.queryInterface(
XComponentContext.class,
((XPropertySet) UnoRuntime.queryInterface(
XPropertySet.class,
xmcf)).getPropertyValue("DefaultContext")
);
say("xcc:\t"+pp(xcc));
say("");
// get singletons
theCoreReflection=(XIdlReflection) UnoRuntime.queryInterface(
XIdlReflection.class,
xcc.getValueByName("/singletons/com.sun.star.reflection.theCoreReflection"));
say("theCoreReflection:\t"+pp(theCoreReflection));
theServiceManager=(XMultiComponentFactory) UnoRuntime.queryInterface(
XMultiComponentFactory.class,
xcc.getValueByName("/singletons/com.sun.star.lang.theServiceManager"));
say("theServiceManager:\t"+pp(theServiceManager));
theTypeDescriptionManager=(XHierarchicalNameAccess) UnoRuntime.queryInterface(
XHierarchicalNameAccess.class,
xcc.getValueByName("/singletons/com.sun.star.reflection.theTypeDescriptionManager"));
say("theTypeDescriptionManager:\t"+pp(theTypeDescriptionManager));
}
catch (Exception e)
{
say("sch...");
e.printStackTrace();
}
}
public static void main(String[] arguments) throws Exception
{
// default to port "1234"
connect( arguments.length==0 ? "1234" : arguments[0] );
say("--- --- ---");
test();
say("--- --- ---");
testTypeDescriptionEnumeration();
say("--- --- ---");
System.exit(0);
}
public static void say (String s)
{
System.err.println(s);
}
public static String pp (Object o)
{
if (o==null) return "<null> <-- <-- <--";
return "<"+o+">";
}
}
----------------------- cut here ----------------------The output on my machine: ----------------------- cut here ---------------------- F:\work\tmp\ooo\tst>javac TestRgf.java && java TestRgf 8100
unoURL: <uno:socket,host=localhost,port=8100;urp;StarOffice.NamingService>
context: <[EMAIL PROTECTED]>
xuur: <[EMAIL PROTECTED]>
xns: <[Proxy:3736006,413c3d0;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.uno.XNamingService]]>
xmcf: <[Proxy:18734302,352a48;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.lang.XMultiComponentFactory]]>
xcc: <[Proxy:23195919,3578c8;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.uno.XComponentContext]]>
theCoreReflection: <[Proxy:21539363,413c2f0;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.reflection.XIdlReflection]]>
theServiceManager: <[Proxy:18734302,352a48;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.lang.XMultiComponentFactory]]>
theTypeDescriptionManager: <[Proxy:17977639,35a1e8;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.container.XHierarchicalNameAccess]]>
--- --- ---
test(): className=<com.sun.star.comp.helper.Bootstrap>
strTmp=<com.sun.star.container.NoSuchElementException: com.sun.star.comp.helper.Bootstrap>
--- --- ---
testTypeDescriptionEnumeration(): enumerationAccess:
<[Proxy:11935697,35a1e8;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.reflection.XTypeDescriptionEnumerationAccess]]>
tdEnum=<[Proxy:29987161,3ccfa58;msci[0];8331bd1159211daa868ae7518a58f,Type[com.sun.star.reflection.XTypeDescriptionEnumeration]]>
tdEnum.hasMoreElements()=<false>
--- --- ---
----------------------- cut here ----------------------Again, any help/hint highly appreciated! ---rony |
- [api-dev] Almost there? (Re: [api-dev] "/singletons... Rony G. Flatscher
- Re: [api-dev] Almost there? (Re: [api-dev] "/s... Jürgen Schmidt
- Re: [api-dev] Almost there? (Re: [api-dev] &quo... Rony G. Flatscher
- Re: [api-dev] Almost there? (Re: [api-dev] ... Arnulf Wiedemann
- [api-dev] TCLUNO ... (Re: [api-dev] Alm... Rony G. Flatscher
- Re: [api-dev] TCLUNO ... (Re: [api... Arnulf Wiedemann
- Re: [api-dev] Almost there? (Re: [api-dev] ... Rony G. Flatscher
- Re: [api-dev] Almost there? (Re: [api-dev] "/s... Jürgen Schmidt
- [api-dev] XTypeDescriptionEnumerationAccess.cre... Rony G. Flatscher
