How to get the Java Gateway work in MATLAB?
Posted: Tue Sep 25, 2018 3:10 pm
I understand that one of the major weakness of OMERO-MATLAB is the fact that it does not support the Java Gateway (https://docs.openmicroscopy.org/omero/5 ... wayconnect).
Accept Gateway objects in all functions #5
https://github.com/ome/omero-matlab/issues/5
Following the example code shown in the above URL, I tried to use Java gateway from MATLAB.
The above attempt ends up in the following execution error.
This implies that the method 'connect' of 'gateway' is not visible to MATLAB. Indeed, if I try to get the list of Java methods of the 'gateway' object, it issues a Java error, complaining that `loci/formats/meta/MetadataStore` is not found.
Solution
Install Bioformats-MATLAB toolbox and run
to add java class paths for Bioformats, which include `loci.meta`.
Then
Now we can think of the implementation of Java gateway, for example for `getPanelInfo.m`
If you guys can suggest a proper Java code for the operation needed for `getPanelInfo.m` using `gateway`, I might be able to translate that into MATLAB, though I can't promise.
Once we figure out one example, the rest of MATLAB functions may work in a similar way, I hope.
Accept Gateway objects in all functions #5
https://github.com/ome/omero-matlab/issues/5
Following the example code shown in the above URL, I tried to use Java gateway from MATLAB.
- Code: Select all
client = loadOmero(host, port) % this adds OMERO Java jar files to Java class paths
d = javaclasspath
d =
{'xxxxxxx\OMERO-matlab\libs\omero_client.jar'}
{'xxxxxxx\OMERO-matlab\libs\guava.jar' }
{'xxxxxxx\OMERO-matlab\libs' }
- Code: Select all
cred = omero.gateway.LoginCredentials(userName, password, host, port);
simpleLogger = omero.log.SimpleLogger();
gateway = omero.gateway.Gateway(simpleLogger);
user = gateway.connect(cred);
The above attempt ends up in the following execution error.
- Code: Select all
'connect' requires one of the following:
Control System Toolbox
Instrument Control Toolbox
OPC Toolbox
Robotics System Toolbox
Vehicle Network Toolbox
This implies that the method 'connect' of 'gateway' is not visible to MATLAB. Indeed, if I try to get the list of Java methods of the 'gateway' object, it issues a Java error, complaining that `loci/formats/meta/MetadataStore` is not found.
- Code: Select all
methods(gateway)
Warning: A Java exception occurred getting the method description for the omero.gateway.Gateway class:
Java exception occurred:
java.lang.NoClassDefFoundError: loci/formats/meta/MetadataStore
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$100(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at com.mathworks.jmi.CustomURLClassLoader.findClass(ClassLoaderManager.java:760)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.getDeclaredMethods0(Native Method)
at java.lang.Class.privateGetDeclaredMethods(Unknown Source)
at java.lang.Class.privateGetPublicMethods(Unknown Source)
at java.lang.Class.getMethods(Unknown Source)
at com.mathworks.jmi.OpaqueJavaInterface.getMethodDescriptions(OpaqueJavaInterface.java:278)
Caused by: java.lang.ClassNotFoundException: loci.formats.meta.MetadataStore
at java.net.URLClassLoader.findClass(Unknown Source)
at com.mathworks.jmi.CustomURLClassLoader.findClass(ClassLoaderManager.java:760)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 17 more
Solution
Install Bioformats-MATLAB toolbox and run
- Code: Select all
`bfCheckJavaPath();`
to add java class paths for Bioformats, which include `loci.meta`.
Then
- Code: Select all
user = gateway.connect(cred);
- Code: Select all
user =
omero.gateway.model.ExperimenterData (id=2)
Now we can think of the implementation of Java gateway, for example for `getPanelInfo.m`
If you guys can suggest a proper Java code for the operation needed for `getPanelInfo.m` using `gateway`, I might be able to translate that into MATLAB, though I can't promise.
Once we figure out one example, the rest of MATLAB functions may work in a similar way, I hope.