| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| |
| package org.apache.axis2.transport.http; |
| |
| import org.apache.axis2.AxisFault; |
| import org.apache.axis2.context.ConfigurationContext; |
| import org.apache.axis2.description.AxisOperation; |
| import org.apache.axis2.description.AxisService; |
| import org.apache.axis2.engine.AxisConfiguration; |
| import org.apache.axis2.util.Utils; |
| |
| import java.util.ArrayList; |
| import java.util.Collection; |
| import java.util.HashMap; |
| import java.util.Hashtable; |
| import java.util.Iterator; |
| import java.util.Map; |
| import java.util.Set; |
| import java.util.TreeSet; |
| |
| |
| /** |
| * Class HTTPTransportReceiver |
| */ |
| public class HTTPTransportReceiver { |
| public static Map getGetRequestParameters(String requestURI) { |
| |
| Map map = new HashMap(); |
| if (requestURI == null || "".equals(requestURI)) { |
| return map; |
| } |
| char[] chars = requestURI.toCharArray(); |
| final int NOT_BEGUN = 1500; |
| final int INSIDE_NAME = 1501; |
| final int INSIDE_VALUE = 1502; |
| int state = NOT_BEGUN; |
| StringBuffer name = new StringBuffer(); |
| StringBuffer value = new StringBuffer(); |
| |
| for (int index = 0; index < chars.length; index++) { |
| if (state == NOT_BEGUN) { |
| if (chars[index] == '?') { |
| state = INSIDE_NAME; |
| } |
| } else if (state == INSIDE_NAME) { |
| if (chars[index] == '=') { |
| state = INSIDE_VALUE; |
| } else { |
| name.append(chars[index]); |
| } |
| } else if (state == INSIDE_VALUE) { |
| if (chars[index] == ',') { |
| state = INSIDE_NAME; |
| map.put(name.toString(), value.toString()); |
| name.delete(0, name.length()); |
| value.delete(0, value.length()); |
| } else { |
| value.append(chars[index]); |
| } |
| } |
| } |
| |
| if (name.length() + value.length() > 0) { |
| map.put(name.toString(), value.toString()); |
| } |
| |
| return map; |
| } |
| |
| /** |
| * Returns the HTML text for the list of services deployed. |
| * This can be delegated to another Class as well |
| * where it will handle more options of GET messages. |
| * |
| * @return Returns String. |
| */ |
| public static String getServicesHTML(ConfigurationContext configurationContext) { |
| String temp = ""; |
| Map services = configurationContext.getAxisConfiguration().getServices(); |
| Hashtable erroneousServices = |
| configurationContext.getAxisConfiguration().getFaultyServices(); |
| boolean status = false; |
| |
| if ((services != null) && !services.isEmpty()) { |
| status = true; |
| Collection serviceCollection = new ArrayList(); |
| // sort services by alphabetical order to show in services page |
| Set<String> allServices = new TreeSet<String>(services.keySet()); |
| for(String serviceName : allServices) { |
| serviceCollection.add(services.get(serviceName)); |
| } |
| |
| temp += "<h2>" + "Deployed services" + "</h2>"; |
| |
| for (Iterator it = serviceCollection.iterator(); it.hasNext();) { |
| |
| AxisService axisService = (AxisService) it.next(); |
| |
| if (!Utils.isHiddenService(axisService)) { |
| Iterator iterator = axisService.getOperations(); |
| |
| temp += "<h3><a href=\"" + axisService.getName() + "?wsdl\">" + |
| axisService.getName() + "</a></h3>"; |
| |
| if (iterator.hasNext()) { |
| temp += "Available operations <ul>"; |
| |
| for (; iterator.hasNext();) { |
| AxisOperation axisOperation = (AxisOperation) iterator.next(); |
| |
| temp += "<li>" + axisOperation.getName().getLocalPart() + "</li>"; |
| } |
| |
| temp += "</ul>"; |
| } else { |
| temp += "No operations specified for this service"; |
| } |
| } |
| } |
| } |
| |
| if ((erroneousServices != null) && !erroneousServices.isEmpty()) { |
| temp += "<hr><h2><font color=\"blue\">Faulty Services</font></h2>"; |
| status = true; |
| |
| // sort faluty services to alphabetical order |
| Set<String> allFaultServices = new TreeSet<String>(erroneousServices.keySet()); |
| for(String faultyserviceName : allFaultServices) { |
| temp += "<h3><font color=\"blue\">" + faultyserviceName + "</font></h3>"; |
| } |
| } |
| |
| if (!status) { |
| temp = "<h2>There are no services deployed</h2>"; |
| } |
| |
| temp = "<html><head><title>Axis2: Services</title></head>" + "<body>" + temp |
| + "</body></html>"; |
| |
| return temp; |
| } |
| |
| // NOTE: This method is no longer used by the standard Axis2 HTTP transport (see WSCOMMONS-405). |
| // However it is still used by Synapse's NIO HTTP transport. |
| public static String printServiceHTML(String serviceName, |
| ConfigurationContext configurationContext) { |
| String temp = ""; |
| try { |
| AxisConfiguration axisConfig = configurationContext.getAxisConfiguration(); |
| AxisService axisService = axisConfig.getService(serviceName); |
| Iterator iterator = axisService.getOperations(); |
| temp += "<h3>" + axisService.getName() + "</h3>"; |
| temp += "<a href=\"" + axisService.getName() + "?wsdl\">wsdl</a> <br/> "; |
| temp += "<i>Service Description : " + axisService.getDocumentation() + |
| "</i><br/><br/>"; |
| if (iterator.hasNext()) { |
| temp += "Available operations <ul>"; |
| for (; iterator.hasNext();) { |
| AxisOperation axisOperation = (AxisOperation) iterator.next(); |
| temp += "<li>" + axisOperation.getName().getLocalPart() + "</li>"; |
| } |
| temp += "</ul>"; |
| } else { |
| temp += "No operations specified for this service"; |
| } |
| temp = "<html><head><title>Axis2: Services</title></head>" + "<body>" + temp |
| + "</body></html>"; |
| } |
| catch (AxisFault axisFault) { |
| temp = "<html><head><title>Service has a fualt</title></head>" + "<body>" |
| + "<hr><h2><font color=\"blue\">" + axisFault.getMessage() + |
| "</font></h2></body></html>"; |
| } |
| return temp; |
| } |
| } |