NPE in taglib processing.
[java-idp.git] / src / main / java / edu / internet2 / middleware / shibboleth / idp / ui / ServiceNameTag.java
index d68addf..9c5a435 100644 (file)
@@ -22,8 +22,11 @@ import java.net.URISyntaxException;
 import java.util.List;\r
 \r
 import javax.servlet.jsp.JspException;\r
+import javax.servlet.jsp.JspWriter;\r
+import javax.servlet.jsp.tagext.BodyContent;\r
 \r
 import org.opensaml.saml2.metadata.AttributeConsumingService;\r
+import org.opensaml.saml2.metadata.EntityDescriptor;\r
 import org.opensaml.saml2.metadata.LocalizedString;\r
 import org.opensaml.saml2.metadata.RoleDescriptor;\r
 import org.opensaml.saml2.metadata.SPSSODescriptor;\r
@@ -49,13 +52,23 @@ public class ServiceNameTag extends ServiceTagSupport {
     /** Class logger. */\r
     private static Logger log = LoggerFactory.getLogger(ServiceNameTag.class);\r
     \r
+    /** what to emit if the jsp has nothing. */\r
+    private static final String DEFAULT_VALUE = "Unspecified Service Provider";\r
+\r
     /**\r
      * If the entityId can look like a host return that otherwise the string.\r
      * @return either the host or the entityId.\r
      */\r
     private String getNameFromEntityId() {\r
+        EntityDescriptor sp = getSPEntityDescriptor();\r
+        \r
+        if (null == sp) {\r
+            log.debug("No relying party, nothing to display");\r
+            return null;\r
+        }\r
+\r
         try {\r
-            URI entityId = new URI(getSPEntityDescriptor().getEntityID());\r
+            URI entityId = new URI(sp.getEntityID());\r
             String scheme = entityId.getScheme();\r
 \r
             if ("http".equals(scheme) || "https".equals(scheme)) {\r
@@ -65,12 +78,12 @@ public class ServiceNameTag extends ServiceTagSupport {
             // \r
             // It wasn't an URI.  return full entityId.\r
             //\r
-            return getSPEntityDescriptor().getEntityID();\r
+            return sp.getEntityID();\r
         }\r
         //\r
         // not a URL return full entityID\r
         //\r
-        return getSPEntityDescriptor().getEntityID();\r
+        return sp.getEntityID();\r
     }\r
     \r
     /** \r
@@ -110,8 +123,14 @@ public class ServiceNameTag extends ServiceTagSupport {
         String lang = getBrowserLanguage();\r
         List<RoleDescriptor> roles;\r
         AttributeConsumingService acs = null;\r
+        EntityDescriptor sp = getSPEntityDescriptor();\r
+        \r
+        if (null == sp) {\r
+            log.warn("No relying party, nothing to display");\r
+            return null;\r
+        }\r
 \r
-        roles = getSPEntityDescriptor().getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME);\r
+        roles = sp.getRoleDescriptors(SPSSODescriptor.DEFAULT_ELEMENT_NAME);\r
         if (!roles.isEmpty()) {\r
             SPSSODescriptor spssod = (SPSSODescriptor) roles.get(0);\r
             acs = spssod.getDefaultAttributeConsumingService();\r
@@ -146,8 +165,8 @@ public class ServiceNameTag extends ServiceTagSupport {
         // First look for MDUI\r
         //\r
         if (getSPEntityDescriptor() == null) {\r
-            log.warn("No relying party, nothing to display");\r
-            return "";\r
+            log.debug("No relying party, nothing to display");\r
+            return null;\r
         }\r
         //\r
         // Look at <UIInfo>\r
@@ -175,7 +194,24 @@ public class ServiceNameTag extends ServiceTagSupport {
     public int doStartTag() throws JspException {\r
        \r
         try {\r
-            pageContext.getOut().print(getServiceName());\r
+            String serviceName = getServiceName();\r
+            \r
+            if (null == serviceName) {\r
+                BodyContent bc = getBodyContent();\r
+                boolean written = false;\r
+                if (null != bc) {\r
+                    JspWriter ew= bc.getEnclosingWriter();\r
+                    if (ew != null) {\r
+                        bc.writeOut(ew);\r
+                        written = true;\r
+                    }\r
+                }\r
+                if (!written) {\r
+                    pageContext.getOut().print(DEFAULT_VALUE);\r
+                }\r
+            } else {\r
+                pageContext.getOut().print(serviceName);\r
+            }\r
         } catch (IOException e) {\r
             log.warn("Error generating name");\r
             throw new JspException("StartTag", e);\r