You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by xu...@apache.org on 2011/02/25 09:51:40 UTC
svn commit: r1074440 - in /geronimo/server/trunk/plugins:
axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/
j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/
j2ee/geronimo-web-2.5-builder/src/main...
Author: xuhaihong
Date: Fri Feb 25 08:51:39 2011
New Revision: 1074440
URL: http://svn.apache.org/viewvc?rev=1074440&view=rev
Log:
Fix forked mode wsgen and webservice annotation scanning, might need refract later
Added:
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AbstractWebServiceFinder.java
Modified:
geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2Builder.java
geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java
geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/pom.xml
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AdvancedWARWebServiceFinder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/JAXWSServiceBuilder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/SimpleWARWebServiceFinder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WARWebServiceFinder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WebServiceFinder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/wsdl/WsdlGeneratorUtils.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/JAXWSTools.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/WsdlGenerator.java
Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2Builder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2Builder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2Builder.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2Builder.java Fri Feb 25 08:51:39 2011
@@ -84,15 +84,17 @@ public class Axis2Builder extends JAXWSS
return defaultContainerFactoryGBeanInfo;
}
+ @Override
protected Map<String, PortInfo> parseWebServiceDescriptor(InputStream in,
URL wsDDUrl,
Deployable deployable,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException {
- log.debug("Parsing descriptor " + wsDDUrl);
-
+ if (log.isDebugEnabled()) {
+ log.debug("Parsing descriptor " + wsDDUrl);
+ }
Map<String, PortInfo> map = null;
try {
@@ -147,7 +149,7 @@ public class Axis2Builder extends JAXWSS
portInfo.setWsdlService(port.getWsdlService());
}
- String location = (String) correctedPortLocations.get(serviceLink);
+ String location = correctedPortLocations.get(serviceLink);
portInfo.setLocation(location);
if (map == null) {
@@ -162,7 +164,7 @@ public class Axis2Builder extends JAXWSS
// }
return map;
-
+
} catch (JAXBException e) {
//we hope it's jax-rpc
log.debug("Descriptor ignored (not a Java EE 5 descriptor)");
Modified: geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-j2ee-builder/src/main/java/org/apache/geronimo/j2ee/deployment/WebServiceBuilder.java Fri Feb 25 08:51:39 2011
@@ -30,7 +30,7 @@ import org.osgi.framework.Bundle;
public interface WebServiceBuilder {
/**
- * Introspects on the module file to locate web service for deployment.
+ * Introspect on the module file to locate web service for deployment.
*
* @param moduleFile J2EE module
* @param isEJB is this an EJB archive?
@@ -41,7 +41,7 @@ public interface WebServiceBuilder {
* to all except the WebServiceBuilder itself.
* @throws DeploymentException if error encountered while introspecting the module.
*/
- void findWebServices(Module module, boolean isEJB, Map correctedPortLocations, Environment environment, Map sharedContext) throws DeploymentException;
+ void findWebServices(Module module, boolean isEJB, Map<String, String> correctedPortLocations, Environment environment, Map sharedContext) throws DeploymentException;
//obviously these need the deployment descriptors, but I'm not sure in what form yet.
/**
Modified: geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/j2ee/geronimo-web-2.5-builder/src/main/java/org/apache/geronimo/web25/deployment/AbstractWebModuleBuilder.java Fri Feb 25 08:51:39 2011
@@ -382,7 +382,7 @@ public abstract class AbstractWebModuleB
// any classes exist. This must be searched BEFORE the WEB-INF/lib jar files,
// per the servlet specifications.
moduleContext.addToClassPath(module.resolve("WEB-INF/classes").getPath());
- manifestcp.add("WEB-INF/classes"); // NOTE: Spec requires there be no trailing "/" on this.
+ manifestcp.add("WEB-INF/classes"); // NOTE: Spec requires there be no trailing "/" on this.
// install the libs
for (ZipEntry entry : libs) {
URI targetPath = module.resolve(entry.getName());
@@ -470,7 +470,7 @@ public abstract class AbstractWebModuleB
//web.xml should now list all the classes we need to create instances of.
//Process Web Service
- Map servletNameToPathMap = buildServletNameToPathMap(webModule.getSpecDD(), webModule.getContextRoot());
+ Map<String, String> servletNameToPathMap = buildServletNameToPathMap(webModule.getSpecDD(), webModule.getContextRoot());
Map sharedContext = webModule.getSharedContext();
for (WebServiceBuilder serviceBuilder : webServiceBuilder) {
serviceBuilder.findWebServices(webModule, false, servletNameToPathMap, webModule.getEnvironment(), sharedContext);
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/pom.xml?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/pom.xml (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/pom.xml Fri Feb 25 08:51:39 2011
@@ -45,6 +45,12 @@
<artifactId>geronimo-naming-builder</artifactId>
<version>${project.version}</version>
</dependency>
+
+ <dependency>
+ <groupId>org.apache.xbean</groupId>
+ <artifactId>xbean-classloader</artifactId>
+ </dependency>
+
<dependency>
<groupId>org.apache.openejb</groupId>
<artifactId>openejb-jee</artifactId>
Added: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AbstractWebServiceFinder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AbstractWebServiceFinder.java?rev=1074440&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AbstractWebServiceFinder.java (added)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AbstractWebServiceFinder.java Fri Feb 25 08:51:39 2011
@@ -0,0 +1,196 @@
+/**
+ * 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.geronimo.jaxws.builder;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Enumeration;
+import java.util.List;
+import java.util.jar.JarEntry;
+import java.util.jar.JarFile;
+
+import javax.jws.WebService;
+import javax.xml.ws.WebServiceProvider;
+
+import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.deployment.Deployable;
+import org.apache.geronimo.deployment.DeployableBundle;
+import org.apache.geronimo.deployment.DeployableJarFile;
+import org.apache.geronimo.j2ee.deployment.Module;
+import org.apache.geronimo.kernel.util.FileUtils;
+import org.apache.geronimo.kernel.util.JarUtils;
+import org.apache.geronimo.kernel.util.NestedJarFile;
+import org.apache.geronimo.kernel.util.UnpackedJarFile;
+import org.apache.xbean.classloader.JarFileClassLoader;
+import org.apache.xbean.finder.BundleAnnotationFinder;
+import org.apache.xbean.finder.ClassFinder;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public abstract class AbstractWebServiceFinder implements WebServiceFinder {
+
+ private static final Logger logger = LoggerFactory.getLogger(AbstractWebServiceFinder.class);
+
+ /**
+ * Returns a list of any classes annotated with @WebService or
+ * @WebServiceProvider annotation.
+ */
+ protected List<Class<?>> discoverWebServices(Module module, boolean isEJB) throws DeploymentException {
+ Deployable deployable = module.getDeployable();
+ if (deployable instanceof DeployableJarFile) {
+ return discoverWebServices(((DeployableJarFile) deployable).getJarFile(), isEJB, AbstractWebServiceFinder.class.getClassLoader());
+ } else if (deployable instanceof DeployableBundle) {
+ return discoverWebServices(((DeployableBundle) deployable).getBundle(), isEJB);
+ } else {
+ throw new DeploymentException("Unsupported deployable: " + deployable.getClass());
+ }
+ }
+
+ /**
+ * Returns a list of any classes annotated with @WebService or
+ * @WebServiceProvider annotation.
+ */
+ private List<Class<?>> discoverWebServices(Bundle bundle, boolean isEJB) throws DeploymentException {
+ logger.debug("Discovering web service classes");
+
+ ServiceReference sr = bundle.getBundleContext().getServiceReference(PackageAdmin.class.getName());
+ PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(sr);
+ try {
+ BundleAnnotationFinder classFinder = new BundleAnnotationFinder(packageAdmin, bundle);
+ List<Class<?>> classes = new ArrayList<Class<?>>();
+ classes.addAll(classFinder.findAnnotatedClasses(WebService.class));
+ classes.addAll(classFinder.findAnnotatedClasses(WebServiceProvider.class));
+ return classes;
+ } catch (Exception e) {
+ throw new DeploymentException("Error scanning for web service annotations in bundle", e);
+ } finally {
+ bundle.getBundleContext().ungetService(sr);
+ }
+ }
+
+ /**
+ * Returns a list of any classes annotated with @WebService or
+ * @WebServiceProvider annotation.
+ */
+ @Deprecated
+ private List<Class<?>> discoverWebServices(JarFile moduleFile, boolean isEJB, ClassLoader parentClassLoader) throws DeploymentException {
+ logger.debug("Discovering web service classes");
+
+ File tmpDir = null;
+ List<URL> urlList = new ArrayList<URL>();
+ if (isEJB) {
+ File jarFile = new File(moduleFile.getName());
+ try {
+ urlList.add(jarFile.toURI().toURL());
+ } catch (MalformedURLException e) {
+ // this should not happen
+ throw new DeploymentException(e);
+ }
+ } else {
+ File baseDir;
+
+ if (moduleFile instanceof UnpackedJarFile) {
+ // war directory is being deployed (--inPlace)
+ baseDir = ((UnpackedJarFile) moduleFile).getBaseDir();
+ } else if (moduleFile instanceof NestedJarFile && ((NestedJarFile) moduleFile).isUnpacked()) {
+ // ear directory is being deployed (--inPlace)
+ baseDir = new File(moduleFile.getName());
+ } else {
+ // war file or ear file is being deployed
+ /*
+ * Can't get ClassLoader to load nested Jar files, so
+ * unpack the module Jar file and discover all nested Jar files
+ * within it and the classes/ directory.
+ */
+ try {
+ tmpDir = FileUtils.createTempDir();
+ /*
+ * This is needed becuase JarUtils.unzipToDirectory()
+ * always closes the passed JarFile.
+ */
+ JarFile module = new JarFile(moduleFile.getName());
+ JarUtils.unzipToDirectory(module, tmpDir);
+ } catch (IOException e) {
+ if (tmpDir != null) {
+ FileUtils.recursiveDelete(tmpDir);
+ }
+ throw new DeploymentException("Failed to expand the module archive", e);
+ }
+
+ baseDir = tmpDir;
+ }
+
+ // create URL list
+ Enumeration<JarEntry> jarEnum = moduleFile.entries();
+ while (jarEnum.hasMoreElements()) {
+ JarEntry entry = jarEnum.nextElement();
+ String name = entry.getName();
+ if (name.equals("WEB-INF/classes/")) {
+ // ensure it is first
+ File classesDir = new File(baseDir, "WEB-INF/classes/");
+ try {
+ urlList.add(0, classesDir.toURI().toURL());
+ } catch (MalformedURLException e) {
+ // this should not happen, ignore
+ }
+ } else if (name.startsWith("WEB-INF/lib/") && name.endsWith(".jar")) {
+ File jarFile = new File(baseDir, name);
+ try {
+ urlList.add(jarFile.toURI().toURL());
+ } catch (MalformedURLException e) {
+ // this should not happen, ignore
+ }
+ }
+ }
+ }
+
+ URL[] urls = urlList.toArray(new URL[urlList.size()]);
+ JarFileClassLoader tempClassLoader = null;
+ try {
+ tempClassLoader = new JarFileClassLoader(null, urls, parentClassLoader);
+ List<Class<?>> classes = new ArrayList<Class<?>>();
+ for (URL url : urlList) {
+ try {
+ ClassFinder classFinder = new ClassFinder(tempClassLoader, Collections.singletonList(url));
+ classes.addAll(classFinder.findAnnotatedClasses(WebService.class));
+ classes.addAll(classFinder.findAnnotatedClasses(WebServiceProvider.class));
+ } catch (Exception e) {
+ logger.warn("Fail to search Web Service in jar [" + url + "]", e);
+ }
+ }
+ return classes;
+ } finally {
+ if (tempClassLoader != null) {
+ tempClassLoader.destroy();
+ }
+ if (tmpDir != null) {
+ FileUtils.recursiveDelete(tmpDir);
+ }
+ }
+ }
+}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AdvancedWARWebServiceFinder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AdvancedWARWebServiceFinder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AdvancedWARWebServiceFinder.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/AdvancedWARWebServiceFinder.java Fri Feb 25 08:51:39 2011
@@ -34,23 +34,25 @@ import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class AdvancedWARWebServiceFinder implements WebServiceFinder {
+public class AdvancedWARWebServiceFinder extends AbstractWebServiceFinder {
private static final Logger LOG = LoggerFactory.getLogger(AdvancedWARWebServiceFinder.class);
+ @Override
public Map<String, PortInfo> discoverWebServices(Module module,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException {
- Map<String, PortInfo> map = new HashMap<String, PortInfo>();
- discoverPOJOWebServices(module, correctedPortLocations, map);
- return map;
+ Map<String, PortInfo> servletNamePortInfoMap = new HashMap<String, PortInfo>();
+ discoverPOJOWebServices(module, correctedPortLocations, servletNamePortInfoMap);
+ return servletNamePortInfoMap;
}
private void discoverPOJOWebServices(Module module,
- Map portLocations,
- Map<String, PortInfo> map)
+ Map<String, String> portLocations,
+ Map<String, PortInfo> servletNamePortInfoMap)
throws DeploymentException {
+
Bundle bundle = module.getEarContext().getDeploymentBundle();
WebApp webApp = (WebApp) module.getSpecDD();
@@ -62,8 +64,10 @@ public class AdvancedWARWebServiceFinder
String servletName = servletType.getServletName().trim();
PortInfo portInfo = getPortInfo(servletType, bundle, portLocations);
if (portInfo != null) {
- LOG.debug("Found POJO Web Service: {}", servletName);
- map.put(servletName, portInfo);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Found POJO Web Service: {}", servletName);
+ }
+ servletNamePortInfoMap.put(servletName, portInfo);
}
}
@@ -71,28 +75,29 @@ public class AdvancedWARWebServiceFinder
// partial web.xml, discover all web service classes
Map<String, List<String>> classServletMap = createClassServetMap(webApp);
- List<Class<?>> services = WARWebServiceFinder.discoverWebServices(module, bundle, false);
+ List<Class<?>> services = discoverWebServices(module, false);
String contextRoot = ((WebModule) module).getContextRoot();
- for (Class service : services) {
+ for (Class<?> service : services) {
// skip interfaces and such
if (!JAXWSUtils.isWebService(service)) {
continue;
}
- LOG.debug("Discovered POJO Web Service class: {}", service.getName());
-
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Discovered POJO Web Service class: {}", service.getName());
+ }
List<String> mappedServlets = classServletMap.get(service.getName());
if (mappedServlets == null) {
// no <servlet/> entry, add one
-
- LOG.debug("POJO Web Service class {} is not mapped to any servlet", service.getName());
-
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("POJO Web Service class {} is not mapped to any servlet", service.getName());
+ }
Servlet servlet = new Servlet();
servlet.setServletName(service.getName());
servlet.setServletClass(service.getName());
webApp.getServlet().add(servlet);
- String location = (String)portLocations.get(service.getName());
+ String location = portLocations.get(service.getName());
if (location == null) {
// add new <servlet-mapping/> element
location = "/" + JAXWSUtils.getServiceName(service);
@@ -109,13 +114,15 @@ public class AdvancedWARWebServiceFinder
// map service
PortInfo portInfo = new PortInfo();
portInfo.setLocation(contextRoot + location);
- map.put(service.getName(), portInfo);
+ servletNamePortInfoMap.put(service.getName(), portInfo);
} else {
// found at least one mapped <servlet/> entry
for (String servlet : mappedServlets) {
- LOG.debug("POJO Web Service class {} is mapped to {} servlet", service.getName(), servlet);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("POJO Web Service class {} is mapped to {} servlet", service.getName(), servlet);
+ }
PortInfo portInfo = createPortInfo(servlet, portLocations);
- map.put(servlet, portInfo);
+ servletNamePortInfoMap.put(servlet, portInfo);
}
}
}
@@ -124,11 +131,13 @@ public class AdvancedWARWebServiceFinder
List<Servlet> servletTypes = webApp.getServlet();
for (Servlet servletType : servletTypes) {
String servletName = servletType.getServletName().trim();
- if (map.get(servletName) == null) {
+ if (servletNamePortInfoMap.get(servletName) == null) {
PortInfo portInfo = getPortInfo(servletType, bundle, portLocations);
if (portInfo != null) {
- LOG.debug("Found POJO Web Service: {}", servletName);
- map.put(servletName, portInfo);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Found POJO Web Service: {}", servletName);
+ }
+ servletNamePortInfoMap.put(servletName, portInfo);
}
}
}
@@ -137,12 +146,12 @@ public class AdvancedWARWebServiceFinder
private PortInfo getPortInfo(Servlet servletType,
Bundle bundle,
- Map portLocations) throws DeploymentException {
+ Map<String, String> portLocations) throws DeploymentException {
PortInfo portInfo = null;
if (servletType.getServletClass() != null) {
String servletClassName = servletType.getServletClass().trim();
try {
- Class servletClass = bundle.loadClass(servletClassName);
+ Class<?> servletClass = bundle.loadClass(servletClassName);
if (JAXWSUtils.isWebService(servletClass)) {
String servletName = servletType.getServletName().trim();
portInfo = createPortInfo(servletName, portLocations);
@@ -155,9 +164,9 @@ public class AdvancedWARWebServiceFinder
return portInfo;
}
- private PortInfo createPortInfo(String servlet, Map portLocations) {
+ private PortInfo createPortInfo(String servlet, Map<String, String> portLocations) {
PortInfo portInfo = new PortInfo();
- String location = (String)portLocations.get(servlet);
+ String location = portLocations.get(servlet);
if (location != null) {
portInfo.setLocation(location);
}
@@ -168,25 +177,23 @@ public class AdvancedWARWebServiceFinder
* Create servlet-class to servlet-names mapping
*/
private Map<String, List<String>> createClassServetMap(WebApp webApp) {
- Map<String, List<String>> map = new HashMap<String, List<String>>();
-
+ Map<String, List<String>> classServletNameMap = new HashMap<String, List<String>>();
List<Servlet> servletTypes = webApp.getServlet();
if (servletTypes != null) {
for (Servlet servletType : servletTypes) {
String servletName = servletType.getServletName().trim();
if (servletType.getServletClass() != null) {
String servletClassName = servletType.getServletClass().trim();
- List<String> servlets = map.get(servletClassName);
+ List<String> servlets = classServletNameMap.get(servletClassName);
if (servlets == null) {
servlets = new ArrayList<String>();
- map.put(servletClassName, servlets);
+ classServletNameMap.put(servletClassName, servlets);
}
servlets.add(servletName);
}
}
}
-
- return map;
+ return classServletNameMap;
}
}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/JAXWSServiceBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/JAXWSServiceBuilder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/JAXWSServiceBuilder.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/JAXWSServiceBuilder.java Fri Feb 25 08:51:39 2011
@@ -43,6 +43,7 @@ import org.apache.geronimo.jaxws.annotat
import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
import org.apache.geronimo.kernel.GBeanNotFoundException;
import org.apache.geronimo.kernel.repository.Environment;
+import org.apache.geronimo.kernel.util.IOUtils;
import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -65,23 +66,26 @@ public abstract class JAXWSServiceBuilde
return getClass().getName();
}
+ @Override
public void findWebServices(Module module,
boolean isEJB,
- Map servletLocations,
+ Map<String, String> servletLocations,
Environment environment,
Map sharedContext) throws DeploymentException {
- Map portMap = null;
+ Map<String, PortInfo> portMap = null;
String path = isEJB ? "META-INF/webservices.xml" : "WEB-INF/webservices.xml";
Deployable deployable = module.getDeployable();
URL wsDDUrl = deployable.getResource(path);
if (wsDDUrl != null) {
- InputStream in;
+ InputStream in = null;
try {
in = wsDDUrl.openStream();
+ portMap = parseWebServiceDescriptor(in, wsDDUrl, deployable, isEJB, servletLocations);
} catch (IOException e) {
throw new DeploymentException("Failed to parse " + path, e);
+ } finally {
+ IOUtils.close(in);
}
- portMap = parseWebServiceDescriptor(in, wsDDUrl, deployable, isEJB, servletLocations);
} else {
// webservices.xml does not exist
portMap = discoverWebServices(module, isEJB, servletLocations);
@@ -96,21 +100,22 @@ public abstract class JAXWSServiceBuilde
private Map<String, PortInfo> discoverWebServices(Module module,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException {
- if (this.webServiceFinder == null) {
+ if (webServiceFinder == null) {
throw new DeploymentException("WebServiceFinder not configured");
}
- return this.webServiceFinder.discoverWebServices(module, isEJB, correctedPortLocations);
+ return webServiceFinder.discoverWebServices(module, isEJB, correctedPortLocations);
}
protected abstract Map<String, PortInfo> parseWebServiceDescriptor(InputStream in,
URL wsDDUrl,
Deployable deployable,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException;
+ @Override
public boolean configurePOJO(GBeanData targetGBean,
String servletName,
Module module,
@@ -118,12 +123,12 @@ public abstract class JAXWSServiceBuilde
DeploymentContext context)
throws DeploymentException {
Map sharedContext = ((WebModule) module).getSharedContext();
- Map portInfoMap = (Map) sharedContext.get(getKey());
+ Map<String, PortInfo> portInfoMap = (Map<String, PortInfo>) sharedContext.get(getKey());
if (portInfoMap == null) {
// not ours
return false;
}
- PortInfo portInfo = (PortInfo) portInfoMap.get(servletName);
+ PortInfo portInfo = portInfoMap.get(servletName);
if (portInfo == null) {
// not ours
return false;
@@ -186,6 +191,7 @@ public abstract class JAXWSServiceBuilde
protected abstract GBeanInfo getContainerFactoryGBeanInfo();
+ @Override
public boolean configureEJB(GBeanData targetGBean,
String ejbName,
Module module,
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/SimpleWARWebServiceFinder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/SimpleWARWebServiceFinder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/SimpleWARWebServiceFinder.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/SimpleWARWebServiceFinder.java Fri Feb 25 08:51:39 2011
@@ -33,17 +33,17 @@ import org.osgi.framework.Bundle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-public class SimpleWARWebServiceFinder implements WebServiceFinder {
+public class SimpleWARWebServiceFinder extends AbstractWebServiceFinder {
private static final Logger LOG = LoggerFactory.getLogger(SimpleWARWebServiceFinder.class);
public Map<String, PortInfo> discoverWebServices(Module module,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException {
-
- Map<String, PortInfo> map = new HashMap<String, PortInfo>();
-
+
+ Map<String, PortInfo> servletNamePortInfoMap = new HashMap<String, PortInfo>();
+
Bundle bundle = module.getEarContext().getDeploymentBundle();
WebApp webApp = (WebApp) module.getSpecDD();
@@ -53,16 +53,17 @@ public class SimpleWARWebServiceFinder i
if (webApp.getServlet().size() == 0) {
// web.xml not present (empty really), discover annotated
// classes and update DD
- List<Class<?>> services = WARWebServiceFinder.discoverWebServices(module.getModuleFile(), false, this.getClass().getClassLoader());
+ List<Class<?>> services = discoverWebServices(module, false);
String contextRoot = ((WebModule) module).getContextRoot();
- for (Class service : services) {
+ for (Class<?> service : services) {
// skip interfaces and such
if (!JAXWSUtils.isWebService(service)) {
continue;
}
- LOG.debug("Discovered POJO Web Service: " + service.getName());
-
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Discovered POJO Web Service: " + service.getName());
+ }
// add new <servlet/> element
Servlet servlet = new Servlet();
servlet.setServletName(service.getName());
@@ -77,7 +78,7 @@ public class SimpleWARWebServiceFinder i
// map service
PortInfo portInfo = new PortInfo();
portInfo.setLocation(contextRoot + location);
- map.put(service.getName(), portInfo);
+ servletNamePortInfoMap.put(service.getName(), portInfo);
}
} else {
// web.xml present, examine servlet classes and check for web
@@ -87,11 +88,13 @@ public class SimpleWARWebServiceFinder i
if (servletType.getServletClass() != null) {
String servletClassName = servletType.getServletClass().trim();
try {
- Class servletClass = bundle.loadClass(servletClassName);
+ Class<?> servletClass = bundle.loadClass(servletClassName);
if (JAXWSUtils.isWebService(servletClass)) {
- LOG.debug("Found POJO Web Service: " + servletName);
+ if (LOG.isDebugEnabled()) {
+ LOG.debug("Found POJO Web Service: " + servletName);
+ }
PortInfo portInfo = new PortInfo();
- map.put(servletName, portInfo);
+ servletNamePortInfoMap.put(servletName, portInfo);
}
} catch (Exception e) {
throw new DeploymentException("Failed to load servlet class "
@@ -101,20 +104,17 @@ public class SimpleWARWebServiceFinder i
}
// update web service locations
- for (Map.Entry entry : map.entrySet()) {
- String servletName = (String) entry.getKey();
- PortInfo portInfo = (PortInfo) entry.getValue();
+ for (Map.Entry<String, PortInfo> entry : servletNamePortInfoMap.entrySet()) {
+ String servletName = entry.getKey();
+ PortInfo portInfo = entry.getValue();
- String location = (String) correctedPortLocations.get(servletName);
+ String location = correctedPortLocations.get(servletName);
if (location != null) {
portInfo.setLocation(location);
}
}
}
-
- return map;
- }
-
-
+ return servletNamePortInfoMap;
+ }
}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WARWebServiceFinder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WARWebServiceFinder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WARWebServiceFinder.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WARWebServiceFinder.java Fri Feb 25 08:51:39 2011
@@ -17,38 +17,10 @@
package org.apache.geronimo.jaxws.builder;
-import java.io.File;
-import java.io.IOException;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Enumeration;
-import java.util.List;
import java.util.Map;
-import java.util.jar.JarEntry;
-import java.util.jar.JarFile;
-
-import javax.jws.WebService;
-import javax.xml.ws.WebServiceProvider;
-
import org.apache.geronimo.common.DeploymentException;
-import org.apache.geronimo.deployment.Deployable;
-import org.apache.geronimo.deployment.DeployableBundle;
-import org.apache.geronimo.deployment.DeployableJarFile;
import org.apache.geronimo.j2ee.deployment.Module;
import org.apache.geronimo.jaxws.PortInfo;
-import org.apache.geronimo.kernel.classloader.TemporaryClassLoader;
-import org.apache.xbean.finder.BundleAnnotationFinder;
-import org.apache.xbean.osgi.bundle.util.BundleClassLoader;
-import org.apache.geronimo.kernel.util.FileUtils;
-import org.apache.geronimo.kernel.util.JarUtils;
-import org.apache.geronimo.kernel.util.NestedJarFile;
-import org.apache.geronimo.kernel.util.UnpackedJarFile;
-import org.apache.xbean.finder.ClassFinder;
-import org.osgi.framework.Bundle;
-import org.osgi.framework.ServiceReference;
-import org.osgi.service.packageadmin.PackageAdmin;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -73,153 +45,11 @@ public class WARWebServiceFinder impleme
return webServiceFinder;
}
+ @Override
public Map<String, PortInfo> discoverWebServices(Module module,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException {
return webServiceFinder.discoverWebServices(module, isEJB, correctedPortLocations);
}
-
- /**
- * Returns a list of any classes annotated with @WebService or
- * @WebServiceProvider annotation.
- */
- static List<Class<?>> discoverWebServices(Module module,
- Bundle bundle,
- boolean isEJB)
- throws DeploymentException {
- Deployable deployable = module.getDeployable();
- if (deployable instanceof DeployableJarFile) {
- return discoverWebServices( ((DeployableJarFile) deployable).getJarFile(), isEJB, new BundleClassLoader(bundle));
- } else if (deployable instanceof DeployableBundle) {
- return discoverWebServices( ((DeployableBundle) deployable).getBundle(), isEJB);
- } else {
- throw new DeploymentException("Unsupported deployable: " + deployable.getClass());
- }
- }
-
- /**
- * Returns a list of any classes annotated with @WebService or
- * @WebServiceProvider annotation.
- */
- static List<Class<?>> discoverWebServices(Bundle bundle,
- boolean isEJB)
- throws DeploymentException {
- LOG.debug("Discovering web service classes");
-
- ServiceReference sr = bundle.getBundleContext().getServiceReference(PackageAdmin.class.getName());
- PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(sr);
- try {
- BundleAnnotationFinder classFinder = new BundleAnnotationFinder(packageAdmin, bundle);
- List<Class<?>> classes = new ArrayList<Class<?>>();
- classes.addAll(classFinder.findAnnotatedClasses(WebService.class));
- classes.addAll(classFinder.findAnnotatedClasses(WebServiceProvider.class));
- return classes;
- } catch (Exception e) {
- throw new DeploymentException("Error scanning for web service annotations in bundle", e);
- } finally {
- bundle.getBundleContext().ungetService(sr);
- }
- }
-
- /**
- * Returns a list of any classes annotated with @WebService or
- * @WebServiceProvider annotation.
- */
- static List<Class<?>> discoverWebServices(JarFile moduleFile,
- boolean isEJB,
- ClassLoader parentClassLoader)
- throws DeploymentException {
- LOG.debug("Discovering web service classes");
-
- File tmpDir = null;
- List<URL> urlList = new ArrayList<URL>();
- if (isEJB) {
- File jarFile = new File(moduleFile.getName());
- try {
- urlList.add(jarFile.toURI().toURL());
- } catch (MalformedURLException e) {
- // this should not happen
- throw new DeploymentException(e);
- }
- } else {
- File baseDir;
-
- if (moduleFile instanceof UnpackedJarFile) {
- // war directory is being deployed (--inPlace)
- baseDir = ((UnpackedJarFile)moduleFile).getBaseDir();
- } else if (moduleFile instanceof NestedJarFile && ((NestedJarFile)moduleFile).isUnpacked()) {
- // ear directory is being deployed (--inPlace)
- baseDir = new File(moduleFile.getName());
- } else {
- // war file or ear file is being deployed
- /*
- * Can't get ClassLoader to load nested Jar files, so
- * unpack the module Jar file and discover all nested Jar files
- * within it and the classes/ directory.
- */
- try {
- tmpDir = FileUtils.createTempDir();
- /*
- * This is needed becuase JarUtils.unzipToDirectory()
- * always closes the passed JarFile.
- */
- JarFile module = new JarFile(moduleFile.getName());
- JarUtils.unzipToDirectory(module, tmpDir);
- } catch (IOException e) {
- if (tmpDir != null) {
- FileUtils.recursiveDelete(tmpDir);
- }
- throw new DeploymentException("Failed to expand the module archive", e);
- }
-
- baseDir = tmpDir;
- }
-
- // create URL list
- Enumeration<JarEntry> jarEnum = moduleFile.entries();
- while (jarEnum.hasMoreElements()) {
- JarEntry entry = jarEnum.nextElement();
- String name = entry.getName();
- if (name.equals("WEB-INF/classes/")) {
- // ensure it is first
- File classesDir = new File(baseDir, "WEB-INF/classes/");
- try {
- urlList.add(0, classesDir.toURI().toURL());
- } catch (MalformedURLException e) {
- // this should not happen, ignore
- }
- } else if (name.startsWith("WEB-INF/lib/")
- && name.endsWith(".jar")) {
- File jarFile = new File(baseDir, name);
- try {
- urlList.add(jarFile.toURI().toURL());
- } catch (MalformedURLException e) {
- // this should not happen, ignore
- }
- }
- }
- }
-
- URL[] urls = urlList.toArray(new URL[urlList.size()]);
- TemporaryClassLoader tempClassLoader;
- try {
- tempClassLoader = new TemporaryClassLoader(urls, parentClassLoader);
- List<Class<?>> classes = new ArrayList<Class<?>>();
- for (URL url : urlList) {
- try {
- ClassFinder classFinder = new ClassFinder(tempClassLoader, Collections.singletonList(url));
- classes.addAll(classFinder.findAnnotatedClasses(WebService.class));
- classes.addAll(classFinder.findAnnotatedClasses(WebServiceProvider.class));
- } catch (Exception e) {
- LOG.warn("Fail to search Web Service in jar [" + url + "]", e);
- }
- }
- return classes;
- } finally {
- if (tmpDir != null) {
- FileUtils.recursiveDelete(tmpDir);
- }
- }
- }
}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WebServiceFinder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WebServiceFinder.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WebServiceFinder.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/WebServiceFinder.java Fri Feb 25 08:51:39 2011
@@ -27,7 +27,7 @@ public interface WebServiceFinder {
Map<String, PortInfo> discoverWebServices(Module module,
boolean isEJB,
- Map correctedPortLocations)
+ Map<String, String> correctedPortLocations)
throws DeploymentException;
}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/wsdl/WsdlGeneratorUtils.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/wsdl/WsdlGeneratorUtils.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/wsdl/WsdlGeneratorUtils.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/wsdl/WsdlGeneratorUtils.java Fri Feb 25 08:51:39 2011
@@ -22,7 +22,6 @@ import java.io.FileFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
-import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
@@ -34,9 +33,6 @@ import java.util.Set;
import org.apache.geronimo.deployment.DeploymentContext;
import org.apache.geronimo.j2ee.deployment.Module;
import org.apache.geronimo.kernel.config.Configuration;
-import org.apache.geronimo.kernel.config.ConfigurationResolver;
-// import org.apache.geronimo.kernel.config.MultiParentClassLoader;
-import org.apache.geronimo.kernel.config.NoSuchConfigException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -44,10 +40,10 @@ public class WsdlGeneratorUtils {
private static final Logger LOG = LoggerFactory.getLogger(WsdlGeneratorUtils.class);
- public static void getModuleClasspath(Module module, DeploymentContext context, StringBuilder classpath) throws Exception {
+ public static void getModuleClasspath(Module module, DeploymentContext context, StringBuilder classPathBuilder) throws Exception {
LinkedHashSet<URL> jars = new LinkedHashSet<URL>();
getModuleClasspath(module, context, jars);
- buildClasspath(jars, classpath);
+ buildClasspath(jars, classPathBuilder);
}
public static void getModuleClasspath(Module module, DeploymentContext context, LinkedHashSet<URL> classpath) throws Exception {
@@ -58,8 +54,10 @@ public class WsdlGeneratorUtils {
}
public static void getModuleClasspath(DeploymentContext deploymentContext, LinkedHashSet<URL> classpath) throws Exception {
- Configuration configuration = deploymentContext.getConfiguration();
- getModuleClasspath(configuration, classpath);
+ File configurationBaseDir = deploymentContext.getBaseDir();
+ for (String bundleClassPath : deploymentContext.getBundleClassPath()) {
+ classpath.add(new File(configurationBaseDir, bundleClassPath).toURI().toURL());
+ }
}
public static void getModuleClasspath(Configuration configuration, LinkedHashSet<URL> classpath) throws Exception {
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/JAXWSTools.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/JAXWSTools.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/JAXWSTools.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/JAXWSTools.java Fri Feb 25 08:51:39 2011
@@ -73,6 +73,11 @@ public class JAXWSTools {
"javax.xml.ws"
};
+ private final static String[][] ENDORSED_ARTIFACTS = {
+ { "org.apache.geronimo.specs", "geronimo-jaxws_2.2_spec" },
+ { "org.apache.geronimo.specs", "geronimo-jaxb_2.2_spec" }
+ };
+
private final static Artifact SUN_SAAJ_IMPL_ARTIFACT = new Artifact("org.apache.geronimo.bundles","saaj-impl", (Version)null, "jar");
private final static Artifact AXIS2_SAAJ_IMPL_ARTIFACT = new Artifact("org.apache.geronimo.bundles","axis2", (Version)null, "jar");
private final static String TOOLS = "tools.jar";
@@ -191,10 +196,25 @@ public class JAXWSTools {
}
}
+ public String getEndorsedDirectory(Collection<? extends Repository> repositories) throws Exception {
+ StringBuilder endorsedDirectories = new StringBuilder();
+ for (String[] lib : ENDORSED_ARTIFACTS) {
+ Artifact artifact = new Artifact(lib[0], lib[1], (Version) null, "jar");
+ if (endorsedDirectories.length() > 0) {
+ endorsedDirectories.append(File.pathSeparator);
+ }
+ endorsedDirectories.append(getLocation(repositories, artifact).getParent());
+ }
+ String defaultEndorsedDirectory = System.getProperty("java.home") + File.separator + "lib" + File.separator + "endorsed";
+ endorsedDirectories.append(File.pathSeparator).append(defaultEndorsedDirectory);
+ return endorsedDirectories.toString();
+ }
+
public boolean invokeWsgen(URL[] jars, OutputStream os, String[] arguments) throws Exception {
return invoke("wsgen", jars, os, arguments);
}
+
public boolean invokeWsimport(URL[] jars, OutputStream os, String[] arguments) throws Exception {
return invoke("wsimport", jars, os, arguments);
}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/WsdlGenerator.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/WsdlGenerator.java?rev=1074440&r1=1074439&r2=1074440&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/WsdlGenerator.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-sun-tools/src/main/java/org/apache/geronimo/jaxws/sun/tools/WsdlGenerator.java Fri Feb 25 08:51:39 2011
@@ -29,12 +29,12 @@ import java.util.List;
import javax.xml.namespace.QName;
import org.apache.geronimo.common.DeploymentException;
-import org.apache.geronimo.deployment.DeploymentConfigurationManager;
import org.apache.geronimo.deployment.DeploymentContext;
import org.apache.geronimo.j2ee.deployment.Module;
import org.apache.geronimo.jaxws.PortInfo;
import org.apache.geronimo.jaxws.builder.wsdl.WsdlGeneratorOptions;
import org.apache.geronimo.jaxws.builder.wsdl.WsdlGeneratorUtils;
+import org.apache.geronimo.kernel.config.ConfigurationManager;
import org.apache.geronimo.kernel.repository.Repository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -59,15 +59,20 @@ public class WsdlGenerator {
}
private URL[] getWsgenClasspath(DeploymentContext context) throws Exception {
- DeploymentConfigurationManager cm = (DeploymentConfigurationManager)context.getConfigurationManager();
+ ConfigurationManager cm = context.getConfigurationManager();
Collection<? extends Repository> repositories = cm.getRepositories();
File[] jars = this.jaxwsTools.getClasspath(repositories);
return JAXWSTools.toURL(jars);
}
- private String[] buildArguments(String sei, String classPath, File moduleBaseDir, PortInfo portInfo) {
- List<String> arguments = new ArrayList<String>();
+ private String getEndorsedPath(DeploymentContext context) throws Exception {
+ ConfigurationManager cm = context.getConfigurationManager();
+ Collection<? extends Repository> repositories = cm.getRepositories();
+ return jaxwsTools.getEndorsedDirectory(repositories);
+ }
+ private String[] buildArguments(String sei, String classPath, File moduleBaseDir, PortInfo portInfo) throws Exception{
+ List<String> arguments = new ArrayList<String>(11);
arguments.add("-cp");
arguments.add(classPath);
arguments.add("-keep");
@@ -118,33 +123,36 @@ public class WsdlGenerator {
}
URL[] urls;
- StringBuilder classPath = new StringBuilder();
+ StringBuilder classPathBuilder = new StringBuilder();
//let's figure out the classpath for wsgen tools
try {
urls = getWsgenClasspath(context);
} catch (Exception e) {
throw new DeploymentException("Failed to generate the wsdl file using wsgen: unable to get the location of the required artifact(s).", e);
}
+
//let's figure out the classpath string for the module and wsgen tools.
if (urls != null && urls.length > 0) {
for (URL url : urls) {
- classPath.append(WsdlGeneratorUtils.toFile(url).getAbsolutePath()).append(File.pathSeparator);
+ classPathBuilder.append(WsdlGeneratorUtils.toFile(url).getAbsolutePath()).append(File.pathSeparator);
}
}
+ String wsgenToolClassPath = classPathBuilder.toString();
+
try {
- WsdlGeneratorUtils.getModuleClasspath(module, context, classPath);
+ WsdlGeneratorUtils.getModuleClasspath(module, context, classPathBuilder);
} catch (Exception e) {
throw new DeploymentException("WSDL generation failed: unable to determine module classpath", e);
}
- //create arguments;
- String[] arguments = buildArguments(serviceClass, classPath.toString(), baseDir, portInfo);
-
try {
- boolean result = false;
+ //create arguments;
+ String[] arguments = buildArguments(serviceClass, classPathBuilder.toString(), baseDir, portInfo);
+ boolean result = false;
if (this.options.getFork()) {
- result = forkWsgen(classPath, arguments);
+ String endorsedPath = getEndorsedPath(context);
+ result = forkWsgen(wsgenToolClassPath, endorsedPath, arguments);
} else {
result = invokeWsgen(urls, arguments);
}
@@ -190,10 +198,11 @@ public class WsdlGenerator {
return new String(arr, 0, arr.length);
}
- private boolean forkWsgen(StringBuilder classPath, String[] arguments) throws Exception {
- List<String> cmd = new ArrayList<String>();
+ private boolean forkWsgen(String classPath, String endorsedPath, String[] arguments) throws Exception {
+ List<String> cmd = new ArrayList<String>(4 + arguments.length);
+ cmd.add("-Djava.endorsed.dirs=\"" + endorsedPath + "\"");
cmd.add("-classpath");
- cmd.add(classPath.toString());
+ cmd.add(classPath);
cmd.add("com.sun.tools.ws.WsGen");
cmd.addAll(Arrays.asList(arguments));