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( ) );
}
}
}
}