/** * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER. * * Copyright (c) 2006 Sun Microsystems Inc. All Rights Reserved * * The contents of this file are subject to the terms * of the Common Development and Distribution License * (the License). You may not use this file except in * compliance with the License. * * You can obtain a copy of the License at * https://opensso.dev.java.net/public/CDDLv1.0.html or * opensso/legal/CDDLv1.0.txt * See the License for the specific language governing * permission and limitations under the License. * * When distributing Covered Code, include this CDDL * Header Notice in each file and include the License file * at opensso/legal/CDDLv1.0.txt. * If applicable, add the following below the CDDL Header, * with the fields enclosed by brackets [] replaced by * your own identifying information: * "Portions Copyrighted [year] [name of copyright owner]" * * $Id: Description.java,v 1.2 2008/06/25 05:47:10 qcheng Exp $ * */ package com.sun.identity.liberty.ws.disco; import java.util.Iterator; import java.util.List; import java.util.ArrayList; import java.util.StringTokenizer; import javax.xml.namespace.QName; import org.w3c.dom.*; import com.sun.identity.liberty.ws.disco.common.DiscoConstants; import com.sun.identity.liberty.ws.disco.common.DiscoUtils; import com.sun.identity.shared.xml.XMLUtils; /** * The class Description represents a * Description Type of a service instance. *

The following schema fragment specifies the expected content within the * Description object. *

*

 * <complexType name="DescriptionType">
 *   <complexContent>
 *     <restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       <sequence>
 *         <element name="SecurityMechID" type="{http://www.w3.org/2001/XMLSchema}anyURI" maxOccurs="unbounded"/>
 *         <element name="CredentialRef" type="{http://www.w3.org/2001/XMLSchema}IDREF" maxOccurs="unbounded" minOccurs="0"/>
 *         <choice>
 *           <group ref="{urn:liberty:disco:2003-08}WsdlRef"/>
 *           <group ref="{urn:liberty:disco:2003-08}BriefSoapHttpDescription"/>
 *         </choice>
 *       </sequence>
 *       <attribute name="id" type="{http://www.w3.org/2001/XMLSchema}ID" />
 *     </restriction>
 *   </complexContent>
 * </complexType>
 * 
* * @supported.all.api */ public class Description { private String id = null; private List mechID = null; private List credentialRef = new ArrayList(); private String soapEndpoint = null; private String soapAction = null; private QName serviceNameRef = null; private String wsdlURI = null; /** * Default constructor. */ public Description() {} /** * Constructor. * @param securityMechID List of supported security mechanism ID as String * @param credentialRef List of credential references * @param endPoint SOAP endpoint URI */ public Description (java.util.List securityMechID, java.util.List credentialRef, String endPoint) { mechID = securityMechID; this.credentialRef = credentialRef; soapEndpoint = endPoint; } /** * Constructs a Description object from DOM element. * @param elem DOM Element of Description. * @exception DiscoveryException if error occurs. */ public Description(Element elem) throws DiscoveryException { if (elem == null) { DiscoUtils.debug.message("Description(Element): null input."); throw new DiscoveryException( DiscoUtils.bundle.getString("nullInput")); } String nodeName; String nameSpaceURI; if (((nodeName = elem.getLocalName()) == null) || (!nodeName.equals("Description")) || ((nameSpaceURI = elem.getNamespaceURI()) == null) || (!nameSpaceURI.equals(DiscoConstants.DISCO_NS))) { DiscoUtils.debug.message("Description(Element): wrong input"); throw new DiscoveryException( DiscoUtils.bundle.getString("wrongInput")); } id = elem.getAttribute("id"); NodeList contentnl = elem.getChildNodes(); Node child; for (int i = 0, length = contentnl.getLength(); i < length; i++) { child = contentnl.item(i); if ((nodeName = child.getLocalName()) != null) { nameSpaceURI = ((Element) child).getNamespaceURI(); if ((nameSpaceURI == null) || (!nameSpaceURI.equals(DiscoConstants.DISCO_NS))) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "invalid namespace for node " + nodeName); } throw new DiscoveryException( DiscoUtils.bundle.getString("wrongInput")); } if (nodeName.equals("SecurityMechID")) { String mID = XMLUtils.getElementValue((Element) child); if ((mID == null) || (mID.length() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "missing SecurityMechID value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("emptyElement")); } if (mechID == null) { mechID = new ArrayList(); } mechID.add(mID); } else if (nodeName.equals("CredentialRef")) { String ref = XMLUtils.getElementValue((Element) child); if ((ref == null) || (ref.length() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "missing CredentialRef value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("emptyElement")); } if (credentialRef == null) { credentialRef = new ArrayList(); } credentialRef.add(ref); } else if (nodeName.equals("Endpoint")) { parseEndpoint((Element) child); } else if (nodeName.equals("SoapAction")) { parseSoapAction((Element) child); } else if (nodeName.equals("WsdlURI")) { parseWsdlURI((Element) child); } else if (nodeName.equals("ServiceNameRef")) { parseServiceNameRef((Element) child); } else { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "invalid node" + nodeName); } throw new DiscoveryException( DiscoUtils.bundle.getString("wrongInput")); } } } if ((mechID == null) || (mechID.size() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("ServiceInstance(Element): missing " + "SecurityMechID element."); } throw new DiscoveryException( DiscoUtils.bundle.getString("missingSecurityMechID")); } if ((soapEndpoint == null) && (wsdlURI == null)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("ServiceInstance(Element): missing " + "WsdlRef or BriefSoapHttpDescription."); } throw new DiscoveryException( DiscoUtils.bundle.getString("missingWsdlOrBrief")); } } private void parseEndpoint(Element child) throws DiscoveryException { if ((soapEndpoint != null) || (wsdlURI != null) || (serviceNameRef != null)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "included more Endpoint."); } throw new DiscoveryException( DiscoUtils.bundle.getString("moreElement")); } soapEndpoint = XMLUtils.getElementValue((Element) child); if ((soapEndpoint == null) || (soapEndpoint.length() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "missing Endpoint value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("emptyElement")); } } private void parseSoapAction(Element child) throws DiscoveryException { if ((soapAction != null) || (wsdlURI != null) || (serviceNameRef != null)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "included more SoapAction."); } throw new DiscoveryException( DiscoUtils.bundle.getString("moreElement")); } soapAction = XMLUtils.getElementValue((Element) child); if ((soapAction == null) || (soapAction.length() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "missing SoapAction value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("emptyElement")); } } private void parseWsdlURI(Element child) throws DiscoveryException { if ((soapEndpoint != null) || (wsdlURI != null) || (soapAction != null)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "included more WsdlURI."); } throw new DiscoveryException( DiscoUtils.bundle.getString("moreElement")); } wsdlURI = XMLUtils.getElementValue((Element) child); if ((wsdlURI == null) || (wsdlURI.length() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "missing WsdlURI value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("emptyElement")); } } private void parseServiceNameRef(Element child) throws DiscoveryException { if ((soapEndpoint != null) || (serviceNameRef != null) || (soapAction != null)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "included more WsdlURI."); } throw new DiscoveryException( DiscoUtils.bundle.getString("moreElement")); } String eleValue = XMLUtils.getElementValue(child); if ((eleValue == null) || (eleValue.length() == 0)) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "missing ServiceNameRef value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("emptyElement")); } String localPart = eleValue; String prefix = null; String attrName = "xmlns"; if (eleValue.indexOf(":") != -1) { StringTokenizer st = new StringTokenizer(localPart, ":"); if (st.countTokens() != 2) { if (DiscoUtils.debug.messageEnabled()) { DiscoUtils.debug.message("Description(Element): " + "wrong ServiceNameRef value."); } throw new DiscoveryException( DiscoUtils.bundle.getString("wrongInput")); } prefix = st.nextToken(); attrName = attrName + ":" + prefix; localPart = st.nextToken(); } String namespaceURI = child.getAttribute(attrName); if ((namespaceURI != null) && (namespaceURI.length() != 0)) { if ((prefix != null) && (prefix.length() != 0)) { serviceNameRef = new QName(namespaceURI, localPart, prefix); } else { serviceNameRef = new QName(namespaceURI, localPart); } } else { serviceNameRef = new QName(localPart); } } /** * Gets id attribute. * * @return id attribute. * @see #setId(String) */ public String getId() { return id; } /** * Sets id attribute. * * @param id id attribute. * @see #getId() */ public void setId(String id) { this.id = id; } /** * Gets SOAP action. * * @return SOAP action. * @see #setSoapAction(String) */ public String getSoapAction() { return soapAction; } /** * Sets SOAP action. * @param value SOAP action to be set * @see #getSoapAction() */ public void setSoapAction(String value) { soapAction = value; } /** * Gets supported Security Mechanism IDs. * * @return List of IDs as String for security mechanism * */ public List getSecurityMechID() { return mechID; } /** * Sets supported Security Mechanism IDs. * * @param mechIDs List of IDs as String for security mechanism * */ public void getSecurityMechID(List mechIDs) { mechID = mechIDs; } /** * Gets WSDL service name reference. * * @return WSDL service name reference. * @see #setServiceNameRef(QName) */ public QName getServiceNameRef() { return serviceNameRef; } /** * Sets WSDL service name reference. * * @param nameRef service name reference. * @see #getServiceNameRef() */ public void setServiceNameRef(QName nameRef) { serviceNameRef = nameRef; } /** * Gets URI to WSDL resource containing the service description. * * @return URI to WSDL resource containing the service description. * @see #setWsdlURI(String) */ public String getWsdlURI() { return wsdlURI; } /** * Sets URI to WSDL resource containing the service description. * * @param uri URI to the WSDL resource * @see #getWsdlURI() */ public void setWsdlURI(String uri) { wsdlURI = uri; } /** * Gets the value of the CredentialRef property. * * @return value of the CredentialRef property. * @see #setCredentialRef(List) */ public List getCredentialRef() { return credentialRef; } /** * Sets the value of the CredentialRef property. * * @param refs List of String value of the CredentialRef * property. * @see #getCredentialRef() * */ public void setCredentialRef(List refs) { credentialRef = refs; } /** * Gets SOAP end point URI. * @return SOAP end point URI * @see #setEndpoint(String) */ public String getEndpoint() { return soapEndpoint; } /** * Sets SOAP end point URI. * @param uri end point URI to be set * @see #getEndpoint() */ public void setEndpoint(String uri) { soapEndpoint = uri; } /** * Returns formatted string of the service description. * * @return formatted string of the service description. */ public String toString() { StringBuffer sb = new StringBuffer(500); sb.append(""); if (mechID != null) { Iterator iter = mechID.iterator(); while (iter.hasNext()) { sb.append("").append((String) iter.next()). append(""); } } if (credentialRef != null) { Iterator iter2 = credentialRef.iterator(); while (iter2.hasNext()) { sb.append("").append((String) iter2.next()). append(""); } } if (soapEndpoint != null) { sb.append("").append(soapEndpoint).append(""); if (soapAction != null) { sb.append("").append(soapAction). append(""); } } else { sb.append("").append(wsdlURI).append(""); sb.append(""); if (prefix != null) { sb.append(prefix).append(":"); } sb.append(serviceNameRef.getLocalPart()). append(""); } sb.append(""); return sb.toString(); } }