我已經寫了下面的示例應用程序創建一個EJB
刻板的將其應用到TimeEntry
類:如何在獨立應用程序中使用EMF創建和應用UML2立體聲類型?
import java.io.File;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.Resource.Factory;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.eclipse.emf.ecore.util.EcoreUtil;
import org.eclipse.uml2.uml.*;
import org.eclipse.uml2.uml.Class;
import org.eclipse.uml2.uml.Package;
import org.eclipse.uml2.uml.UMLPackage.Literals;
import org.eclipse.uml2.uml.resource.UMLResource;
public class SampleProfile
{
private static final ResourceSet RESOURCE_SET = new ResourceSetImpl();
public static void main(String[] args) throws Exception
{
Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
UMLResource.FILE_EXTENSION,
UMLResource.Factory.INSTANCE
);
final Model umlMetamodel = (Model) loadPackage(UMLResource.UML_METAMODEL_URI);
final Model sampleModel = UMLFactory.eINSTANCE.createModel();
sampleModel.setName("Sample Model");
final Profile sampleProfile = UMLFactory.eINSTANCE.createProfile();
sampleProfile.setName("Sample Profile");
final Stereotype ejbStereo = sampleProfile.createOwnedStereotype("EJB");
extendMetaclass(umlMetamodel, sampleProfile, "Class", ejbStereo);
sampleProfile.define();
final Package samplePackage = sampleModel.createNestedPackage("sample");
samplePackage.applyProfile(sampleProfile);
final Class sampleClass = samplePackage.createOwnedClass("TimeEntry", false);
sampleClass.applyStereotype(ejbStereo);
final File outputFile = new File("sample_model.uml");
final URI outputUri = URI.createFileURI(outputFile.getAbsolutePath());
final Resource resource = RESOURCE_SET.createResource(outputUri);
resource.getContents().add(sampleModel);
resource.getContents().add(sampleProfile);
resource.save(null);
}
private static Package loadPackage(final String uri)
{
System.out.println("uri = " + uri);
final Resource resource = RESOURCE_SET.getResource(URI.createURI(uri), true);
EcoreUtil.resolveAll(resource);
return (org.eclipse.uml2.uml.Package) EcoreUtil.getObjectByType(resource.getContents(), Literals.PACKAGE);
}
private static void extendMetaclass(final Model umlMetamodel,
final Profile profile,
final String name,
final Stereotype stereotype)
{
stereotype.createExtension(referenceMetaclass(umlMetamodel, profile, name), true);
}
private static org.eclipse.uml2.uml.Class referenceMetaclass(final Model umlMetamodel,
final Profile profile,
final String name)
{
final Class metaclass = (Class) umlMetamodel.getOwnedType(name);
profile.createMetaclassReference(metaclass);
return metaclass;
}
}
但是運行的應用程序,我在控制檯中此錯誤消息:
uri = pathmap://UML_METAMODELS/UML.metamodel.uml
Exception in thread "main" org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: java.net.MalformedURLException: unknown protocol: pathmap
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397)
任何想法我的代碼可能有什麼問題,以及如何解決這個問題?該應用程序是一個在Eclipse之外運行的命令行應用程序。
也許您可以嘗試在無頭Equinox運行時內將您的命令行應用程序作爲OSGi包運行。通過這種方式,您將獲得像這裏提到的plugin.xml貢獻的所有優點,並仍然在Eclipse UI之外運行。 – 2010-12-07 10:25:16