WSDeploymentDesc.java

00001 
00026 package org.objectweb.jonas_ws.deployment.api;
00027 
00028 import java.util.HashMap;
00029 import java.util.Iterator;
00030 import java.util.List;
00031 import java.util.Map;
00032 import java.util.Set;
00033 import java.util.Vector;
00034 
00035 import org.objectweb.jonas_lib.I18n;
00036 import org.objectweb.jonas_lib.deployment.api.AbsDeploymentDesc;
00037 
00038 import org.objectweb.jonas_ws.deployment.xml.JonasWebserviceDescription;
00039 import org.objectweb.jonas_ws.deployment.xml.JonasWebservices;
00040 import org.objectweb.jonas_ws.deployment.xml.WebserviceDescription;
00041 import org.objectweb.jonas_ws.deployment.xml.Webservices;
00042 
00043 import org.objectweb.util.monolog.api.BasicLevel;
00044 import org.objectweb.util.monolog.api.Logger;
00045 
00054 public class WSDeploymentDesc extends AbsDeploymentDesc {
00055 
00057     private Vector services = new Vector();
00058 
00060     private String displayName;
00061 
00063     private String warFile = null;
00064 
00066     private Logger logger;
00067 
00071     private static I18n i18n = I18n.getInstance(WSDeploymentDesc.class);
00072 
00076     private String contextRoot = null;
00077 
00089     public WSDeploymentDesc(ClassLoader jarCL, Logger log, Webservices ws, JonasWebservices jws)
00090             throws WSDeploymentDescException {
00091         this.logger = log;
00092 
00093         // set displayName
00094         displayName = ws.getDisplayName();
00095 
00096         // Store the WebApp filename
00097         if (jws != null) {
00098             if (jws.getWar() != null) {
00099                 warFile = jws.getWar();
00100             }
00101             // set contextRoot
00102             String ctx = jws.getContextRoot();
00103             if (ctx != null && !"".equals(ctx)) {
00104                 contextRoot = ctx;
00105             }
00106 
00107         }
00108 
00109         // set services
00110         List wdl = ws.getWebserviceDescriptionList();
00111         Map links = associateWDAndJWD(ws, jws);
00112 
00113         for (int i = 0; i < wdl.size(); i++) {
00114             WebserviceDescription wd = (WebserviceDescription) wdl.get(i);
00115             JonasWebserviceDescription jwd = (JonasWebserviceDescription) links.get(wd.getWebserviceDescriptionName());
00116             services.add(new ServiceDesc(jarCL, wd, jwd));
00117         }
00118 
00119         // validation
00120         // services names are unique
00121         // fill the list of service names
00122         Vector serviceNames = new Vector();
00123 
00124         for (int i = 0; i < services.size(); i++) {
00125             String sn = ((ServiceDesc) services.get(i)).getName();
00126 
00127             if (serviceNames.contains(sn)) {
00128                 // if the service name is already contained, it isn't unique
00129                 String err = getI18n().getMessage("WSDeploymentDesc.serviceNameNotUnique", sn); //$NON-NLS-1$
00130                 logger.log(BasicLevel.ERROR, err);
00131                 throw new WSDeploymentDescException(err);
00132             }
00133 
00134             serviceNames.add(sn);
00135         }
00136 
00137         // port components names are unique
00138         // fill the list of port component names
00139         Vector pcNames = new Vector();
00140 
00141         for (int i = 0; i < services.size(); i++) {
00142             ServiceDesc s = (ServiceDesc) services.get(i);
00143             List pcl = s.getPortComponents();
00144 
00145             for (int j = 0; j < pcl.size(); j++) {
00146                 PortComponentDesc pcd = (PortComponentDesc) pcl.get(j);
00147                 String pcn = pcd.getName();
00148 
00149                 if (pcNames.contains(pcn)) {
00150                     // if the port component name is already contained, it isn't
00151                     // unique
00152                     String err = getI18n().getMessage("WSDeploymentDesc.portCompNameNotUnique", pcn); //$NON-NLS-1$
00153                     logger.log(BasicLevel.ERROR, err);
00154                     throw new WSDeploymentDescException(err);
00155                 }
00156 
00157                 pcNames.add(pcn);
00158             }
00159         }
00160 
00161         // verify that all wsdl ports are included inside portComponents
00162         // build the list of port component QNames
00163         Vector pcQNames = new Vector();
00164 
00165         for (int i = 0; i < services.size(); i++) {
00166             List pcl = ((ServiceDesc) services.get(i)).getPortComponents();
00167 
00168             for (int j = 0; j < pcl.size(); j++) {
00169                 PortComponentDesc pc = (PortComponentDesc) pcl.get(j);
00170                 pcQNames.add(pc.getQName());
00171             }
00172         }
00173 
00174         // verify for each WSDLs that port are inside pcQNames
00175         for (int i = 0; i < services.size(); i++) {
00176             WSDLFile wsdlf = ((ServiceDesc) services.get(i)).getWSDL();
00177 
00178             if (!wsdlf.hasPortsIncludedIn(pcQNames)) {
00179                 String err = getI18n().getMessage("WSDeploymentDesc.wsdlDeclareUnknownPort", wsdlf.getName()); //$NON-NLS-1$
00180                 logger.log(BasicLevel.ERROR, err);
00181                 throw new WSDeploymentDescException(err);
00182             }
00183         }
00184     }
00185 
00192     private Map associateWDAndJWD(Webservices ws, JonasWebservices jws) {
00193         Map res = new HashMap();
00194         // for each wsd
00195         for (Iterator i = ws.getWebserviceDescriptionList().iterator(); i.hasNext();) {
00196             WebserviceDescription wsd = (WebserviceDescription) i.next();
00197             res.put(wsd.getWebserviceDescriptionName(), null);
00198         }
00199         // jonas-webservices.xml
00200         if (jws != null) {
00201 
00202             // get all wsd.name
00203             Set keys = res.keySet();
00204 
00205             // for each jwsd
00206             for (Iterator i = jws.getJonasWebserviceDescriptionList().iterator(); i.hasNext();) {
00207                 JonasWebserviceDescription jwsd = (JonasWebserviceDescription) i.next();
00208                 String wsdName = jwsd.getWebserviceDescriptionName();
00209 
00210                 if (keys.contains(wsdName)) {
00211                     // jonas-webservice-description linked to webservice-description
00212                     res.put(wsdName, jwsd);
00213                 } else {
00214                     String err = "jonas-webservice-description '" + wsdName + "' is not linked to any webservice-description. It will be ignored."; //getI18n().getMessage("WSDeploymentDesc.wsdlDeclareUnknownPort", wsdlf.getName());
00215                     logger.log(BasicLevel.WARN, err);
00216                 }
00217             }
00218         }
00219         return res;
00220     }
00221 
00226     public List getServiceDescs() {
00227         return services;
00228     }
00229 
00234     public String getDisplayName() {
00235         return displayName;
00236     }
00237 
00241     public String getContextRoot() {
00242         return contextRoot;
00243     }
00244 
00249     public String toString() {
00250         StringBuffer sb = new StringBuffer();
00251 
00252         sb.append("\nWSDeploymentDesc :"); //$NON-NLS-1$
00253         sb.append("\ngetDisplayName()=" + getDisplayName()); //$NON-NLS-1$
00254 
00255         for (Iterator i = getServiceDescs().iterator(); i.hasNext();) {
00256             sb.append("\ngetServiceDesc()=" + ((ServiceDesc) i.next()).toString()); //$NON-NLS-1$
00257         }
00258 
00259         sb.append("\ngetWarFile()=" + getWarFile()); //$NON-NLS-1$
00260 
00261         return sb.toString();
00262     }
00263 
00271     public String getWarFile() {
00272         return warFile;
00273     }
00274 
00278     protected static I18n getI18n() {
00279         return i18n;
00280     }
00281 }

Generated on Tue Feb 15 15:05:59 2005 for JOnAS by  doxygen 1.3.9.1