All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.apache.axis2.deployment.util.Utils Maven / Gradle / Ivy

Go to download

Core Parts of Axis2. This includes Axis2 engine, Client API, Addressing support, etc.,

There is a newer version: 1.8.2
Show newest version
/*
 * 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.deployment.util;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.soap.SOAP11Constants;
import org.apache.axiom.soap.SOAP12Constants;
import org.apache.axis2.AxisFault;
import org.apache.axis2.classloader.JarFileClassLoader;
import org.apache.axis2.Constants;
import org.apache.axis2.context.ConfigurationContext;
import org.apache.axis2.deployment.DeploymentClassLoader;
import org.apache.axis2.deployment.DeploymentConstants;
import org.apache.axis2.deployment.DeploymentException;
import org.apache.axis2.deployment.repository.util.ArchiveReader;
import org.apache.axis2.deployment.repository.util.DeploymentFileData;
import org.apache.axis2.description.*;
import org.apache.axis2.description.java2wsdl.DefaultSchemaGenerator;
import org.apache.axis2.description.java2wsdl.DocLitBareSchemaGenerator;
import org.apache.axis2.description.java2wsdl.Java2WSDLConstants;
import org.apache.axis2.description.java2wsdl.SchemaGenerator;
import org.apache.axis2.engine.AxisConfiguration;
import org.apache.axis2.engine.Handler;
import org.apache.axis2.engine.MessageReceiver;
import org.apache.axis2.util.JavaUtils;
import org.apache.axis2.util.Loader;
import org.apache.axis2.util.PolicyUtil;
import org.apache.axis2.wsdl.WSDLConstants;
import org.apache.axis2.wsdl.WSDLUtil;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.neethi.PolicyComponent;
import org.apache.ws.commons.schema.utils.NamespaceMap;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.namespace.QName;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLStreamException;
import java.io.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.URLDecoder;
import java.security.AccessController;
import java.security.PrivilegedAction;
import java.security.PrivilegedActionException;
import java.security.PrivilegedExceptionAction;
import java.util.*;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

public class Utils {

    public static String defaultEncoding = new OutputStreamWriter(System.out).getEncoding();

    private static Log log = LogFactory.getLog(Utils.class);

    public static void addFlowHandlers(Flow flow, ClassLoader clsLoader)
            throws AxisFault {
        int count = flow.getHandlerCount();

        for (int j = 0; j < count; j++) {
            HandlerDescription handlermd = flow.getHandler(j);
            Handler handler;

            final Class handlerClass = getHandlerClass(
                    handlermd.getClassName(), clsLoader);

            try {
                handler = (Handler)org.apache.axis2.java.security.AccessController
                        .doPrivileged(new PrivilegedExceptionAction() {
                            public Object run() throws InstantiationException,
                                    IllegalAccessException {
                                return handlerClass.newInstance();
                            }
                        });
                handler.init(handlermd);
                handlermd.setHandler(handler);
            } catch (PrivilegedActionException e) {
                throw AxisFault.makeFault(e);
            }
        }
    }

    public static boolean loadHandler(ClassLoader loader1,
                                      HandlerDescription desc) throws DeploymentException {
        String handlername = desc.getClassName();
        Handler handler;
        try {
            final Class handlerClass = Loader.loadClass(loader1, handlername);
            Package aPackage = (Package)org.apache.axis2.java.security.AccessController
                    .doPrivileged(new PrivilegedAction() {
                        public Object run() {
                            return handlerClass.getPackage();
                        }
                    });
            if (aPackage != null
                && aPackage.getName().equals("org.apache.axis2.engine")) {
                String name = handlerClass.getName();
                log.warn("Dispatcher " + name + " is now deprecated.");
                if (name.indexOf("InstanceDispatcher") != -1) {
                    log.warn("Please remove the entry for "
                             + handlerClass.getName() + "from axis2.xml");
                } else {
                    log.warn(
                            "Please edit axis2.xml and replace with the same class in org.apache.axis2.dispatchers package");
                }
            }
            handler = (Handler)org.apache.axis2.java.security.AccessController
                    .doPrivileged(new PrivilegedExceptionAction() {
                        public Object run() throws InstantiationException,
                                IllegalAccessException {
                            return handlerClass.newInstance();
                        }
                    });
            handler.init(desc);
            desc.setHandler(handler);
        } catch (ClassNotFoundException e) {
            if (handlername.indexOf("jaxws") > 0) {
                log.warn("[JAXWS] - unable to load " + handlername);
                return false;
            }
            throw new DeploymentException(e);
        } catch (Exception e) {
            throw new DeploymentException(e);
        }
        return true;
    }

    public static URL[] getURLsForAllJars(URL url, File tmpDir) {
        FileInputStream fin = null;
        InputStream in = null;
        ZipInputStream zin = null;
        try {
            ArrayList array = new ArrayList();
            in = url.openStream();
            String fileName = url.getFile();
            int index = fileName.lastIndexOf('/');
            if (index != -1) {
                fileName = fileName.substring(index + 1);
            }
            final File f = createTempFile(fileName, in, tmpDir);

            fin = (FileInputStream)org.apache.axis2.java.security.AccessController
                    .doPrivileged(new PrivilegedExceptionAction() {
                        public Object run() throws FileNotFoundException {
                            return new FileInputStream(f);
                        }
                    });
            array.add(f.toURL());
            zin = new ZipInputStream(fin);

            ZipEntry entry;
            String entryName;
            while ((entry = zin.getNextEntry()) != null) {
                entryName = entry.getName();
                /**
                 * id the entry name start with /lib and end with .jar then
                 * those entry name will be added to the arraylist
                 */
                if ((entryName != null)
                    && entryName.toLowerCase().startsWith("lib/")
                    && entryName.toLowerCase().endsWith(".jar")) {
                    String suffix = entryName.substring(4);
                    File f2 = createTempFile(suffix, zin, tmpDir);
                    array.add(f2.toURL());
                }
            }
            return (URL[])array.toArray(new URL[array.size()]);
        } catch (Exception e) {
            throw new RuntimeException(e);
        } finally {
            if (fin != null) {
                try {
                    fin.close();
                } catch (IOException e) {
                    //
                }
            }
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    //
                }
            }
            if (zin != null) {
                try {
                    zin.close();
                } catch (IOException e) {
                    //
                }
            }
        }
    }

    public static File createTempFile(final String suffix, InputStream in,
                                      final File tmpDir) throws IOException {
        byte data[] = new byte[2048];
        int count;
        File f = TempFileManager.createTempFile("axis2", suffix);
        
//        if (tmpDir == null) {
//            String directory = (String)org.apache.axis2.java.security.AccessController
//                    .doPrivileged(new PrivilegedAction() {
//                        public Object run() {
//                            return System.getProperty("java.io.tmpdir");
//                        }
//                    });
//            final File tempFile = new File(directory, "_axis2");
//            Boolean exists = (Boolean)org.apache.axis2.java.security.AccessController
//                    .doPrivileged(new PrivilegedAction() {
//                        public Object run() {
//                            return tempFile.exists();
//                        }
//                    });
//            if (!exists) {
//                Boolean mkdirs = (Boolean)org.apache.axis2.java.security.AccessController
//                        .doPrivileged(new PrivilegedAction() {
//                            public Object run() {
//                                return tempFile.mkdirs();
//                            }
//                        });
//                if (!mkdirs) {
//                    throw new IOException("Unable to create the directory");
//                }
//            }
//            try {
//                f = (File)org.apache.axis2.java.security.AccessController
//                        .doPrivileged(new PrivilegedExceptionAction() {
//                            public Object run() throws IOException {
//                                return File.createTempFile("axis2", suffix,
//                                                           tempFile);
//                            }
//                        });
//                f.deleteOnExit();
//            } catch (PrivilegedActionException e) {
//                throw (IOException)e.getException();
//            }
//        } else {
//            try {
//                f = (File)org.apache.axis2.java.security.AccessController
//                        .doPrivileged(new PrivilegedExceptionAction() {
//                            public Object run() throws IOException {
//                                return File.createTempFile("axis2", suffix,
//                                                           tmpDir);
//                            }
//                        });
//                f.deleteOnExit();
//            } catch (PrivilegedActionException e) {
//                throw (IOException)e.getException();
//            }
//        }
//        if (log.isDebugEnabled()) {
//            log.debug("Created temporary file : " + f.getAbsolutePath());// $NON-SEC-4
//        }
//        final File f2 = f;
//        org.apache.axis2.java.security.AccessController
//                .doPrivileged(new PrivilegedAction() {
//                    public Object run() {
//                        f2.deleteOnExit();
//                        return null;
//                    }
//                });
        FileOutputStream out;
        final File f2 = f;
        try {
            out = (FileOutputStream)org.apache.axis2.java.security.AccessController
                    .doPrivileged(new PrivilegedExceptionAction() {
                        public Object run() throws FileNotFoundException {
                            return new FileOutputStream(f2);
                        }
                    });
        } catch (PrivilegedActionException e) {
            throw (FileNotFoundException)e.getException();
        }
        while ((count = in.read(data, 0, 2048)) != -1) {
            out.write(data, 0, count);
        }
        out.close();
        return f;
    }

    public static ClassLoader getClassLoader(ClassLoader parent, String path)
            throws DeploymentException {
        return getClassLoader(parent, new File(path));
    }

    /**
     * Get a ClassLoader which contains a classpath of a) the passed directory and b) any jar files
     * inside the "lib/" or "Lib/" subdirectory of the passed directory.
     *
     * @param parent parent ClassLoader which will be the parent of the result of this method
     * @param file   a File which must be a directory for this to be useful
     * @return a new ClassLoader pointing to both the passed dir and jar files under lib/
     * @throws DeploymentException if problems occur
     */
    public static ClassLoader getClassLoader(final ClassLoader parent, File file)
            throws DeploymentException {
        URLClassLoader classLoader;

        if (file == null)
            return null; // Shouldn't this just return the parent?

        try {
            ArrayList urls = new ArrayList();
            urls.add(file.toURL());

            // lower case directory name
            File libfiles = new File(file, "lib");
            if (!addFiles(urls, libfiles)) {
                // upper case directory name
                libfiles = new File(file, "Lib");
                addFiles(urls, libfiles);
            }

            final URL urllist[] = new URL[urls.size()];
            for (int i = 0; i < urls.size(); i++) {
                urllist[i] = (URL)urls.get(i);
            }
            classLoader = (URLClassLoader)AccessController
                    .doPrivileged(new PrivilegedAction() {
                        public Object run() {
                            if (useJarFileClassLoader()) {
                                return new JarFileClassLoader(urllist, parent);
                            } else {
                                return new URLClassLoader(urllist, parent);
                            }
                        }
                    });
            return classLoader;
        } catch (MalformedURLException e) {
            throw new DeploymentException(e);
        }
    }

    private static boolean useJarFileClassLoader() {
        // The JarFileClassLoader was created to address a locking problem seen only on Windows platforms.
        // It carries with it a slight performance penalty that needs to be addressed.  Rather than make
        // *nix OSes carry this burden we'll engage the JarFileClassLoader for Windows or if the user 
        // specifically requests it.
        boolean useJarFileClassLoader;
        if (System.getProperty("org.apache.axis2.classloader.JarFileClassLoader") == null) {
            useJarFileClassLoader = System.getProperty("os.name").startsWith("Windows");
        } else {
            useJarFileClassLoader = Boolean.getBoolean("org.apache.axis2.classloader.JarFileClassLoader");
        }
        return useJarFileClassLoader;
    }
    
    private static boolean addFiles(ArrayList urls, final File libfiles)
            throws MalformedURLException {
        Boolean exists = (Boolean)org.apache.axis2.java.security.AccessController
                .doPrivileged(new PrivilegedAction() {
                    public Object run() {
                        return libfiles.exists();
                    }
                });
        if (exists) {
            urls.add(libfiles.toURL());
            File jarfiles[] = (File[])org.apache.axis2.java.security.AccessController
                    .doPrivileged(new PrivilegedAction() {
                        public Object run() {
                            return libfiles.listFiles();
                        }
                    });
            int i = 0;
            while (i < jarfiles.length) {
                File jarfile = jarfiles[i];
                if (jarfile.getName().endsWith(".jar")) {
                    urls.add(jarfile.toURL());
                }
                i++;
            }
        }
        return exists;
    }

    private static Class getHandlerClass(String className, ClassLoader loader1)
            throws AxisFault {
        Class handlerClass;

        try {
            handlerClass = Loader.loadClass(loader1, className);
        } catch (ClassNotFoundException e) {
            throw AxisFault.makeFault(e);
        }

        return handlerClass;
    }

    /**
     * This guy will create a AxisService using java reflection
     *
     * @param axisService       the target AxisService
     * @param axisConfig        the in-scope AxisConfiguration
     * @param excludeOperations a List of Strings (or null), each containing a method to exclude
     * @param nonRpcMethods     a List of Strings (or null), each containing a non-rpc method name
     * @throws Exception if a problem occurs
     */
    public static void fillAxisService(final AxisService axisService,
                                       AxisConfiguration axisConfig, ArrayList excludeOperations,
                                       ArrayList nonRpcMethods) throws Exception {
        String serviceClass;
        Parameter implInfoParam = axisService
                .getParameter(Constants.SERVICE_CLASS);
        ClassLoader serviceClassLoader = axisService.getClassLoader();

        if (implInfoParam != null) {
            serviceClass = (String)implInfoParam.getValue();
        } else {
            // if Service_Class is null, every AbstractMR will look for
            // ServiceObjectSupplier. This is user specific and may contain
            // other looks.
            implInfoParam = axisService
                    .getParameter(Constants.SERVICE_OBJECT_SUPPLIER);
            if (implInfoParam != null) {
                String className = ((String)implInfoParam.getValue()).trim();
                final Class serviceObjectMaker = Loader.loadClass(
                        serviceClassLoader, className);
                if (serviceObjectMaker.getModifiers() != Modifier.PUBLIC) {
                    throw new AxisFault("Service class " + className
                                        + " must have public as access Modifier");
                }

                // Find static getServiceObject() method, call it if there
                final Method method = (Method)org.apache.axis2.java.security.AccessController
                        .doPrivileged(new PrivilegedExceptionAction() {
                            public Object run() throws NoSuchMethodException {
                                return serviceObjectMaker.getMethod(
                                        "getServiceObject",
                                        AxisService.class);
                            }
                        });
                Object obj = null;
                if (method != null) {
                    obj = org.apache.axis2.java.security.AccessController
                            .doPrivileged(new PrivilegedExceptionAction() {
                                public Object run()
                                        throws InstantiationException,
                                        IllegalAccessException,
                                        InvocationTargetException {
                                    return method.invoke(serviceObjectMaker.newInstance(),
                                                         axisService);
                                }
                            });
                }
                if (obj == null) {
                    log.warn("ServiceObjectSupplier implmentation Object could not be found");
                    throw new DeploymentException(
                            "ServiceClass or ServiceObjectSupplier implmentation Object could not be found");
                }
                serviceClass = obj.getClass().getName();
            } else {
                return;
            }
        }
        // adding name spaces
        NamespaceMap map = new NamespaceMap();
        map.put(Java2WSDLConstants.AXIS2_NAMESPACE_PREFIX,
                Java2WSDLConstants.AXIS2_XSD);
        map.put(Java2WSDLConstants.DEFAULT_SCHEMA_NAMESPACE_PREFIX,
                Java2WSDLConstants.URI_2001_SCHEMA_XSD);
        axisService.setNamespaceMap(map);
        SchemaGenerator schemaGenerator;
        Parameter generateBare = axisService
                .getParameter(Java2WSDLConstants.DOC_LIT_BARE_PARAMETER);
        if (generateBare != null && "true".equals(generateBare.getValue())) {
            schemaGenerator = new DocLitBareSchemaGenerator(serviceClassLoader,
                                                            serviceClass.trim(),
                                                            axisService.getSchemaTargetNamespace(),
                                                            axisService
                                                                    .getSchemaTargetNamespacePrefix(),
                                                            axisService);
        } else {
            schemaGenerator = new DefaultSchemaGenerator(serviceClassLoader,
                                                         serviceClass.trim(),
                                                         axisService.getSchemaTargetNamespace(),
                                                         axisService
                                                                 .getSchemaTargetNamespacePrefix(),
                                                         axisService);
        }
        schemaGenerator.setExcludeMethods(excludeOperations);
        schemaGenerator.setNonRpcMethods(nonRpcMethods);
        if (!axisService.isElementFormDefault()) {
            schemaGenerator
                    .setElementFormDefault(Java2WSDLConstants.FORM_DEFAULT_UNQUALIFIED);
        }
        // package to namespace map
        schemaGenerator.setPkg2nsmap(axisService.getP2nMap());
        Collection schemas = schemaGenerator.generateSchema();
        axisService.addSchema(schemas);
        axisService.setSchemaTargetNamespace(schemaGenerator
                .getSchemaTargetNameSpace());
        axisService.setTypeTable(schemaGenerator.getTypeTable());
        if (Java2WSDLConstants.DEFAULT_TARGET_NAMESPACE.equals(axisService
                .getTargetNamespace())) {
            axisService
                    .setTargetNamespace(schemaGenerator.getTargetNamespace());
        }

        Method[] method = schemaGenerator.getMethods();
        PhasesInfo pinfo = axisConfig.getPhasesInfo();

        for (Method jmethod : method) {
            String opName = jmethod.getName();
            AxisOperation operation = axisService
                    .getOperation(new QName(opName));
            // if the operation there in services.xml then try to set it schema
            // element name
            if (operation == null) {
                operation = axisService.getOperation(new QName(
                        jmethod.getName()));
            }
            MessageReceiver mr =
                    axisService.getMessageReceiver(operation.getMessageExchangePattern());
            if (mr == null) {
                mr = axisConfig.getMessageReceiver(operation.getMessageExchangePattern());
            }
            if (operation.getMessageReceiver() == null) {
                operation.setMessageReceiver(mr);
            }
            pinfo.setOperationPhases(operation);
            axisService.addOperation(operation);
            if (operation.getSoapAction() == null) {
                operation.setSoapAction("urn:" + opName);
            }
        }
    }

    public static AxisOperation getAxisOperationForJmethod(Method method)
            throws AxisFault {
        AxisOperation operation;
        if ("void".equals(method.getReturnType().getName())) {
            if (method.getExceptionTypes().length > 0) {
                operation = AxisOperationFactory
                        .getAxisOperation(WSDLConstants.MEP_CONSTANT_ROBUST_IN_ONLY);
            } else {
                operation = AxisOperationFactory
                        .getAxisOperation(WSDLConstants.MEP_CONSTANT_IN_ONLY);
            }
        } else {
            operation = AxisOperationFactory
                    .getAxisOperation(WSDLConstants.MEP_CONSTANT_IN_OUT);
        }
        String opName = method.getName();
        operation.setName(new QName(opName));
        WebMethod methodAnnon = method.getAnnotation(WebMethod.class);
        if (methodAnnon != null) {
            String action = methodAnnon.action();
            if (action != null && !"".equals(action)) {
                operation.setSoapAction(action);
            }
        }
        return operation;
    }

    public static OMElement getParameter(String name, String value,
                                         boolean locked) {
        OMFactory fac = OMAbstractFactory.getOMFactory();
        OMElement parameter = fac.createOMElement("parameter", null);
        parameter.addAttribute("name", name, null);
        parameter.addAttribute("locked", Boolean.toString(locked), null);
        parameter.setText(value);
        return parameter;
    }

    /**
     * Modules can contain services in some cases.  This method will deploy all the services
     * for a given AxisModule into the current AxisConfiguration.
     * 

* The code looks for an "aars/" directory inside the module (either .mar or exploded), * and an "aars.list" file inside that to figure out which services to deploy. Note that all * services deployed this way will have access to the Module's classes. *

* * @param module the AxisModule to search for services * @param configCtx ConfigurationContext in which to deploy */ public static void deployModuleServices(AxisModule module, ConfigurationContext configCtx) throws AxisFault { try { AxisConfiguration axisConfig = configCtx.getAxisConfiguration(); ArchiveReader archiveReader = new ArchiveReader(); PhasesInfo phasesInfo = axisConfig.getPhasesInfo(); final ClassLoader moduleClassLoader = module.getModuleClassLoader(); ArrayList services = new ArrayList(); final InputStream in = (InputStream)org.apache.axis2.java.security.AccessController .doPrivileged(new PrivilegedAction() { public Object run() { return moduleClassLoader .getResourceAsStream("aars/aars.list"); } }); if (in != null) { BufferedReader input; try { input = new BufferedReader( (InputStreamReader)org.apache.axis2.java.security.AccessController .doPrivileged(new PrivilegedAction() { public Object run() { return new InputStreamReader(in); } })); String line; while ((line = input.readLine()) != null) { line = line.trim(); if (line.length() > 0 && line.charAt(0) != '#') { services.add(line); } } input.close(); } catch (IOException ex) { ex.printStackTrace(); } } if (services.size() > 0) { for (Object service1 : services) { final String servicename = (String)service1; if (servicename == null || "".equals(servicename)) { continue; } InputStream fin = (InputStream)org.apache.axis2.java.security.AccessController .doPrivileged(new PrivilegedAction() { public Object run() { return moduleClassLoader .getResourceAsStream("aars/" + servicename); } }); if (fin == null) { throw new AxisFault("No service archive found : " + servicename); } File inputFile = Utils .createTempFile( servicename, fin, (File)axisConfig .getParameterValue( Constants.Configuration.ARTIFACTS_TEMP_DIR)); DeploymentFileData filedata = new DeploymentFileData( inputFile); filedata .setClassLoader( false, moduleClassLoader, (File)axisConfig .getParameterValue( Constants.Configuration.ARTIFACTS_TEMP_DIR)); HashMap wsdlservice = archiveReader.processWSDLs(filedata); if (wsdlservice != null && wsdlservice.size() > 0) { Iterator servicesitr = wsdlservice.values().iterator(); while (servicesitr.hasNext()) { AxisService service = (AxisService)servicesitr .next(); Iterator operations = service.getOperations(); while (operations.hasNext()) { AxisOperation axisOperation = (AxisOperation)operations .next(); phasesInfo.setOperationPhases(axisOperation); } } } AxisServiceGroup serviceGroup = new AxisServiceGroup( axisConfig); serviceGroup.setServiceGroupClassLoader(filedata .getClassLoader()); ArrayList serviceList = archiveReader.processServiceGroup( filedata.getAbsolutePath(), filedata, serviceGroup, false, wsdlservice, configCtx); for (Object aServiceList : serviceList) { AxisService axisService = (AxisService)aServiceList; Parameter moduleService = new Parameter(); moduleService.setValue("true"); moduleService.setName(AxisModule.MODULE_SERVICE); axisService.addParameter(moduleService); serviceGroup.addService(axisService); } axisConfig.addServiceGroup(serviceGroup); fin.close(); } } } catch (IOException e) { throw AxisFault.makeFault(e); } } /** * Normalize a uri containing ../ and ./ paths. * * @param uri The uri path to normalize * @return The normalized uri */ public static String normalize(String uri) { if ("".equals(uri)) { return uri; } int leadingSlashes; for (leadingSlashes = 0; leadingSlashes < uri.length() && uri.charAt(leadingSlashes) == '/'; ++leadingSlashes) { // FIXME: this block is empty!! } boolean isDir = (uri.charAt(uri.length() - 1) == '/'); StringTokenizer st = new StringTokenizer(uri, "/"); LinkedList clean = new LinkedList(); while (st.hasMoreTokens()) { String token = st.nextToken(); if ("..".equals(token)) { if (!clean.isEmpty() && !"..".equals(clean.getLast())) { clean.removeLast(); if (!st.hasMoreTokens()) { isDir = true; } } else { clean.add(".."); } } else if (!".".equals(token) && !"".equals(token)) { clean.add(token); } } StringBuffer sb = new StringBuffer(); while (leadingSlashes-- > 0) { sb.append('/'); } for (Iterator it = clean.iterator(); it.hasNext();) { sb.append(it.next()); if (it.hasNext()) { sb.append('/'); } } if (isDir && sb.length() > 0 && sb.charAt(sb.length() - 1) != '/') { sb.append('/'); } return sb.toString(); } public static String getPath(String parent, String childPath) { Stack parentStack = new Stack(); Stack childStack = new Stack(); if (parent != null) { String[] values = parent.split("/"); if (values.length > 0) { for (String value : values) { parentStack.push(value); } } } String[] values = childPath.split("/"); if (values.length > 0) { for (String value : values) { childStack.push(value); } } String filepath = ""; while (!childStack.isEmpty()) { String value = (String)childStack.pop(); if ("..".equals(value)) { parentStack.pop(); } else if (!"".equals(value)) { if ("".equals(filepath)) { filepath = value; } else { filepath = value + "/" + filepath; } } } while (!parentStack.isEmpty()) { String value = (String)parentStack.pop(); if (!"".equals(value)) { filepath = value + "/" + filepath; } } return filepath; } /** * Get names of all *.jar files inside the lib/ directory of a given jar URL * * @param url base URL of a JAR to search * @return a List containing file names (Strings) of all files matching "[lL]ib/*.jar" */ public static List findLibJars(URL url) { ArrayList embedded_jars = new ArrayList(); try { ZipInputStream zin = new ZipInputStream(url.openStream()); ZipEntry entry; String entryName; while ((entry = zin.getNextEntry()) != null) { entryName = entry.getName(); /** * if the entry name start with /lib and ends with .jar add it * to the the arraylist */ if (entryName != null && (entryName.startsWith("lib/") || entryName .startsWith("Lib/")) && entryName.endsWith(".jar")) { embedded_jars.add(entryName); } } zin.close(); } catch (Exception e) { throw new RuntimeException(e); } return embedded_jars; } /** * Add the Axis2 lifecycle / session methods to a pre-existing list of names that will be * excluded when generating schemas. * * @param excludeList an ArrayList containing method names - we'll add ours to this. */ public static void addExcludeMethods(ArrayList excludeList) { excludeList.add("init"); excludeList.add("setOperationContext"); excludeList.add("startUp"); excludeList.add("destroy"); excludeList.add("shutDown"); } public static DeploymentClassLoader createClassLoader(File serviceFile) throws MalformedURLException { ClassLoader contextClassLoader = (ClassLoader)org.apache.axis2.java.security.AccessController .doPrivileged(new PrivilegedAction() { public Object run() { return Thread.currentThread().getContextClassLoader(); } }); return createDeploymentClassLoader(new URL[]{serviceFile.toURL()}, contextClassLoader, new ArrayList()); } public static ClassLoader createClassLoader(ArrayList urls, ClassLoader serviceClassLoader, boolean extractJars, File tmpDir) { URL url = (URL)urls.get(0); if (extractJars) { try { URL[] urls1 = Utils.getURLsForAllJars(url, tmpDir); urls.remove(0); urls.addAll(0, Arrays.asList(urls1)); URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]); return createDeploymentClassLoader(urls2, serviceClassLoader, null); } catch (Exception e) { log .warn("Exception extracting jars into temporary directory : " + e.getMessage() + " : switching to alternate class loading mechanism"); log.debug(e.getMessage(), e); } } List embedded_jars = Utils.findLibJars(url); URL[] urls2 = (URL[])urls.toArray(new URL[urls.size()]); return createDeploymentClassLoader(urls2, serviceClassLoader, embedded_jars); } public static File toFile(URL url) throws UnsupportedEncodingException { String path = URLDecoder.decode(url.getPath(), defaultEncoding); return new File(path.replace('/', File.separatorChar).replace('|', ':')); } public static ClassLoader createClassLoader(URL[] urls, ClassLoader serviceClassLoader, boolean extractJars, File tmpDir) { if (extractJars) { try { URL[] urls1 = Utils.getURLsForAllJars(urls[0], tmpDir); return createDeploymentClassLoader(urls1, serviceClassLoader, null); } catch (Exception e) { log .warn("Exception extracting jars into temporary directory : " + e.getMessage() + " : switching to alternate class loading mechanism"); log.debug(e.getMessage(), e); } } List embedded_jars = Utils.findLibJars(urls[0]); return createDeploymentClassLoader(urls, serviceClassLoader, embedded_jars); } private static DeploymentClassLoader createDeploymentClassLoader( final URL[] urls, final ClassLoader serviceClassLoader, final List embeddedJars) { return (DeploymentClassLoader)AccessController .doPrivileged(new PrivilegedAction() { public Object run() { return new DeploymentClassLoader(urls, embeddedJars, serviceClassLoader); } }); } /** * This method is to process bean exclude parameter and the XML format of that would be * + * * @param service , AxisService object */ public static void processBeanPropertyExclude(AxisService service) { Parameter excludeBeanProperty = service .getParameter("beanPropertyRules"); if (excludeBeanProperty != null) { OMElement parameterElement = excludeBeanProperty .getParameterElement(); Iterator bneasItr = parameterElement.getChildrenWithName(new QName( "bean")); ExcludeInfo excludeInfo = new ExcludeInfo(); while (bneasItr.hasNext()) { OMElement bean = (OMElement)bneasItr.next(); String clazz = bean.getAttributeValue(new QName( DeploymentConstants.TAG_CLASS_NAME)); String excludePropertees = bean.getAttributeValue(new QName( DeploymentConstants.TAG_EXCLUDE_PROPERTIES)); String includeProperties = bean.getAttributeValue(new QName( DeploymentConstants.TAG_INCLUDE_PROPERTIES)); excludeInfo.putBeanInfo(clazz, new BeanExcludeInfo( excludePropertees, includeProperties)); } service.setExcludeInfo(excludeInfo); } } public static String getShortFileName(String filename) { File file = new File(filename); return file.getName(); } /** * The util method to prepare the JSR 181 annotated service name from given annotation or for * defaults JSR 181 specifies that the in javax.jws.WebService the parameter serviceName * contains the wsdl:service name to mapp. If its not available then the default will be Simple * name of the class + "Service" * * @param serviceClass the service Class * @param serviceAnnotation a WebService annotation, or null * @return String version of the ServiceName according to the JSR 181 spec */ public static String getAnnotatedServiceName(Class serviceClass, WebService serviceAnnotation) { String serviceName = ""; if (serviceAnnotation != null && serviceAnnotation.serviceName() != null) { serviceName = serviceAnnotation.serviceName(); } if (serviceName.equals("")) { serviceName = serviceClass.getName(); int firstChar = serviceName.lastIndexOf('.') + 1; if (firstChar > 0) { serviceName = serviceName.substring(firstChar); } serviceName += "Service"; } return serviceName; } public static void addEndpointsToService(AxisService axisService) throws AxisFault { String serviceName = axisService.getName(); Iterator transportInValues = null; if (axisService.isEnableAllTransports()) { AxisConfiguration axisConfiguration = axisService .getAxisConfiguration(); if (axisConfiguration != null) { ArrayList transports = new ArrayList(); for (Object o : axisConfiguration.getTransportsIn().values()) { TransportInDescription transportInDescription = (TransportInDescription)o; transports.add(transportInDescription.getName()); } transportInValues = transports.iterator(); } } else { transportInValues = axisService.getExposedTransports().iterator(); } HashMap bindingCache = new HashMap(); if (transportInValues != null) { for (; transportInValues.hasNext();) { String transportName = (String)transportInValues.next(); String protocol = transportName.substring(0, 1).toUpperCase() + transportName.substring(1, transportName.length()) .toLowerCase(); //TODO do we use this method , we need to disable Http, SOAP11,SOAP12 // Bindings according to parameters if we are using this /* * populates soap11 endpoint */ String soap11EndpointName = serviceName + protocol + "Soap11Endpoint"; AxisEndpoint httpSoap11Endpoint = new AxisEndpoint(); httpSoap11Endpoint.setName(soap11EndpointName); httpSoap11Endpoint.setParent(axisService); httpSoap11Endpoint.setTransportInDescription(transportName); populateSoap11Endpoint(axisService, httpSoap11Endpoint, bindingCache); axisService.addEndpoint(httpSoap11Endpoint.getName(), httpSoap11Endpoint); // setting soap11 endpoint as the default endpoint axisService.setEndpointName(soap11EndpointName); /* * generating Soap12 endpoint */ String soap12EndpointName = serviceName + protocol + "Soap12Endpoint"; AxisEndpoint httpSoap12Endpoint = new AxisEndpoint(); httpSoap12Endpoint.setName(soap12EndpointName); httpSoap12Endpoint.setParent(axisService); httpSoap12Endpoint.setTransportInDescription(transportName); populateSoap12Endpoint(axisService, httpSoap12Endpoint, bindingCache); axisService.addEndpoint(httpSoap12Endpoint.getName(), httpSoap12Endpoint); /* * generating Http endpoint */ if ("http".equals(transportName)) { String httpEndpointName = serviceName + protocol + "Endpoint"; AxisEndpoint httpEndpoint = new AxisEndpoint(); httpEndpoint.setName(httpEndpointName); httpEndpoint.setParent(axisService); httpEndpoint.setTransportInDescription(transportName); populateHttpEndpoint(axisService, httpEndpoint, bindingCache); axisService.addEndpoint(httpEndpoint.getName(), httpEndpoint); } } } } public static void addEndpointsToService(AxisService axisService, AxisConfiguration axisConfiguration) throws AxisFault { String serviceName = axisService.getName(); Iterator transportInValues = null; if (axisConfiguration != null) { ArrayList transports = new ArrayList(); for (Object o : axisConfiguration.getTransportsIn().values()) { TransportInDescription transportInDescription = (TransportInDescription)o; transports.add(transportInDescription.getName()); } transportInValues = transports.iterator(); } HashMap bindingCache = new HashMap(); if (transportInValues != null) { for (; transportInValues.hasNext();) { String transportName = (String)transportInValues.next(); String protocol = transportName.substring(0, 1).toUpperCase() + transportName.substring(1, transportName.length()) .toLowerCase(); // axis2.xml indicated no HTTP binding? boolean disableREST = false; Parameter disableRESTParameter = axisService .getParameter(org.apache.axis2.Constants.Configuration.DISABLE_REST); if (disableRESTParameter != null && JavaUtils.isTrueExplicitly(disableRESTParameter.getValue())) { disableREST = true; } boolean disableSOAP11 = false; Parameter disableSOAP11Parameter = axisService .getParameter(org.apache.axis2.Constants.Configuration.DISABLE_SOAP11); if (disableSOAP11Parameter != null && JavaUtils.isTrueExplicitly(disableSOAP11Parameter.getValue())) { disableSOAP11 = true; } boolean disableSOAP12 = false; Parameter disableSOAP12Parameter = axisService .getParameter(org.apache.axis2.Constants.Configuration.DISABLE_SOAP12); if (disableSOAP12Parameter != null && JavaUtils .isTrueExplicitly(disableSOAP12Parameter.getValue())) { disableSOAP12 = true; } /* * populates soap11 endpoint */ if (!disableSOAP11) { String soap11EndpointName = serviceName + protocol + "Soap11Endpoint"; AxisEndpoint httpSoap11Endpoint = new AxisEndpoint(); httpSoap11Endpoint.setName(soap11EndpointName); httpSoap11Endpoint.setParent(axisService); httpSoap11Endpoint.setTransportInDescription(transportName); populateSoap11Endpoint(axisService, httpSoap11Endpoint, bindingCache); axisService.addEndpoint(httpSoap11Endpoint.getName(), httpSoap11Endpoint); // setting soap11 endpoint as the default endpoint axisService.setEndpointName(soap11EndpointName); } /* * generating Soap12 endpoint */ if (!disableSOAP12) { String soap12EndpointName = serviceName + protocol + "Soap12Endpoint"; AxisEndpoint httpSoap12Endpoint = new AxisEndpoint(); httpSoap12Endpoint.setName(soap12EndpointName); httpSoap12Endpoint.setParent(axisService); httpSoap12Endpoint.setTransportInDescription(transportName); populateSoap12Endpoint(axisService, httpSoap12Endpoint, bindingCache); axisService.addEndpoint(httpSoap12Endpoint.getName(), httpSoap12Endpoint); } /* * generating Http endpoint */ if (("http".equals(transportName) || "https".equals(transportName)) && !disableREST) { String httpEndpointName = serviceName + protocol + "Endpoint"; AxisEndpoint httpEndpoint = new AxisEndpoint(); httpEndpoint.setName(httpEndpointName); httpEndpoint.setParent(axisService); httpEndpoint.setTransportInDescription(transportName); populateHttpEndpoint(axisService, httpEndpoint, bindingCache); axisService.addEndpoint(httpEndpoint.getName(), httpEndpoint); } } } } public static void addSoap11Endpoint(AxisService axisService, URL url) throws Exception { String protocol = url.getProtocol(); protocol = protocol.substring(0, 1).toUpperCase() + protocol.substring(1, protocol.length()).toLowerCase(); String serviceName = axisService.getName(); String soap11EndpointName = serviceName + protocol + "Soap11Endpoint"; AxisEndpoint httpSoap11Endpoint = new AxisEndpoint(); httpSoap11Endpoint.setName(soap11EndpointName); httpSoap11Endpoint.setParent(axisService); httpSoap11Endpoint.setEndpointURL(url.toString()); httpSoap11Endpoint.setTransportInDescription(url.getProtocol()); populateSoap11Endpoint(axisService, httpSoap11Endpoint, null); axisService.addEndpoint(httpSoap11Endpoint.getName(), httpSoap11Endpoint); // setting soap11 endpoint as the default endpoint axisService.setEndpointName(soap11EndpointName); } public static void addSoap12Endpoint(AxisService axisService, URL url) throws Exception { String protocol = url.getProtocol(); protocol = protocol.substring(0, 1).toUpperCase() + protocol.substring(1, protocol.length()).toLowerCase(); String serviceName = axisService.getName(); String soap12EndpointName = serviceName + protocol + "Soap12Endpoint"; AxisEndpoint httpSoap12Endpoint = new AxisEndpoint(); httpSoap12Endpoint.setName(soap12EndpointName); httpSoap12Endpoint.setParent(axisService); httpSoap12Endpoint.setEndpointURL(url.toString()); httpSoap12Endpoint.setTransportInDescription(url.getProtocol()); populateSoap12Endpoint(axisService, httpSoap12Endpoint, null); axisService.addEndpoint(httpSoap12Endpoint.getName(), httpSoap12Endpoint); } public static void addHttpEndpoint(AxisService axisService, URL url) { String serviceName = axisService.getName(); String protocol = url.getProtocol(); protocol = protocol.substring(0, 1).toUpperCase() + protocol.substring(1, protocol.length()).toLowerCase(); String httpEndpointName = serviceName + protocol + "Endpoint"; AxisEndpoint httpEndpoint = new AxisEndpoint(); httpEndpoint.setName(httpEndpointName); httpEndpoint.setParent(axisService); httpEndpoint.setEndpointURL(url.toString()); httpEndpoint.setTransportInDescription(url.getProtocol()); populateHttpEndpoint(axisService, httpEndpoint, null); axisService.addEndpoint(httpEndpoint.getName(), httpEndpoint); } public static void processPolicyAttachments(Iterator attachmentElements, AxisService service) throws XMLStreamException, FactoryConfigurationError { OMElement attachmentElement; HashMap attachmentsMap = new HashMap(); for (; attachmentElements.hasNext();) { attachmentElement = (OMElement)attachmentElements.next(); OMElement appliesToElem = attachmentElement .getFirstChildWithName(new QName( DeploymentConstants.POLICY_NS_URI, DeploymentConstants.TAG_APPLIES_TO)); ArrayList policyComponents = new ArrayList(); // process elements .. for (Iterator policyElements = attachmentElement .getChildrenWithName(new QName( DeploymentConstants.POLICY_NS_URI, DeploymentConstants.TAG_POLICY)); policyElements .hasNext();) { PolicyComponent policy = PolicyUtil .getPolicyFromOMElement((OMElement)policyElements .next()); policyComponents.add(policy); } // process elements .. for (Iterator policyRefElements = attachmentElement .getChildrenWithName(new QName( DeploymentConstants.POLICY_NS_URI, DeploymentConstants.TAG_POLICY_REF)); policyRefElements .hasNext();) { PolicyComponent policyRef = PolicyUtil .getPolicyReferenceFromOMElement((OMElement)policyRefElements .next()); policyComponents.add(policyRef); } for (Iterator policySubjects = appliesToElem .getChildrenWithName(new QName("policy-subject")); policySubjects .hasNext();) { OMElement policySubject = (OMElement)policySubjects.next(); String identifier = policySubject.getAttributeValue(new QName( "identifier")); ArrayList values = (ArrayList)attachmentsMap.get(identifier); if (values == null) { values = new ArrayList(); attachmentsMap.put(identifier, values); } values.addAll(policyComponents); } } for (Object o : attachmentsMap.keySet()) { String identifier = (String)o; if (identifier.startsWith("binding:soap")) { processSoapAttachments(identifier, (List)attachmentsMap .get(identifier), service); } } } private static void populateSoap11Endpoint(AxisService axisService, AxisEndpoint axisEndpoint, HashMap bindingCache) { String serviceName = axisService.getName(); String name = serviceName + "Soap11Binding"; QName bindingName = new QName(name); AxisBinding axisBinding = (bindingCache != null) ? (AxisBinding)bindingCache .get(name) : null; if (axisBinding == null) { axisBinding = new AxisBinding(); axisBinding.setName(bindingName); axisBinding.setType(Java2WSDLConstants.TRANSPORT_URI); axisBinding.setProperty(WSDLConstants.WSDL_1_1_STYLE, WSDLConstants.STYLE_DOC); axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION, SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI); for (Iterator iterator = axisService.getChildren(); iterator .hasNext();) { AxisOperation operation = (AxisOperation)iterator.next(); AxisBindingOperation axisBindingOperation = new AxisBindingOperation(); axisBindingOperation.setName(operation.getName()); axisBindingOperation.setAxisOperation(operation); String soapAction = operation.getSoapAction(); if (soapAction != null) { axisBindingOperation.setProperty( WSDL2Constants.ATTR_WSOAP_ACTION, soapAction); } axisBinding.addChild(axisBindingOperation.getName(), axisBindingOperation); populateBindingOperation(axisBinding, axisBindingOperation); } if (bindingCache != null) { bindingCache.put(name, axisBinding); } } axisBinding.setParent(axisEndpoint); axisEndpoint.setBinding(axisBinding); } private static void populateSoap12Endpoint(AxisService axisService, AxisEndpoint axisEndpoint, HashMap bindingCache) { String serviceName = axisService.getName(); String name = serviceName + "Soap12Binding"; QName bindingName = new QName(name); AxisBinding axisBinding = (bindingCache != null) ? (AxisBinding)bindingCache .get(name) : null; if (axisBinding == null) { axisBinding = new AxisBinding(); axisBinding.setName(bindingName); axisBinding.setType(Java2WSDLConstants.TRANSPORT_URI); axisBinding.setProperty(WSDLConstants.WSDL_1_1_STYLE, WSDLConstants.STYLE_DOC); axisBinding.setProperty(WSDL2Constants.ATTR_WSOAP_VERSION, SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI); for (Iterator iterator = axisService.getChildren(); iterator .hasNext();) { AxisOperation operation = (AxisOperation)iterator.next(); AxisBindingOperation axisBindingOperation = new AxisBindingOperation(); axisBindingOperation.setName(operation.getName()); axisBindingOperation.setAxisOperation(operation); String soapAction = operation.getSoapAction(); if (soapAction != null) { axisBindingOperation.setProperty( WSDL2Constants.ATTR_WSOAP_ACTION, soapAction); } axisBinding.addChild(axisBindingOperation.getName(), axisBindingOperation); populateBindingOperation(axisBinding, axisBindingOperation); } if (bindingCache != null) { bindingCache.put(name, axisBinding); } } axisBinding.setParent(axisEndpoint); axisEndpoint.setBinding(axisBinding); } private static void populateHttpEndpoint(AxisService axisService, AxisEndpoint axisEndpoint, HashMap bindingCache) { String serviceName = axisService.getName(); String name = serviceName + "HttpBinding"; QName bindingName = new QName(name); AxisBinding axisBinding = (bindingCache != null) ? (AxisBinding)bindingCache .get(name) : null; if (axisBinding == null) { axisBinding = new AxisBinding(); axisBinding.setName(bindingName); axisBinding.setType(WSDL2Constants.URI_WSDL2_HTTP); axisBinding.setProperty(WSDL2Constants.ATTR_WHTTP_METHOD, "POST"); for (Iterator iterator = axisService.getChildren(); iterator .hasNext();) { AxisOperation operation = (AxisOperation)iterator.next(); AxisBindingOperation axisBindingOperation = new AxisBindingOperation(); QName operationQName = operation.getName(); axisBindingOperation.setName(operationQName); axisBindingOperation.setAxisOperation(operation); String httpLocation = operationQName.getLocalPart(); axisBindingOperation.setProperty(WSDL2Constants.ATTR_WHTTP_LOCATION, httpLocation); axisBinding.addChild(axisBindingOperation.getName(), axisBindingOperation); populateBindingOperation(axisBinding, axisBindingOperation); } if (bindingCache != null) { bindingCache.put(name, axisBinding); } } axisBinding.setParent(axisEndpoint); axisEndpoint.setBinding(axisBinding); } private static void populateBindingOperation(AxisBinding axisBinding, AxisBindingOperation axisBindingOperation) { AxisOperation axisOperation = axisBindingOperation.getAxisOperation(); if (WSDLUtil.isInputPresentForMEP(axisOperation .getMessageExchangePattern())) { AxisMessage axisInMessage = axisOperation .getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE); AxisBindingMessage axisBindingInMessage = new AxisBindingMessage(); axisBindingInMessage.setName(axisInMessage.getName()); axisBindingInMessage.setDirection(axisInMessage.getDirection()); axisBindingInMessage.setAxisMessage(axisInMessage); axisBindingInMessage.setParent(axisBindingOperation); axisBindingOperation.addChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE, axisBindingInMessage); } if (WSDLUtil.isOutputPresentForMEP(axisOperation .getMessageExchangePattern())) { AxisMessage axisOutMessage = axisOperation .getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); AxisBindingMessage axisBindingOutMessage = new AxisBindingMessage(); axisBindingOutMessage.setName(axisOutMessage.getName()); axisBindingOutMessage.setDirection(axisOutMessage.getDirection()); axisBindingOutMessage.setAxisMessage(axisOutMessage); axisBindingOutMessage.setParent(axisBindingOperation); axisBindingOperation.addChild( WSDLConstants.MESSAGE_LABEL_OUT_VALUE, axisBindingOutMessage); } ArrayList faultMessagesList = axisOperation.getFaultMessages(); for (Object aFaultMessagesList : faultMessagesList) { AxisMessage axisFaultMessage = (AxisMessage)aFaultMessagesList; AxisBindingMessage axisBindingFaultMessage = new AxisBindingMessage(); axisBindingFaultMessage.setName(axisFaultMessage.getName()); axisBindingFaultMessage.setFault(true); axisBindingFaultMessage.setAxisMessage(axisFaultMessage); axisBindingFaultMessage.setParent(axisBindingOperation); axisBindingOperation.addFault(axisBindingFaultMessage); axisBinding.addFault(axisBindingFaultMessage); } axisBindingOperation.setAxisOperation(axisOperation); axisBindingOperation.setParent(axisBinding); } private static void processSoapAttachments(String identifier, List policyComponents, AxisService service) { Map map = service.getEndpoints(); String soapVersion = (identifier.indexOf("soap12") > -1) ? SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI : SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI; for (Object o : map.values()) { AxisEndpoint axisEndpoint = (AxisEndpoint)o; AxisBinding axisBinding = axisEndpoint.getBinding(); String wsoap = (String)axisBinding .getProperty(WSDL2Constants.ATTR_WSOAP_VERSION); if (soapVersion.equals(wsoap)) { String[] identifiers = identifier.split("/"); int key = identifiers.length; if (key == 1) { axisBinding.getPolicySubject().attachPolicyComponents( policyComponents); } else if (key == 2 || key == 3) { String opName = identifiers[1]; opName = opName.substring(opName.indexOf(":") + 1, opName .length()); AxisBindingOperation bindingOperation = null; boolean found = false; for (Iterator i = axisBinding.getChildren(); i.hasNext();) { bindingOperation = (AxisBindingOperation)i.next(); if (opName.equals(bindingOperation.getName() .getLocalPart())) { found = true; break; } } if (!found) { throw new IllegalArgumentException( "Invalid binding operation " + opName); } if (key == 2) { bindingOperation.getPolicySubject() .attachPolicyComponents(policyComponents); } else { if ("in".equals(identifiers[2])) { AxisBindingMessage bindingInMessage = (AxisBindingMessage)bindingOperation .getChild(WSDLConstants.MESSAGE_LABEL_IN_VALUE); bindingInMessage.getPolicySubject() .attachPolicyComponents(policyComponents); } else if ("out".equals(identifiers[2])) { AxisBindingMessage bindingOutMessage = (AxisBindingMessage)bindingOperation .getChild(WSDLConstants.MESSAGE_LABEL_OUT_VALUE); bindingOutMessage.getPolicySubject() .attachPolicyComponents(policyComponents); } else { // FIXME faults } } } break; } } } public static boolean isSoap11Binding(AxisBinding binding) { String type = binding.getType(); if (Java2WSDLConstants.TRANSPORT_URI.equals(type) || WSDL2Constants.URI_WSDL2_SOAP.equals(type)) { String v = (String)binding .getProperty(WSDL2Constants.ATTR_WSOAP_VERSION); if (SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(v)) { return true; } } return false; } public static boolean isSoap12Binding(AxisBinding binding) { String type = binding.getType(); if (Java2WSDLConstants.TRANSPORT_URI.equals(type) || WSDL2Constants.URI_WSDL2_SOAP.equals(type)) { String v = (String)binding .getProperty(WSDL2Constants.ATTR_WSOAP_VERSION); if (SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI.equals(v)) { return true; } } return false; } public static boolean isHttpBinding(AxisBinding binding) { String type = binding.getType(); return WSDL2Constants.URI_WSDL2_HTTP.equals(type); } public static AxisBinding getSoap11Binding(AxisService service) { for (Object o : service.getEndpoints().values()) { AxisEndpoint endpoint = (AxisEndpoint)o; AxisBinding binding = endpoint.getBinding(); if (isSoap11Binding(binding)) { return binding; } } return null; } public static AxisBinding getSoap12Binding(AxisService service) { for (Object o : service.getEndpoints().values()) { AxisEndpoint endpoint = (AxisEndpoint)o; AxisBinding binding = endpoint.getBinding(); if (isSoap12Binding(binding)) { return binding; } } return null; } public static AxisBinding getHttpBinding(AxisService service) { for (Object o : service.getEndpoints().values()) { AxisEndpoint endpoint = (AxisEndpoint)o; AxisBinding binding = endpoint.getBinding(); if (isHttpBinding(binding)) { return binding; } } return null; } public static AxisBindingOperation getBindingOperation(AxisBinding binding, AxisOperation operation) { QName opName = operation.getName(); for (Iterator bindingOps = binding.getChildren(); bindingOps.hasNext();) { AxisBindingOperation bindingOp = (AxisBindingOperation)bindingOps.next(); if (opName.equals(bindingOp.getName())) { return bindingOp; } } return null; } public static AxisBindingMessage getBindingMessage(AxisBindingOperation bindingOperation, AxisMessage message) { String msgName = message.getName(); for (Iterator bindingMessages = bindingOperation.getChildren(); bindingMessages.hasNext();) { AxisBindingMessage bindingMessage = (AxisBindingMessage)bindingMessages.next(); if (msgName.equals(bindingMessage.getName())) { return bindingMessage; } } return null; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy