001 /** 002 * Licensed to the Apache Software Foundation (ASF) under one or more 003 * contributor license agreements. See the NOTICE file distributed with 004 * this work for additional information regarding copyright ownership. 005 * The ASF licenses this file to You under the Apache License, Version 2.0 006 * (the "License"); you may not use this file except in compliance with 007 * the License. You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 */ 017 018 package org.apache.geronimo.jaxws.builder; 019 020 import java.io.File; 021 import java.io.OutputStream; 022 import java.lang.reflect.InvocationTargetException; 023 import java.net.JarURLConnection; 024 import java.net.URI; 025 import java.net.URL; 026 import java.util.ArrayList; 027 028 import org.apache.geronimo.kernel.repository.ListableRepository; 029 import org.apache.geronimo.kernel.repository.Maven2Repository; 030 031 public class JAXWSToolsCLI { 032 033 enum Command { WSGEN, WSIMPORT }; 034 035 private static final String USAGE_MSG = 036 "Usage: jaxws-tools <toolName> <tool options>\n\n" + 037 "where <toolName> is:\n" + 038 " wsgen - generate portable artifacts from class\n" + 039 " wsimport - generate portable artifacts from WSDL\n"; 040 041 public static void main(String[] args) throws Throwable { 042 if (args.length == 0) { 043 System.err.println(USAGE_MSG); 044 System.exit(1); 045 } 046 047 Command cmd = null; 048 if (args[0].equalsIgnoreCase("wsgen")) { 049 cmd = Command.WSGEN; 050 } else if (args[0].equalsIgnoreCase("wsimport")) { 051 cmd = Command.WSIMPORT; 052 } else { 053 System.err.println("Error: Unsupported toolName [" + args[0] + "]."); 054 System.err.println(); 055 System.err.println(USAGE_MSG); 056 System.exit(1); 057 } 058 059 String geroninoHome = getGeronimoHome(); 060 String[] arguments = getCmdArguments(args); 061 boolean rs = run(cmd, geroninoHome, arguments, System.out); 062 System.exit( (rs) ? 0 : 1 ); 063 } 064 065 static boolean run(Command cmd, String geronimoHome, String[] args, OutputStream out) throws Exception { 066 String repository = System.getProperty("Xorg.apache.geronimo.repository.boot.path", "repository"); 067 Maven2Repository mavenRepository = new Maven2Repository((new File(geronimoHome, repository)).getCanonicalFile()); 068 ArrayList<ListableRepository> repositories = new ArrayList<ListableRepository>(1); 069 repositories.add(mavenRepository); 070 071 JAXWSTools tools = new JAXWSTools(); 072 tools.setUseSunSAAJ(); 073 tools.setOverrideContextClassLoader(true); 074 075 File [] jars; 076 try { 077 jars = tools.getClasspath(repositories); 078 } catch (Exception e) { 079 //if we cannot find SUN's SAAJ impl, try Axis2's. 080 tools.setUseAxis2SAAJ(); 081 jars = tools.getClasspath(repositories); 082 } 083 084 URL[] jarUrls = JAXWSTools.toURL(jars); 085 086 String javaClassPath = System.getProperty("java.class.path"); 087 System.setProperty("java.class.path", JAXWSTools.toString(jars)); 088 089 try { 090 if (cmd.equals(Command.WSGEN)) { 091 return tools.invokeWsgen(jarUrls, out, args); 092 } else if (cmd.equals(Command.WSIMPORT)) { 093 return tools.invokeWsimport(jarUrls, out, args); 094 } else { 095 throw new IllegalArgumentException("Invalid command: " + cmd); 096 } 097 } catch (InvocationTargetException e) { 098 Throwable exception = e.getTargetException(); 099 if (exception instanceof Exception) { 100 throw (Exception)exception; 101 } else { 102 throw e; 103 } 104 } finally { 105 System.setProperty("java.class.path", javaClassPath); 106 } 107 } 108 109 private static String[] getCmdArguments(String[] args) { 110 String [] cmdArgs = new String[args.length - 1]; 111 System.arraycopy(args, 1, cmdArgs, 0, args.length - 1); 112 return cmdArgs; 113 } 114 115 private static String getGeronimoHome() { 116 String geronimoHome = System.getProperty("org.apache.geronimo.home.dir"); 117 if (geronimoHome != null) { 118 return geronimoHome; 119 } 120 121 // guess from the location of the jar 122 URL url = JAXWSToolsCLI.class.getClassLoader().getResource("META-INF/startup-jar"); 123 if (url != null) { 124 try { 125 JarURLConnection jarConnection = (JarURLConnection) url.openConnection(); 126 url = jarConnection.getJarFileURL(); 127 128 URI baseURI = new URI(url.toString()).resolve(".."); 129 File dir = new File(baseURI); 130 return dir.getAbsolutePath(); 131 } catch (Exception ignored) { 132 // ignore 133 } 134 } 135 136 // cannot determine the directory, return parent directory 137 return ".."; 138 } 139 140 }