org.wso2.carbon.java2wsdl.Java2WSDL Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of org.wso2.carbon.java2wsdl Show documentation
Show all versions of org.wso2.carbon.java2wsdl Show documentation
This is the core module of the project.
/*
* Copyright (c) 2008, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* Licensed 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.wso2.carbon.java2wsdl;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.ws.java2wsdl.Java2WSDLCodegenEngine;
import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOptionParser;
import org.apache.ws.java2wsdl.utils.Java2WSDLOptionsValidator;
import org.apache.ws.java2wsdl.utils.Java2WSDLCommandLineOption;
import org.wso2.carbon.utils.WSO2Constants;
import java.io.File;
import java.io.FileFilter;
import java.net.URL;
import java.net.URLClassLoader;
import java.net.MalformedURLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Hashtable;
/**
* This class will generate a WSDL, either version 1.1 or 2.0 for a given java bytecode. Underline
* implementation uses org.apache.ws.java2wsdl.Java2WSDLCodegenEngine.
*/
public class Java2WSDL {
private static Log log = LogFactory.getLog(Java2WSDL.class);
/**
* This will generate the WSDL document and output a Id. User has to send this Id to the
* filedownload hadler to extract the wsdl document.
*
* @param options array of options
* @return String id
* @throws AxisFault will be thrown
*/
private String java2wsdl(String[] options) throws AxisFault {
String uuid = String.valueOf(System.currentTimeMillis() + Math.random());
String wsdlOutputDir =
MessageContext.getCurrentMessageContext().getConfigurationContext()
.getProperty(WSO2Constants.WORK_DIR) + File.separator + "tools_wsdlview" +
File.separator + uuid + File.separator;
ArrayList optionsList = new ArrayList();
boolean isXCAvailable = false;
String xcValue = "";
for (String option : options) {
if (option.equalsIgnoreCase("-xc")) {
isXCAvailable = true;
continue;
}
if (isXCAvailable) {
xcValue = option;
isXCAvailable = false;
continue;
}
optionsList.add(option);
}
optionsList.add("-o");
optionsList.add(wsdlOutputDir);
optionsList.add("-of");
optionsList.add(uuid + ".xml");
parseXC(xcValue, optionsList);
String[] args = optionsList.toArray(new String[optionsList.size()]);
Java2WSDLCommandLineOptionParser commandLineOptionParser =
new Java2WSDLCommandLineOptionParser(args);
try {
Map allOptions = commandLineOptionParser.getAllOptions();
List list =
commandLineOptionParser.getInvalidOptions(new Java2WSDLOptionsValidator());
if (list.size() > 0) {
String faultOptions = "";
for (Object aList : list) {
Java2WSDLCommandLineOption commandLineOption =
(Java2WSDLCommandLineOption) aList;
String optionValue = commandLineOption.getOptionValue();
faultOptions += "Invalid input for [ " + commandLineOption.getOptionType() +
(optionValue != null ? " : " + optionValue + " ]" : " ]") + "\n";
}
log.error(faultOptions);
throw new AxisFault(faultOptions);
}
new Java2WSDLCodegenEngine(allOptions).generate();
} catch (Exception e) {
String rootMsg = Java2WSDL.class.getName() + " Exception has occured.";
Throwable throwable = e.getCause();
if (throwable != null) {
String tmpMsg = throwable.toString();
if (tmpMsg.indexOf("org.apache.axis2.AxisFault") > -1) {
tmpMsg = "Please provide the correct inputs to either -p2n or -xc";
log.error(tmpMsg, throwable);
throw new AxisFault(tmpMsg);
}
log.error(rootMsg, throwable);
throw new AxisFault(throwable.toString());
}
String tmpMsg = e.toString();
if (tmpMsg.indexOf("java.lang.StringIndexOutOfBoundsException") > -1) {
tmpMsg = "Please provide the correct inputs to either -p2n or -xc";
log.error(tmpMsg, e);
throw new AxisFault(tmpMsg);
}
log.error(rootMsg, e);
throw AxisFault.makeFault(e);
}
Map fileResourcesMap =
(Map) MessageContext.getCurrentMessageContext().getConfigurationContext()
.getProperty(WSO2Constants.FILE_RESOURCE_MAP);
if (fileResourcesMap == null) {
fileResourcesMap = new Hashtable();
MessageContext.getCurrentMessageContext().getConfigurationContext()
.setProperty(WSO2Constants.FILE_RESOURCE_MAP,
fileResourcesMap);
}
File[] files = new File(wsdlOutputDir).listFiles(new FileFilter() {
public boolean accept(File f) {
return f.getName().endsWith(".xml");
}
});
if ((files != null) && (files[0] != null) &&
(files[0].getAbsoluteFile() != null)) {
fileResourcesMap.put(uuid, files[0].getAbsoluteFile().getAbsolutePath());
}
return "../../filedownload?id=" + uuid;
}
/**
* This is the fall though method for wsdlview. This will check for required resources.
*
* @param options options array
* @param uuids uuid array
* @return String id
* @throws AxisFault will be thrown.
*/
public String java2wsdlWithResources(String[] options, String[] uuids) throws AxisFault {
ClassLoader prevCl = Thread.currentThread().getContextClassLoader();
try {
URL[] urls = new URL[uuids.length];
for (int i = 0; i < uuids.length; i++) {
urls[i] = new File(uuids[i]).toURL();
}
ClassLoader newCl = URLClassLoader.newInstance(urls, prevCl);
Thread.currentThread().setContextClassLoader(newCl);
return java2wsdl(options);
} catch (MalformedURLException e) {
throw AxisFault.makeFault(e);
} finally {
Thread.currentThread().setContextClassLoader(prevCl);
}
}
private void parseXC(String value, ArrayList options) {
if (value == null || value.length() == 0) {
return;
}
String[] tokens = value.split(",");
for (String token : tokens) {
if (token != null && token.length() != 0) {
options.add("-xc");
options.add(token);
}
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy