@Override
  protected Map<String, RowMetaInterface> getInputRowMetaInterfaces( GetXMLDataMeta meta ) {
    Map<String, RowMetaInterface> inputRows = getInputFields( meta );
    if ( inputRows == null ) {
      inputRows = new HashMap<>();
    }
    // Get some boolean flags from the meta for easier access
    boolean isInFields = meta.isInFields();
    boolean isAFile = meta.getIsAFile();
    boolean isAUrl = meta.isReadUrl();

    // only add resource fields if we are NOT getting the xml or file from a field
    if ( !isInFields || isAFile || isAUrl ) {
      RowMetaInterface stepFields = getOutputFields( meta );
      RowMetaInterface clone = stepFields.clone();
      // if there are previous steps providing data, we should remove them from the set of "resource" fields
      for ( RowMetaInterface rowMetaInterface : inputRows.values() ) {
        for ( ValueMetaInterface valueMetaInterface : rowMetaInterface.getValueMetaList() ) {
          try {
            clone.removeValueMeta( valueMetaInterface.getName() );
          } catch ( KettleValueException e ) {
            // could not find it in the output, skip it
          }
        }
      }
      inputRows.put( RESOURCE, clone );
    }
    return inputRows;
  }
@Test
  public void testGetInputRowMetaInterfaces_isInFields() throws Exception {
    when( parentTransMeta.getPrevStepNames( Mockito.<StepMeta>any() ) ).thenReturn( null );

    RowMetaInterface rowMetaInterface = mock( RowMetaInterface.class );
    lenient().doReturn( rowMetaInterface ).when( analyzer ).getOutputFields( meta );
    when( meta.isInFields() ).thenReturn( true );
    when( meta.getIsAFile() ).thenReturn( false );
    when( meta.isReadUrl() ).thenReturn( false );

    Map<String, RowMetaInterface> rowMetaInterfaces = analyzer.getInputRowMetaInterfaces( meta );
    assertNotNull( rowMetaInterfaces );
    assertEquals( 0, rowMetaInterfaces.size() );
  }