Initializing help system before first use

Calling Java

Add uses 'mosjvm' to the top of your model then you can call any static Java method by passing its full class and method name to one fo the jvmcall<type> functions, where <type> represents the return type of the function, for example:

model myModel
  uses 'mosjvm'

  writeln('Integer return value=', jvmcallint('com.fico.MyClassName.myIntMethod'))
  writeln('String return value=', jvmcallstr('com.fico.MyClassName.myStringMethod'))
  writeln('Real return value with two parameters=',
          jvmcallreal('com.fico.MyClassName.myRealMethod', 5.7, true))
  writeln('Any object return value=', jvmcallobj('com.fico.MyClassName.myObjMethod'))
end-model

You can call jvmcallvoid if your Java method doesn't return anything. Any number of method arguments may be specified, from the following types:

  • boolean (translates to Java type: boolean)
  • integer (translates to Java type: int)
  • real (translates to Java type: double)
  • string (translates to Java type: java.lang.String)
  • text (translates to Java type: java.lang.String)
  • jvmobject
  • array of boolean (translates to Java type: boolean[])
  • array of integer (translates to Java type: int[])
  • array of real (translates to Java type: double[])
  • array of string (translates to Java type: java.lang.String[])
  • array of text (translates to Java type: java.lang.String[])
  • array of jvmobject (translates to Java type: java.lang.Object[])

Where an argument is an array, it must be indexed by a Mosel range starting from 0, e.g.:

model myModelAr
  uses 'mosjvm'
  declarations
    MyArray: array(range) of string
  end-declarations

  MyArray(0) := "zero"
  MyArray(1) := "one"
  MyArray(2) := "two"

  jvmcallvoid("com.fico.MyClassName.myMethodTakingArrayOfString", MyArray)
end-model

You can call instance methods on a Java object by passing the object reference as the first parameter and method name as second, e.g.:

model myModel
  uses 'mosjvm'

  ! Call static method to get object
  sysprops := jvmcallobj('java.lang.System.getProperties')
  ! Call non-static method on that object
  writeln('java.version property value = ',jvmcallstr(sysprops, 'getProperty', 'java.version'))
end-model