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