Good morning -

I'm trying to set a custom directory for blob files corresponding to xs:anyUri 
elements to be written to.  Despite setting a custom directory, prefix and 
suffix via XMLTextInfosetOutputter.setBlobAttributes(), the files are still 
written to /tmp and do not use the prefix and suffix I specified.  
Additionally, when I call xMLTextInfosetOutputter.getBlobPaths() after parsing, 
the list of files is empty despite files having been written.   Example code 
shown below.  Am I doing something incorrectly?  I could not find an example.  
I'm using the Java API.

Thanks,
Lara

public void parse ( String schema, String inFile, String outFile, String 
uriDirectory ) throws Exception
{
    Compiler compiler = Daffodil.compiler( );
    ProcessorFactory pf = compiler.compileFile( new File( schema ) );
    if ( pf.isError( ) )
    {
      System.err.println( "Failed to load schema: " + schema + ", " + asString( 
pf.getDiagnostics( ) ) );
    }
    else
    {
      DataProcessor processor = pf.onPath( "/" );
      try
      {
        processor = processor.withValidationMode( ValidationMode.Full );
      }
      catch ( InvalidUsageException ex )
      {
        throw new Exception( "Invalid validation mode: " + ex.getMessage( ), ex 
);
      }

      try ( FileInputStream fis = new FileInputStream( new File ( inFile ) );
              FileOutputStream fos = new FileOutputStream( new File( outFile )  
) )
      {
        InputSourceDataInputStream dis = new InputSourceDataInputStream( fis );
        XMLTextInfosetOutputter xto = new XMLTextInfosetOutputter( fos, false );

        // write blobs from anyURI elements to uriDirectory with extension dab 
(daffodil blob )
       Path uriPath = Paths.get( uriDirectory );
        if ( !Files.exists( uriPath ) )
        {
          throw new IOException( uriDirectory + " directory does not exist" );
        }

        String prefix = "dfdltoxml";
        String suffix = "dab";
        xto.setBlobAttributes( uriPath, prefix, suffix );

        ParseResult result = processor.parse( dis, xto );
        if ( result.isError( ) )
        {
          throw new Exception( "Parse error" );
       }

        // get list of blbos written to uri directory
        List<Path> blobPaths = JavaConverters.seqAsJavaList( xto.getBlobPaths( 
) );

        System.out.println( "Blob files written:" );
        for ( Path p : blobPaths )
        {
         System.out.println( p.toString( ) );
        }
      }
    }
}


Reply via email to