Retrieve all metadata from a deployment unit.
beve Apr 23, 2009 10:34 PMHi,
I'm wondering what the correct way of retrieving all metadata from a VFSDeploymentUnit is.
The following test decribes what we are doing.
package org.jboss.deployers.vfs.plugins.structure;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.net.URL;
import java.util.Arrays;
import java.util.List;
import org.jboss.virtual.MemoryFileFactory;
import org.jboss.virtual.VFS;
import org.jboss.virtual.VirtualFile;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
public class AbstractVFSDeploymentContextTest
{
private AbstractVFSDeploymentContext context;
private String fileName = "/WEB-INF/wsdl/test.wsdl";
@BeforeClass
public static void initVFS()
{
VFS.init();
}
@Before
public void populateVirtualFileSystem() throws IOException
{
context = new AbstractVFSDeploymentContext();
URL dynamicClassRoot = new URL("vfsmemory", getClass().getSimpleName(), "");
VirtualFile dynamicClasspathDir = MemoryFileFactory.createRoot(dynamicClassRoot).getRoot();
URL wsdlUrl = new URL(dynamicClassRoot + fileName);
MemoryFileFactory.putFile(wsdlUrl, "wsdlcontent".getBytes());
context.setMetaDataLocations(Arrays.asList(new VirtualFile[] {dynamicClasspathDir}));
}
@Test
public void getMetaDataFile() throws IOException
{
VirtualFile metaDataFile = context.getMetaDataFile(fileName);
assertNotNull(metaDataFile);
}
@Test
public void getMetaDataFiles() throws IOException
{
List<VirtualFile> metaDataFiles = context.getMetaDataFiles(null, "");
assertEquals(1, metaDataFiles.size());
}
@Test
public void getAllMetaDataFiles() throws IOException
{
List<VirtualFile> metaDataFiles = context.getAllMetaDataFiles();
assertEquals(1, metaDataFiles.size());
}
}
Now, the second test method, getMetaDataFiles, fails. This is what we are currently using to retrieve all metadata. Is there another way of retrieving all metadata?
For the third test method I add the following method to AbstractVFSDeploymentContext and it returns all metadata from the deployment context:
public List<VirtualFile> getAllMetaDataFiles()
{
List<VirtualFile> results = new ArrayList<VirtualFile>();
try
{
for (VirtualFile location : metaDataLocations)
{
List<VirtualFile> result = location.getChildren();
if (result != null && result.isEmpty() == false)
{
results.addAll(result);
deployed();
}
}
}
catch(final IOException e)
{
log.debug("Error retrieving all meta data");
}
return results;
}
This is related to this jira: https://jira.jboss.org/jira/browse/JBWS-2619
Thanks,
/Daniel