[227442] NPE
diff --git a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java index b7aac76..cc2b001 100644 --- a/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java +++ b/plugins/org.eclipse.jst.j2ee/j2eecreation/org/eclipse/jst/j2ee/internal/componentcore/JavaEEBinaryComponentHelper.java
@@ -17,12 +17,21 @@ import org.eclipse.jst.j2ee.internal.J2EEConstants; import org.eclipse.jst.j2ee.internal.archive.JavaEEArchiveUtilities; import org.eclipse.jst.j2ee.internal.plugin.J2EEPlugin; +import org.eclipse.jst.javaee.applicationclient.ApplicationClient; +import org.eclipse.jst.javaee.applicationclient.ApplicationclientFactory; +import org.eclipse.jst.javaee.core.DisplayName; +import org.eclipse.jst.javaee.core.JavaeeFactory; +import org.eclipse.jst.javaee.ejb.EJBJar; +import org.eclipse.jst.javaee.ejb.EjbFactory; +import org.eclipse.jst.javaee.web.WebApp; +import org.eclipse.jst.javaee.web.WebFactory; import org.eclipse.jst.jee.archive.ArchiveModelLoadException; import org.eclipse.jst.jee.archive.ArchiveOpenFailureException; import org.eclipse.jst.jee.archive.ArchiveOptions; import org.eclipse.jst.jee.archive.IArchive; import org.eclipse.jst.jee.archive.IArchiveFactory; import org.eclipse.jst.jee.util.internal.JavaEEQuickPeek; +import org.eclipse.wst.common.componentcore.ComponentCore; import org.eclipse.wst.common.componentcore.internal.BinaryComponentHelper; import org.eclipse.wst.common.componentcore.resources.IVirtualComponent; import org.eclipse.wst.common.componentcore.resources.IVirtualReference; @@ -38,7 +47,7 @@ try { helper = new JavaEEBinaryComponentHelper(aBinaryComponent); IArchive archive = helper.getArchive(); - if(archive == null){ + if (archive == null) { return new JavaEEQuickPeek(null); } JavaEEQuickPeek qp = JavaEEArchiveUtilities.INSTANCE.getJavaEEQuickPeek(archive); @@ -73,10 +82,44 @@ break; } if (ddPath != null) { - try { - return (EObject) getArchive().getModelObject(ddPath); - } catch (ArchiveModelLoadException e) { - J2EEPlugin.logError(e); + if (getArchive().containsArchiveResource(ddPath)) { + try { + return (EObject) getArchive().getModelObject(ddPath); + } catch (ArchiveModelLoadException e) { + J2EEPlugin.logError(e); + } + } else { + String displayName = getComponent().getName(); + //because this component is binary, its project must be the EAR. + IVirtualComponent earComponent = ComponentCore.createComponent(getComponent().getProject()); + IVirtualReference [] refs = earComponent.getReferences(); + for(IVirtualReference ref:refs){ + if(ref.getReferencedComponent().equals(getComponent())){ + displayName = ref.getArchiveName(); + break; + } + } + DisplayName dn = JavaeeFactory.eINSTANCE.createDisplayName(); + dn.setValue(displayName); + EObject root = null; + switch (qp.getType()) { + case JavaEEQuickPeek.APPLICATION_CLIENT_TYPE: + ApplicationClient applicationClient = ApplicationclientFactory.eINSTANCE.createApplicationClient(); + applicationClient.getDisplayNames().add(dn); + root = (EObject) applicationClient; + break; + case JavaEEQuickPeek.EJB_TYPE: + EJBJar ejbJar = EjbFactory.eINSTANCE.createEJBJar(); + ejbJar.getDisplayNames().add(dn); + root = (EObject) ejbJar; + break; + case JavaEEQuickPeek.WEB_TYPE: + WebApp webApp = WebFactory.eINSTANCE.createWebApp(); + webApp.getDisplayNames().add(dn); + root = (EObject) webApp; + break; + } + return root; } } return null;