1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.tools;
14
15 import java.io.File;
16
17 import org.apache.commons.cli.CommandLine;
18
19 import com.eviware.soapui.SoapUI;
20 import com.eviware.soapui.impl.wsdl.WsdlProject;
21 import com.eviware.soapui.impl.wsdl.actions.iface.tools.axis1.Axis1XWSDL2JavaAction;
22 import com.eviware.soapui.impl.wsdl.actions.iface.tools.axis2.Axis2WSDL2CodeAction;
23 import com.eviware.soapui.impl.wsdl.actions.iface.tools.cxf.CXFAction;
24 import com.eviware.soapui.impl.wsdl.actions.iface.tools.dotnet.DotNetWsdlAction;
25 import com.eviware.soapui.impl.wsdl.actions.iface.tools.gsoap.GSoapAction;
26 import com.eviware.soapui.impl.wsdl.actions.iface.tools.jaxb.JaxbXjcAction;
27 import com.eviware.soapui.impl.wsdl.actions.iface.tools.jbossws.JBossWSConsumeAction;
28 import com.eviware.soapui.impl.wsdl.actions.iface.tools.jbossws.WSToolsWsdl2JavaAction;
29 import com.eviware.soapui.impl.wsdl.actions.iface.tools.oracle.OracleWsaGenProxyAction;
30 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.AbstractToolsAction;
31 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.RunnerContext;
32 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolHost;
33 import com.eviware.soapui.impl.wsdl.actions.iface.tools.support.ToolRunner;
34 import com.eviware.soapui.impl.wsdl.actions.iface.tools.wscompile.WSCompileAction;
35 import com.eviware.soapui.impl.wsdl.actions.iface.tools.wsi.WSIAnalyzeAction;
36 import com.eviware.soapui.impl.wsdl.actions.iface.tools.wsimport.WSImportAction;
37 import com.eviware.soapui.impl.wsdl.actions.iface.tools.xfire.XFireAction;
38 import com.eviware.soapui.impl.wsdl.actions.iface.tools.xmlbeans.XmlBeans2Action;
39 import com.eviware.soapui.model.iface.Interface;
40
41 /***
42 * Standalone tool-runner used from maven-plugin, can also be used from command-line (see xdocs) or
43 * directly from other classes.
44 * <p>
45 * For standalone usage, set the project file (with setProjectFile) and other desired properties before
46 * calling run</p>
47 *
48 * @author Ole.Matzura
49 */
50
51 public class SoapUIToolRunner extends AbstractSoapUIRunner implements ToolHost, RunnerContext
52 {
53 private String iface;
54 private String tool;
55
56 private RunnerStatus status;
57 public static String TITLE = "soapUI " + SoapUI.SOAPUI_VERSION + " Tool Runner";
58
59 /***
60 * Runs the specified tool in the specified soapUI project file, see soapUI xdocs for details.
61 *
62 * @param args
63 * @throws Exception
64 */
65
66 @SuppressWarnings("static-access")
67 public static void main( String [] args) throws Exception
68 {
69 new SoapUIToolRunner().runFromCommandLine( args );
70 }
71
72 /***
73 * Sets the tool(s) to run, can be a comma-seperated list
74 *
75 * @param tool the tools to run
76 */
77
78 public void setTool(String tool)
79 {
80 this.tool = tool;
81 }
82
83 public void setInterface(String iface)
84 {
85 this.iface = iface;
86 }
87
88 public SoapUIToolRunner()
89 {
90 super( TITLE );
91 }
92
93 public SoapUIToolRunner( String title )
94 {
95 super( title );
96 }
97
98 public void runRunner() throws Exception
99 {
100 String projectFile = getProjectFile();
101
102 if( !new File( projectFile ).exists() )
103 throw new Exception( "soapUI project file [" + projectFile + "] not found" );
104
105 WsdlProject project = new WsdlProject( projectFile, null );
106 log.info( "Running tools [" + tool + "] for interface [" + iface + "] in project [" + project.getName() + "]" );
107
108 long startTime = System.nanoTime();
109
110 for( int c = 0; c < project.getInterfaceCount(); c++ )
111 {
112 Interface i = project.getInterfaceAt( c );
113 if( iface == null || i.getName().equals( iface ))
114 {
115 runTool( i );
116 }
117 }
118
119 long timeTaken = (System.nanoTime()-startTime)/1000000;
120 log.info( "time taken: " + timeTaken + "ms" );
121 }
122
123 /***
124 * Runs the configured tool(s) for the specified interface.. needs to be refactored to use
125 * some kind of registry/factory pattern for tools
126 *
127 * @param iface
128 */
129
130 public void runTool( Interface iface )
131 {
132 AbstractToolsAction<Interface> action = null;
133
134 String [] tools = tool.split( "," );
135 for( String tool : tools )
136 {
137 if( tool == null || tool.trim().length() == 0 )
138 continue;
139
140 if( tool.equals( "axis1" ))
141 {
142 action = new Axis1XWSDL2JavaAction();
143 }
144 else if( tool.equals( "axis2" ))
145 {
146 action = new Axis2WSDL2CodeAction();
147 }
148 else if( tool.equals( "dotnet" ))
149 {
150 action = new DotNetWsdlAction();
151 }
152 else if( tool.equals( "gsoap" ))
153 {
154 action = new GSoapAction();
155 }
156 else if( tool.equals( "jaxb" ))
157 {
158 action = new JaxbXjcAction();
159 }
160 else if( tool.equals( "wstools" ))
161 {
162 action = new WSToolsWsdl2JavaAction();
163 }
164 else if( tool.equals( "wscompile" ))
165 {
166 action = new WSCompileAction();
167 }
168 else if( tool.equals( "wsimport" ))
169 {
170 action = new WSImportAction();
171 }
172 else if( tool.equals( "wsconsume" ))
173 {
174 action = new JBossWSConsumeAction();
175 }
176 else if( tool.equals( "xfire" ))
177 {
178 action = new XFireAction();
179 }
180 else if( tool.equals( "cxf" ))
181 {
182 action = new CXFAction();
183 }
184 else if( tool.equals( "xmlbeans" ))
185 {
186 action = new XmlBeans2Action();
187 }
188 else if( tool.equals( "ora" ))
189 {
190 action = new OracleWsaGenProxyAction();
191 }
192 else if( tool.equals( "wsi" ))
193 {
194 action = new WSIAnalyzeAction();
195 }
196
197 try
198 {
199 log.info( "Running tool [" + tool +
200 "] for Interface [" + iface.getName() + "]" );
201 action.perform( iface, null );
202 }
203 catch (Exception e)
204 {
205 SoapUI.logError( e );
206 }
207 }
208 }
209
210 public void run(ToolRunner runner) throws Exception
211 {
212 status = RunnerStatus.RUNNING;
213 runner.setContext( this );
214 runner.run();
215 }
216
217 public RunnerStatus getStatus()
218 {
219 return status;
220 }
221
222 public String getTitle()
223 {
224 return getClass().getSimpleName();
225 }
226
227 public void log(String msg)
228 {
229 System.out.print( msg );
230 }
231
232 public void logError( String msg )
233 {
234 System.err.println( msg );
235 }
236
237 public void setStatus(RunnerStatus status)
238 {
239 this.status = status;
240 }
241
242 public void disposeContext()
243 {
244 }
245
246 @Override
247 protected SoapUIOptions initCommandLineOptions()
248 {
249 SoapUIOptions options = new SoapUIOptions( "toolrunner" );
250 options.addOption( "i", true, "Sets the interface" );
251 options.addOption( "t", true, "Sets the tool to run" );
252 options.addOption( "s", false, "Sets the soapui-settings.xml file to use" );
253 return options;
254 }
255
256 @Override
257 protected boolean processCommandLine( CommandLine cmd )
258 {
259 setTool( cmd.getOptionValue( "t") );
260
261 if( cmd.hasOption( "i"))
262 setInterface( cmd.getOptionValue( "i" ) );
263
264 if( cmd.hasOption( "s"))
265 setSettingsFile( cmd.getOptionValue( "s" ));
266
267 return true;
268
269 }
270 }