MantisBT - VTK
View Issue Details
0006723VTK(No Category)public2008-04-07 06:412009-02-03 11:21
Julian Ibarz 
 
normalminoralways
closedfixed 
 
 
0006723: [Wrapping JAVA of VTK] Bug with methods containing character '_'
The JNI library replace all "_" substrings in function names by "_1" and the parser of VTK doesn't do this so this error occurs :

Exception in thread "AWT-EventQueue-0" java.lang.UnsatisfiedLinkError: vtk.vtkSelection.PROCESS_ID_36()J
        at vtk.vtkSelection.PROCESS_ID_36(Native Method)
        at vtk.vtkSelection.PROCESS_ID(vtkSelection.java:471)
        at testvtk.CascadeActorManager.selectOnSurface(CascadeActorManager.java:142)
        at testvtk.TestRubberBand$RubberBandHelper.doSelectionVisible(TestRubberBand.java:71)
        at testvtk.TestRubberBand$RubberBandHelper.mouseReleased(TestRubberBand.java:64)
        at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:273)
        at java.awt.Component.processMouseEvent(Component.java:6038)
        at java.awt.Component.processEvent(Component.java:5803)
        at java.awt.Component.dispatchEventImpl(Component.java:4410)
        at java.awt.Component.dispatchEvent(Component.java:4240)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
BUILD STOPPED (total time: 12 seconds)

Because the real name expected by the JNI is vtk.vtkSelection.PROCESS_1ID_36 and not vtk.vtkSelection.PROCESS_ID_36. This is a program that can cause this :

import vtk.vtkSelection;

public class BugPROPID
{
      static
  {
    System.out.println(System.getProperty("java.library.path"));
    System.loadLibrary("vtkCommonJava");
    System.loadLibrary("vtkFilteringJava");
    System.loadLibrary("vtkIOJava");
    System.loadLibrary("vtkImagingJava");
    System.loadLibrary("vtkGraphicsJava");
    System.loadLibrary("vtkRenderingJava");
  }
  public static void main(String[] args)
  {
            vtkSelection selection = new vtkSelection();
            System.out.println("TEST : " + selection.PROP_ID());
  }
}

I have made a patch to fix it (it add '1' after all '_' in name methods and name classes).
No tags attached.
patch underscore.patch (256,585) 2008-04-07 06:41
https://www.vtk.org/Bug/file/6392/underscore.patch
patch bug.patch (5,874) 2008-04-07 06:54
https://www.vtk.org/Bug/file/6393/bug.patch
patch escapeMethodNameJava.patch (2,575) 2008-07-03 04:35
https://www.vtk.org/Bug/file/6574/escapeMethodNameJava.patch
patch escapeMethodNameJava-2.patch (2,539) 2009-01-12 05:03
https://www.vtk.org/Bug/file/6984/escapeMethodNameJava-2.patch
Issue History
2008-04-07 06:41Julian IbarzNew Issue
2008-04-07 06:41Julian IbarzFile Added: underscore.patch
2008-04-07 06:54Julian IbarzFile Added: bug.patch
2008-04-07 06:55Julian IbarzNote Added: 0011076
2008-04-28 03:43Jerome RobertNote Added: 0011562
2008-07-03 04:35dbarbierFile Added: escapeMethodNameJava.patch
2008-07-03 04:39dbarbierNote Added: 0012603
2009-01-12 05:03dbarbierFile Added: escapeMethodNameJava-2.patch
2009-01-12 05:07dbarbierNote Added: 0014527
2009-02-03 11:21Jeff BaumesNote Added: 0014764
2009-02-03 11:21Jeff BaumesStatusbacklog => closed
2009-02-03 11:21Jeff BaumesResolutionopen => fixed
2011-06-16 13:11Zack GalbreathCategory => (No Category)

Notes
(0011076)
Julian Ibarz   
2008-04-07 06:55   
I have made a light patch bug.patch.
(0011562)
Jerome Robert   
2008-04-28 03:43   
The severity of this bug should be changed to "crash".
(0012603)
dbarbier   
2008-07-03 04:39   
Hi there, explanations about JNI name mangling can be found at
  http://java.sun.com/javase/6/docs/technotes/guides/jni/spec/design.html#wp133 [^]
So the fix is quite trivial, as reported by julianibarz, underscores
have to be replaced by "_1" in class and method names.
Since VTK class names contain no underscore, I propose a less
intrusive patch escapeMethodNameJava.patch to deal only with
method names, maybe you will like it more? This patch is very
safe, it is pretty obvious that nothing changes when method
name does not contain an underscore.

Below is the list of symbols which are currently not available
from Java:
   vtkAlgorithm::INPUT_ARRAYS_TO_PROCESS
   vtkAlgorithm::INPUT_CONNECTION
   vtkAlgorithm::INPUT_IS_OPTIONAL
   vtkAlgorithm::INPUT_IS_REPEATABLE
   vtkAlgorithm::INPUT_PORT
   vtkAlgorithm::INPUT_REQUIRED_DATA_TYPE
   vtkAlgorithm::INPUT_REQUIRED_FIELDS
   vtkClipPlanesPainter::CLIPPING_PLANES
   vtkCoincidentTopologyResolutionPainter::POLYGON_OFFSET_FACES
   vtkCoincidentTopologyResolutionPainter::POLYGON_OFFSET_PARAMETERS
   vtkCoincidentTopologyResolutionPainter::RESOLVE_COINCIDENT_TOPOLOGY
   vtkCoincidentTopologyResolutionPainter::Z_SHIFT
   vtkCompositeDataPipeline::REQUIRES_TIME_DOWNSTREAM
   vtkCompositePainter::COLOR_LEAVES
   vtkDataArray::COMPONENT_RANGE
   vtkDataArray::L2_NORM_RANGE
   vtkDataArray::PER_COMPONENT
   vtkDataObject::CELL_DATA_VECTOR
   vtkDataObject::DATA_EXTENT
   vtkDataObject::DATA_EXTENT_TYPE
   vtkDataObject::DATA_GEOMETRY_UNMODIFIED
   vtkDataObject::DATA_NUMBER_OF_GHOST_LEVELS
   vtkDataObject::DATA_NUMBER_OF_PIECES
   vtkDataObject::DATA_OBJECT
   vtkDataObject::DATA_PIECE_NUMBER
   vtkDataObject::DATA_TIME_STEPS
   vtkDataObject::DATA_TYPE_NAME
   vtkDataObject::EDGE_DATA_VECTOR
   vtkDataObject::FIELD_ACTIVE_ATTRIBUTE
   vtkDataObject::FIELD_ARRAY_TYPE
   vtkDataObject::FIELD_ASSOCIATION
   vtkDataObject::FIELD_ATTRIBUTE_TYPE
   vtkDataObject::FIELD_NAME
   vtkDataObject::FIELD_NUMBER_OF_COMPONENTS
   vtkDataObject::FIELD_NUMBER_OF_TUPLES
   vtkDataObject::FIELD_OPERATION
   vtkDataObject::FIELD_RANGE
   vtkDataObject::POINT_DATA_VECTOR
   vtkDataObject::VERTEX_DATA_VECTOR
   vtkDemandDrivenPipeline::DATA_NOT_GENERATED
   vtkDemandDrivenPipeline::RELEASE_DATA
   vtkDemandDrivenPipeline::REQUEST_DATA
   vtkDemandDrivenPipeline::REQUEST_DATA_NOT_GENERATED
   vtkDemandDrivenPipeline::REQUEST_DATA_OBJECT
   vtkDemandDrivenPipeline::REQUEST_INFORMATION
   vtkDisplayListPainter::IMMEDIATE_MODE_RENDERING
   vtkExecutive::ALGORITHM_AFTER_FORWARD
   vtkExecutive::ALGORITHM_BEFORE_FORWARD
   vtkExecutive::ALGORITHM_DIRECTION
   vtkExecutive::FORWARD_DIRECTION
   vtkExecutive::FROM_OUTPUT_PORT
   vtkExecutive::KEYS_TO_COPY
   vtkHierarchicalBoxDataSet::NUMBER_OF_BLANKED_POINTS
   vtkHierarchicalBoxDataSet::REFINEMENT_RATIO
   vtkPainter::CONSERVE_MEMORY
   vtkPainter::HIGH_QUALITY
   vtkPainter::STATIC_DATA
   vtkPolyDataPainter::BUILD_NORMALS
   vtkPolyDataPainter::DATA_ARRAY_TO_VERTEX_ATTRIBUTE
   vtkPolyDataPainter::DISABLE_SCALAR_COLOR
   vtkScalarsToColorsPainter::ARRAY_ACCESS_MODE
   vtkScalarsToColorsPainter::ARRAY_COMPONENT
   vtkScalarsToColorsPainter::ARRAY_ID
   vtkScalarsToColorsPainter::ARRAY_NAME
   vtkScalarsToColorsPainter::COLOR_MODE
   vtkScalarsToColorsPainter::INTERPOLATE_SCALARS_BEFORE_MAPPING
   vtkScalarsToColorsPainter::LOOKUP_TABLE
   vtkScalarsToColorsPainter::SCALAR_MATERIAL_MODE
   vtkScalarsToColorsPainter::SCALAR_MODE
   vtkScalarsToColorsPainter::SCALAR_RANGE
   vtkScalarsToColorsPainter::SCALAR_VISIBILITY
   vtkScalarsToColorsPainter::USE_LOOKUP_TABLE_SCALAR_RANGE
   vtkSelection::COMPOSITE_INDEX
   vtkSelection::CONTAINING_CELLS
   vtkSelection::CONTENT_TYPE
   vtkSelection::FIELD_TYPE
   vtkSelection::HIERARCHICAL_INDEX
   vtkSelection::HIERARCHICAL_LEVEL
   vtkSelection::INDEXED_VERTICES
   vtkSelection::PIXEL_COUNT
   vtkSelection::PROCESS_ID
   vtkSelection::PROP_ID
   vtkSelection::SOURCE_ID
   vtkStreamingDemandDrivenPipeline::CONTINUE_EXECUTING
   vtkStreamingDemandDrivenPipeline::EXACT_EXTENT
   vtkStreamingDemandDrivenPipeline::EXTENT_TRANSLATOR
   vtkStreamingDemandDrivenPipeline::FAST_PATH_FOR_TEMPORAL_DATA
   vtkStreamingDemandDrivenPipeline::FAST_PATH_ID_TYPE
   vtkStreamingDemandDrivenPipeline::FAST_PATH_OBJECT_ID
   vtkStreamingDemandDrivenPipeline::FAST_PATH_OBJECT_TYPE
   vtkStreamingDemandDrivenPipeline::MAXIMUM_NUMBER_OF_PIECES
   vtkStreamingDemandDrivenPipeline::REQUEST_UPDATE_EXTENT
   vtkStreamingDemandDrivenPipeline::REQUEST_UPDATE_EXTENT_INFORMATION
   vtkStreamingDemandDrivenPipeline::TIME_RANGE
   vtkStreamingDemandDrivenPipeline::TIME_STEPS
   vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT
   vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT_INITIALIZED
   vtkStreamingDemandDrivenPipeline::UPDATE_EXTENT_TRANSLATED
   vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_GHOST_LEVELS
   vtkStreamingDemandDrivenPipeline::UPDATE_NUMBER_OF_PIECES
   vtkStreamingDemandDrivenPipeline::UPDATE_PIECE_NUMBER
   vtkStreamingDemandDrivenPipeline::UPDATE_TIME_STEPS
   vtkStreamingDemandDrivenPipeline::WHOLE_BOUNDING_BOX
   vtkStreamingDemandDrivenPipeline::WHOLE_EXTENT
Thanks.
(0014527)
dbarbier   
2009-01-12 05:07   
escapeMethodNameJava-2.patch has been uploaded to fix a build failure
with escapeMethodNameJava.patch with non-gcc compilers. Thanks to
Matthias Baitsch for reporting this issue.
(0014764)
Jeff Baumes   
2009-02-03 11:21   
The following commit fixes the issue, using escapeMethodNameJava-2.patch. Thanks for reporting this and submitting a fix!

/cvsroot/VTK/VTK/Wrapping/vtkWrapJava.c,v <-- Wrapping/vtkWrapJava.c
new revision: 1.62; previous revision: 1.61