/* * SoapUI, Copyright (C) 2004-2016 SmartBear Software * * Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent * versions of the EUPL (the "Licence"); * You may not use this work except in compliance with the Licence. * You may obtain a copy of the Licence at: * * http://ec.europa.eu/idabc/eupl * * Unless required by applicable law or agreed to in writing, software distributed under the Licence is * distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the Licence for the specific language governing permissions and limitations * under the Licence. */ package com.eviware.soapui.impl.wsdl.actions.iface.tools.axis1; import com.eviware.soapui.SoapUI; import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.AbstractToolsAction; import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ArgumentBuilder; import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ProcessToolRunner; import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolHost; import com.eviware.soapui.impl.wsdl.support.HelpUrls; import com.eviware.soapui.model.iface.Interface; import com.eviware.soapui.settings.ToolsSettings; import com.eviware.soapui.support.MessageSupport; import com.eviware.soapui.support.Tools; import com.eviware.soapui.support.UISupport; import com.eviware.soapui.support.types.StringToStringMap; import com.eviware.x.form.XForm; import com.eviware.x.form.XFormDialog; import com.eviware.x.form.XFormDialogBuilder; import com.eviware.x.form.XFormFactory; import java.io.File; import java.util.Map; /** * Invokes axis 1.X WSDL2Java * * @author Ole.Matzura */ public class Axis1XWSDL2JavaAction extends AbstractToolsAction<Interface> { private static final String NAMESPACE_MAPPING = "namespace mapping"; private static final String FACTORY = "factory"; private static final String OUTPUT = "output directory"; private static final String PACKAGE = "target package"; private static final String TYPE_MAPPING_VERSION = "typeMappingVersion"; private static final String DEPLOY_SCOPE = "deployScope"; private static final String SKELETON_DEPLOY = "skeletonDeploy"; private static final String WRAP_ARRAYS = "wrapArrays"; private static final String HELPER_GEN = "helperGen"; private static final String ALL = "all"; private static final String TEST_CASE = "testCase"; private static final String SERVER_SIDE = "server-side"; private static final String NO_WRAPPED = "noWrapped"; private static final String NO_IMPORTS = "noImports"; private static final String IMPLCLASS = "implementationClassName"; private static final String USERNAME = "user"; private static final String PASSWORD = "password"; public static final String SOAPUI_ACTION_ID = "Axis1XWSDL2JavaAction"; public static final MessageSupport messages = MessageSupport.getMessages(Axis1XWSDL2JavaAction.class); public Axis1XWSDL2JavaAction() { super(messages.get("Title"), messages.get("Description")); } protected StringToStringMap initValues(Interface iface, Object param) { StringToStringMap values = super.initValues(iface, param); values.putIfMissing(SKELETON_DEPLOY, "none"); values.putIfMissing(DEPLOY_SCOPE, "none"); values.putIfMissing(TYPE_MAPPING_VERSION, "1.2"); return values; } protected XFormDialog buildDialog(Interface modelItem) { XFormDialogBuilder builder = XFormFactory.createDialogBuilder(messages.get("Dialog.Title")); XForm mainForm = builder.createForm(messages.get("Dialog.Basic.Label")); addWSDLFields(mainForm, modelItem); mainForm.addTextField(OUTPUT, messages.get("Dialog.Basic.Output"), XForm.FieldType.PROJECT_FOLDER); mainForm.addCheckBox(SERVER_SIDE, messages.get("Dialog.Basic.ServerSide")); mainForm.addCheckBox(ALL, messages.get("Dialog.Basic.All")); mainForm.addComboBox(DEPLOY_SCOPE, new String[]{"none", "Application", "Session", "Request"}, messages.get("Axis1XWSDL2JavaAction.Dialog.Basic.AddScope")); mainForm.addComboBox(SKELETON_DEPLOY, new String[]{"none", "true", "false"}, messages.get("Dialog.Basic.DeploySkeleton")); mainForm.addCheckBox(NO_IMPORTS, messages.get("Dialog.Basic.NoImports")); mainForm.addCheckBox(NO_WRAPPED, messages.get("Dialog.Basic.NoWrapped")); mainForm.addCheckBox(TEST_CASE, messages.get("Dialog.Basic.TestCase")); mainForm.addCheckBox(HELPER_GEN, messages.get("Dialog.Basic.HelperGen")); mainForm.addCheckBox(WRAP_ARRAYS, messages.get("Dialog.Basic.WrapArrays")); XForm advForm = builder.createForm(messages.get("Dialog.Advanced.Label")); advForm.addComboBox(TYPE_MAPPING_VERSION, new String[]{"1.2", "1.1"}, messages.get("Dialog.Advanced.TypeMappingVersion")); advForm.addTextField(IMPLCLASS, messages.get("Dialog.Advanced.ImplClass"), XForm.FieldType.JAVA_CLASS); advForm.addTextField(FACTORY, messages.get("Dialog.Advanced.Factory"), XForm.FieldType.JAVA_CLASS); advForm.addTextField(PACKAGE, messages.get("Dialog.Advanced.Package"), XForm.FieldType.JAVA_PACKAGE); advForm.addNameSpaceTable(NAMESPACE_MAPPING, modelItem); advForm.addTextField(USERNAME, messages.get("Dialog.Advanced.Username"), XForm.FieldType.TEXT); advForm.addTextField(PASSWORD, messages.get("Dialog.Advanced.Password"), XForm.FieldType.PASSWORD); buildArgsForm(builder, true, "WSDL2Java"); //$NON-NLS-1$ return builder.buildDialog(buildDefaultActions(HelpUrls.AXIS1X_HELP_URL, modelItem), messages.get("Dialog.Description"), UISupport.TOOL_ICON); } protected void generate(StringToStringMap values, ToolHost toolHost, Interface modelItem) throws Exception { String axisDir = SoapUI.getSettings().getString(ToolsSettings.AXIS_1_X_LOCATION, null); if (Tools.isEmpty(axisDir)) { UISupport.showErrorMessage(messages.get("MissingAxisLocationError")); return; } File axisLibDir = new File(axisDir + File.separatorChar + "lib"); if (!axisLibDir.exists()) { UISupport.showErrorMessage(messages.get("CouldNotFindLibDirectoryError", axisLibDir)); return; } String classpath = buildClasspath(axisLibDir); ProcessBuilder builder = new ProcessBuilder(); ArgumentBuilder args = buildArgs(classpath, values, modelItem); builder.command(args.getArgs()); builder.directory(axisLibDir); toolHost.run(new ProcessToolRunner(builder, messages.get("Axis1XWSDL2JavaAction.Runner.Title"), modelItem)); } private ArgumentBuilder buildArgs(String classpath, StringToStringMap values, Interface modelItem) { ArgumentBuilder builder = new ArgumentBuilder(values); builder.addArgs("java"); addJavaArgs(values, builder); builder.addArgs("-cp", classpath, "org.apache.axis.wsdl.WSDL2Java", "-v"); builder.addBoolean(NO_IMPORTS, "-n"); builder.addBoolean(NO_WRAPPED, "-W"); builder.addBoolean(SERVER_SIDE, "-s"); builder.addBoolean(TEST_CASE, "-t"); builder.addBoolean(ALL, "-a"); builder.addBoolean(HELPER_GEN, "-H"); builder.addBoolean(WRAP_ARRAYS, "-w"); if (!values.get(SKELETON_DEPLOY).equals("none")) { builder.addString(SKELETON_DEPLOY, "-S"); } if (!values.get(DEPLOY_SCOPE).equals("none")) { builder.addString(DEPLOY_SCOPE, "-d"); } values.put(OUTPUT, Tools.ensureDir(values.get(OUTPUT))); builder.addString(TYPE_MAPPING_VERSION, "-T"); builder.addString(PACKAGE, "-p"); builder.addString(OUTPUT, "-o"); builder.addString(FACTORY, "-F"); builder.addString(IMPLCLASS, "-c"); builder.addString(USERNAME, "-U"); builder.addString(PASSWORD, "-P"); try { StringToStringMap nsMappings = StringToStringMap.fromXml(values.get(NAMESPACE_MAPPING)); for (Map.Entry<String, String> entry : nsMappings.entrySet()) { builder.addArgs("-N" + entry.getKey() + "=" + entry.getValue()); } } catch (Exception e) { SoapUI.logError(e); } addToolArgs(values, builder); builder.addArgs(getWsdlUrl(values, modelItem)); return builder; } }