· Aug 27, 2018

Return $lb from Java Gateway call

I want to call java method and return $lb structure from it.

JDBC jar seems to contain relevant class -  com.intersys.jdbc.CacheListBuilder, but so far I only managed to return a string that looks like a list.

Here's my java code:

package isc.poi;

import com.intersys.jdbc.CacheListBuilder;
import java.sql.SQLException;

public class Test {

    public static String Test() throws SQLException
        CacheListBuilder list = new CacheListBuilder("UTF8");

        return list.toString();

And Cache part:

Class POI.Utils [ Abstract ]

Parameter CLASSPATH = "C:\InterSystems\poi.jar";

Parameter GATEWAY = "POI";

/// Get JGW object
ClassMethod Connect(gatewayName As %String = {..#GATEWAY}, path As %String = {..#CLASSPATH}, Output sc As %Status) As %Net.Remote.Gateway
    Set gateway = ""
    Set sc = ##class(%Net.Remote.Service).OpenGateway(gatewayName, .gatewayConfig)
    Quit:$$$ISERR(sc) gateway
    Set sc = ##class(%Net.Remote.Service).ConnectGateway(gatewayConfig, .gateway, path, $$$YES)
    Quit gateway

/// Write $System.Status.GetErrorText(##class(POI.Utils).Test())
ClassMethod Test() As %Status
    #dim gateway as %Net.Remote.Gateway
    #dim exception as %Exception.AbstractException

    Set sc = $$$OK
    Try {
    Set gateway = ..Connect()
    Set result = ##class(isc.poi.Test).Test(gateway)
    Set exec = "set list = " _ result
    XECUTE exec
    ZWrite list, result

    Set sc = gateway.%Disconnect()

    } Catch ex {
        Set sc = $$$ADDSC(ex.AsStatus(), $g(%objlasterror))

    Quit sc


As you can see in Test method, first I get what JGW returns into result and after that I need to rewrite it into list proper. Here's terminal output:


That seems rather inefficient as I need to:

  • Call Xecute
  • Escape string values manually

Is there a better way to return $lb from Java?

Discussion (3)0
Log in or sign up to continue