Snappy run maximum likelihood classification

Well, I rewrote the script.

import snappy
from snappy import ProductIO, GPF, jpy
red = ProductIO.readProduct(‘D:\tmp\T41VPD_20170603T065021_B04.jp2’)
green = ProductIO.readProduct(‘D:\tmp\T41VPD_20170603T065021_B03.jp2’)
blue = ProductIO.readProduct(‘D:\tmp\T41VPD_20170603T065021_B02.jp2’)
forest = ‘D:\tmp\forest_Polygon.shp’
houses = ‘D:\tmp\houses_Polygon.shp’
GPF.getDefaultInstance().getOperatorSpiRegistry().loadOperatorSpis()
HashMap = jpy.get_type(‘java.util.HashMap’)
sourceProducts= HashMap()
sourceProducts.put(‘masterProduct’, red)
sourceProducts.put(‘slaveProduct1’, green)
sourceProducts.put(‘slaveProduct2’, blue)
NodeDescriptor = jpy.get_type(‘org.esa.snap.core.gpf.common.MergeOp$NodeDescriptor’)
include_1 = NodeDescriptor()
include_1.setProductId(‘masterProduct’)
include_1.setNamePattern(‘band_1’)
include_1.setNewName(‘red’)
include_2 = NodeDescriptor()
include_2.setProductId(‘slaveProduct1’)
include_2.setName(‘band_1’)
include_2.setNewName(‘green’)
include_3 = NodeDescriptor()
include_3.setProductId(‘slaveProduct2’)
include_3.setName(‘band_1’)
include_3.setNewName(‘blue’)
included_bands = jpy.array(‘org.esa.snap.core.gpf.common.MergeOp$NodeDescriptor’, 3)
included_bands[0] = include_1
included_bands[1] = include_2
included_bands[2] = include_3
parameters = HashMap()
parameters.put(‘includes’, included_bands)
mergedProduct = GPF.createProduct(‘Merge’, parameters, sourceProducts)
def loadVector(file, product):
HashMap = jpy.get_type(‘java.util.HashMap’)
parameters = HashMap()
parameters.put(‘vectorFile’, file)
parameters.put(‘separateShapes’, False)
result = GPF.createProduct(‘Import-Vector’, parameters, product)
return result
result = loadVector(forest, mergedProduct)
result = loadVector(houses, result)
classifierParameters = HashMap()
classifierParameters.put(‘trainOnRaster’, False)
classifierParameters.put(‘featureBands’, ‘,’.join([result.getBandAt(0).getName(),result.getBandAt(1).getName(),result.getBandAt(2).getName()]))
classifierParameters.put(‘trainingVectors’, ‘forest_Polygon,houses_Polygon’)
print classifierParameters
classifierResult = GPF.createProduct(‘Maximum-Likelihood-Classifier’, classifierParameters, result)
print classifierResult

I get a product with 3 bands and 2 training vectors.
After I set the parameters and run the algorithm, I get the error RuntimeError: org.esa.snap.core.gpf.OperatorException: java.lang.NillPointerseseption
If write down the product and run the algorithm in the UI Snap, then the classification is done.
Maybe I’m not setting the parameters correctly?