You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2009/01/21 20:59:33 UTC
svn commit: r736396 - in /geronimo/server/trunk/plugins:
axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/
axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/client/
cxf/geronimo-cxf-builder/src/main/java/org/apach...
Author: gawor
Date: Wed Jan 21 11:59:33 2009
New Revision: 736396
URL: http://svn.apache.org/viewvc?rev=736396&view=rev
Log:
Support OASIS catalogs with service-ref with Axis2 (GERONIMO-4501)
Added:
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java (with props)
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java (with props)
Modified:
geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2ServiceRefBuilder.java
geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/client/Axis2ServiceReference.java
geronimo/server/trunk/plugins/cxf/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFServiceRefBuilder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/JAXWSUtils.java
geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/JAXWSServiceReference.java
geronimo/server/trunk/plugins/jaxws/jaxws-deployer/pom.xml
Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2ServiceRefBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2ServiceRefBuilder.java?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2ServiceRefBuilder.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2-builder/src/main/java/org/apache/geronimo/axis2/builder/Axis2ServiceRefBuilder.java Wed Jan 21 11:59:33 2009
@@ -61,7 +61,7 @@
Map<Class, PortComponentRefType> portComponentRefMap) throws DeploymentException {
registerConfigGBean(module);
EndpointInfoBuilder builder = new EndpointInfoBuilder(serviceInterfaceClass,
- gerServiceRef, portComponentRefMap, module.getModuleFile(),
+ gerServiceRef, portComponentRefMap, module, cl,
wsdlURI, serviceQName);
builder.build();
Modified: geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/client/Axis2ServiceReference.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/client/Axis2ServiceReference.java?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/client/Axis2ServiceReference.java (original)
+++ geronimo/server/trunk/plugins/axis2/geronimo-axis2/src/main/java/org/apache/geronimo/axis2/client/Axis2ServiceReference.java Wed Jan 21 11:59:33 2009
@@ -18,12 +18,17 @@
package org.apache.geronimo.axis2.client;
import java.net.URI;
+import java.net.URL;
import java.util.Map;
+import javax.naming.NamingException;
import javax.xml.namespace.QName;
import javax.xml.ws.handler.HandlerResolver;
+import org.apache.axis2.jaxws.catalog.impl.OASISCatalogManager;
import org.apache.axis2.jaxws.context.WebServiceContextImpl;
+import org.apache.axis2.jaxws.description.builder.DescriptionBuilderComposite;
+import org.apache.axis2.jaxws.spi.ServiceDelegate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.apache.geronimo.gbean.AbstractName;
@@ -52,6 +57,26 @@
Map<Object, EndpointInfo> seiInfoMap) {
super(handlerChainsXML, seiInfoMap, name, serviceQName, wsdlURI, referenceClassName, serviceClassName);
}
+
+ @Override
+ public Object getContent() throws NamingException {
+ DescriptionBuilderComposite composite = null;
+
+ URL catalogURL = getCatalog();
+ if (catalogURL != null) {
+ composite = new DescriptionBuilderComposite();
+ OASISCatalogManager catalogManager = new OASISCatalogManager();
+ catalogManager.setCatalogFiles(catalogURL.toString());
+ composite.setCatalogManager(catalogManager);
+ }
+
+ ServiceDelegate.setServiceMetadata(composite);
+ try {
+ return super.getContent();
+ } finally {
+ ServiceDelegate.setServiceMetadata(null);
+ }
+ }
protected HandlerChainsType getHandlerChains() {
HandlerChainsType types = null;
Modified: geronimo/server/trunk/plugins/cxf/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFServiceRefBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/cxf/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFServiceRefBuilder.java?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/cxf/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFServiceRefBuilder.java (original)
+++ geronimo/server/trunk/plugins/cxf/geronimo-cxf-builder/src/main/java/org/apache/geronimo/cxf/builder/CXFServiceRefBuilder.java Wed Jan 21 11:59:33 2009
@@ -54,7 +54,7 @@
QName serviceQName, URI wsdlURI, Class serviceReference,
Map<Class, PortComponentRefType> portComponentRefMap) throws DeploymentException {
EndpointInfoBuilder builder = new EndpointInfoBuilder(serviceInterface,
- gerServiceRef, portComponentRefMap, module.getModuleFile(),
+ gerServiceRef, portComponentRefMap, module, cl,
wsdlURI, serviceQName);
builder.build();
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws-builder/src/main/java/org/apache/geronimo/jaxws/builder/EndpointInfoBuilder.java Wed Jan 21 11:59:33 2009
@@ -16,19 +16,16 @@
*/
package org.apache.geronimo.jaxws.builder;
+import java.io.File;
import java.io.IOException;
-import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.jar.JarFile;
-import java.util.zip.ZipEntry;
import javax.wsdl.Binding;
import javax.wsdl.Definition;
@@ -44,21 +41,28 @@
import javax.xml.namespace.QName;
import javax.xml.ws.WebServiceClient;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
import org.apache.geronimo.common.DeploymentException;
+import org.apache.geronimo.j2ee.deployment.Module;
import org.apache.geronimo.jaxws.JAXWSUtils;
import org.apache.geronimo.jaxws.client.EndpointInfo;
+import org.apache.geronimo.jaxws.wsdl.CatalogJarWSDLLocator;
+import org.apache.geronimo.jaxws.wsdl.CatalogWSDLLocator;
import org.apache.geronimo.xbeans.geronimo.naming.GerPortType;
import org.apache.geronimo.xbeans.geronimo.naming.GerServiceRefType;
import org.apache.geronimo.xbeans.javaee.PortComponentRefType;
-import org.xml.sax.InputSource;
+import org.apache.xml.resolver.Catalog;
+import org.apache.xml.resolver.CatalogManager;
+import org.apache.xml.resolver.tools.CatalogResolver;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
public class EndpointInfoBuilder {
private static final Logger LOG = LoggerFactory.getLogger(EndpointInfoBuilder.class);
- private JarFile moduleFile;
+ private Module module;
+
+ private ClassLoader classLoader;
private URI wsdlURI;
@@ -75,13 +79,15 @@
public EndpointInfoBuilder(Class serviceClass,
GerServiceRefType serviceRefType,
Map<Class, PortComponentRefType> portComponentRefMap,
- JarFile moduleFile,
+ Module module,
+ ClassLoader classLoader,
URI wsdlURI,
QName serviceQName) {
this.serviceClass = serviceClass;
this.serviceRefType = serviceRefType;
this.portComponentRefMap = portComponentRefMap;
- this.moduleFile = moduleFile;
+ this.module = module;
+ this.classLoader = classLoader;
this.wsdlURI = wsdlURI;
this.serviceQName = serviceQName;
}
@@ -136,15 +142,15 @@
}
}
- JarWSDLLocator wsdlLocator = null;
- URL wsdlURL = null;
- try {
- wsdlURL = new URL(this.wsdlURI.toString());
- } catch (MalformedURLException e1) {
- // not a URL, assume it's a local reference
- wsdlLocator = new JarWSDLLocator(this.wsdlURI);
+ Catalog catalog = loadCatalog();
+
+ WSDLLocator wsdlLocator = null;
+ if (isURL(this.wsdlURI.toString())) {
+ wsdlLocator = new CatalogWSDLLocator(this.wsdlURI.toString(), catalog);
+ } else {
+ wsdlLocator = new CatalogJarWSDLLocator(this.module.getModuleFile(), this.wsdlURI, catalog);
}
-
+
Definition definition;
WSDLFactory wsdlFactory;
try {
@@ -156,13 +162,7 @@
wsdlReader.setFeature("javax.wsdl.importDocuments", true);
wsdlReader.setFeature("javax.wsdl.verbose", false);
try {
- if (wsdlURL != null) {
- definition = wsdlReader.readWSDL(wsdlURL.toString());
- } else if (wsdlLocator != null) {
- definition = wsdlReader.readWSDL(wsdlLocator);
- } else {
- throw new DeploymentException("unknown");
- }
+ definition = wsdlReader.readWSDL(wsdlLocator);
} catch (WSDLException e) {
throw new DeploymentException("Failed to read wsdl document", e);
} catch (RuntimeException e) {
@@ -386,85 +386,53 @@
return null;
}
- private class JarWSDLLocator implements WSDLLocator {
-
- private final List<InputStream> streams = new ArrayList<InputStream>();
-
- private final URI wsdlURI;
-
- private URI latestImportURI;
-
- public JarWSDLLocator(URI wsdlURI) {
- this.wsdlURI = wsdlURI;
- }
-
- public InputSource getBaseInputSource() {
- InputStream wsdlInputStream = getModuleFile(wsdlURI);
- streams.add(wsdlInputStream);
- return new InputSource(wsdlInputStream);
- }
-
- public String getBaseURI() {
- return wsdlURI.toString();
+ private boolean isURL(String name) {
+ try {
+ new URL(name);
+ return true;
+ } catch (MalformedURLException e1) {
+ return false;
}
-
- public InputSource getImportInputSource(String parentLocation,
- String relativeLocation) {
- URI parentURI = URI.create(parentLocation);
- URI relativeURI = URI.create(relativeLocation);
- InputStream importInputStream;
- if (relativeURI.isAbsolute()) {
- latestImportURI = relativeURI;
- importInputStream = getExternalFile(latestImportURI);
- } else if (parentURI.isAbsolute()) {
- latestImportURI = parentURI.resolve(relativeLocation);
- importInputStream = getExternalFile(latestImportURI);
- } else {
- latestImportURI = parentURI.resolve(relativeLocation);
- importInputStream = getModuleFile(latestImportURI);
+ }
+
+ private Catalog loadCatalog() {
+ URL catalogURI = null;
+ try {
+ catalogURI = getCatalog(JAXWSUtils.DEFAULT_CATALOG_WEB);
+ if (catalogURI == null) {
+ catalogURI = getCatalog(JAXWSUtils.DEFAULT_CATALOG_EJB);
}
- streams.add(importInputStream);
- InputSource inputSource = new InputSource(importInputStream);
- inputSource.setSystemId(getLatestImportURI());
- return inputSource;
- }
-
- public String getLatestImportURI() {
- return latestImportURI.toString();
+ } catch (IOException e) {
+ LOG.warn("Failed to open OASIS catalog", e);
}
-
- private InputStream getExternalFile(URI file) {
+
+ CatalogManager catalogManager = new CatalogManager();
+ catalogManager.setUseStaticCatalog(false);
+ catalogManager.setIgnoreMissingProperties(true);
+ CatalogResolver catalogResolver = new CatalogResolver(catalogManager);
+ Catalog catalog = catalogResolver.getCatalog();
+
+ if (catalogURI != null) {
+ LOG.debug("Found OASIS catalog {} ", catalogURI);
try {
- return file.toURL().openStream();
+ catalog.parseCatalog(catalogURI);
} catch (Exception e) {
- throw new RuntimeException(
- "Failed to import external file: " + latestImportURI, e);
+ LOG.warn("Failed to read OASIS catalog", e);
}
}
- private InputStream getModuleFile(URI file) {
- ZipEntry entry = moduleFile.getEntry(file.toString());
- if (entry == null) {
- throw new RuntimeException(
- "File does not exist in the module: " + file);
- }
- try {
- return moduleFile.getInputStream(entry);
- } catch (Exception e) {
- throw new RuntimeException(
- "Could not open stream to import file", e);
- }
- }
+ return catalog;
+ }
- public void close() {
- for (InputStream inputStream : this.streams) {
- try {
- inputStream.close();
- } catch (IOException e) {
- // ignore
- }
+ private URL getCatalog(String name) throws IOException {
+ URL catalogURL = this.classLoader.getResource(name);
+ if (catalogURL == null) {
+ File f = this.module.getEarContext().getTargetFile(URI.create(name));
+ if (f.exists()) {
+ catalogURL = f.toURL();
}
- streams.clear();
}
+ return catalogURL;
}
+
}
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/JAXWSUtils.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/JAXWSUtils.java?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/JAXWSUtils.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/JAXWSUtils.java Wed Jan 21 11:59:33 2009
@@ -307,12 +307,12 @@
if (catalogName == null) {
return null;
}
+ LOG.debug("Checking for {} catalog in classloader", catalogName);
URL catalogURL = classLoader.getResource(catalogName);
- LOG.debug("Checking for {} catalog in classloader", catalogURL);
- if (catalogURL == null) {
+ if (catalogURL == null && configurationBaseUrl != null) {
try {
+ LOG.debug("Checking for {} catalog in module directory", catalogName);
URL tmpCatalogURL = new URL(configurationBaseUrl, catalogName);
- LOG.debug("Checking for {} catalog in module directory", catalogURL);
tmpCatalogURL.openStream().close();
catalogURL = tmpCatalogURL;
} catch (MalformedURLException e) {
Modified: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/JAXWSServiceReference.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/JAXWSServiceReference.java?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/JAXWSServiceReference.java (original)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/client/JAXWSServiceReference.java Wed Jan 21 11:59:33 2009
@@ -20,6 +20,7 @@
import org.apache.geronimo.naming.reference.SimpleReference;
import org.apache.geronimo.naming.reference.ClassLoaderAwareReference;
import org.apache.geronimo.naming.reference.KernelAwareReference;
+import org.apache.geronimo.jaxws.JAXWSUtils;
import org.apache.geronimo.kernel.Kernel;
import org.apache.geronimo.gbean.AbstractName;
import org.slf4j.Logger;
@@ -62,6 +63,8 @@
protected Class enhancedServiceClass;
protected Callback[] methodInterceptors;
protected FastConstructor serviceConstructor;
+
+ protected transient URL moduleBaseUrl;
public JAXWSServiceReference(String handlerChainsXML, Map<Object, EndpointInfo> seiInfoMap, AbstractName name, QName serviceQName, URI wsdlURI, String referenceClassName, String serviceClassName) {
this.handlerChainsXML = handlerChainsXML;
@@ -79,8 +82,17 @@
public void setKernel(Kernel kernel) {
this.kernel = kernel;
+ init();
}
+ private void init() {
+ try {
+ this.moduleBaseUrl = (URL) this.kernel.getAttribute(this.moduleName, "configurationBaseUrl");
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+
private Class loadClass(String name) throws NamingException {
try {
return this.classLoader.loadClass(name);
@@ -96,24 +108,41 @@
if (this.wsdlURI == null) {
return null;
}
+
+ URL wsdlURL = null;
try {
- return new URL(this.wsdlURI.toString());
+ wsdlURL = new URL(this.wsdlURI.toString());
} catch (MalformedURLException e1) {
// not a URL, assume it's a local reference
- try {
- URL moduleBaseUrl = (URL) this.kernel.getAttribute(
- this.moduleName, "configurationBaseUrl");
- return new URL(moduleBaseUrl.toString() + this.wsdlURI.toString());
- } catch (Exception e) {
- URL wsdlURL = this.classLoader.getResource(this.wsdlURI.toString());
+
+ if (this.moduleBaseUrl != null) {
+ try {
+ wsdlURL = new URL(this.moduleBaseUrl.toString() + this.wsdlURI.toString());
+ } catch (Exception e) {
+ // ignore
+ }
+ }
+
+ if (wsdlURL == null) {
+ wsdlURL = this.classLoader.getResource(this.wsdlURI.toString());
if (wsdlURL == null) {
- LOG.warn("Error obtaining WSDL: " + this.wsdlURI, e);
+ LOG.warn("Failed to obtain WSDL: " + this.wsdlURI);
}
return wsdlURL;
}
}
+
+ return wsdlURL;
}
+ protected URL getCatalog() {
+ URL catalogURL = JAXWSUtils.getOASISCatalogURL(this.moduleBaseUrl, this.classLoader, JAXWSUtils.DEFAULT_CATALOG_WEB);
+ if (catalogURL == null) {
+ catalogURL = JAXWSUtils.getOASISCatalogURL(this.moduleBaseUrl, this.classLoader, JAXWSUtils.DEFAULT_CATALOG_EJB);
+ }
+ return catalogURL;
+ }
+
private Class getReferenceClass() throws NamingException {
return (this.referenceClassName != null) ? loadClass(this.referenceClassName) : null;
}
Added: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java?rev=736396&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java (added)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java Wed Jan 21 11:59:33 2009
@@ -0,0 +1,69 @@
+/**
+ * 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.wsdl;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.jar.JarFile;
+
+import org.apache.xml.resolver.Catalog;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
+
+public class CatalogJarWSDLLocator extends JarWSDLLocator {
+
+ private static final Logger LOG = LoggerFactory.getLogger(CatalogJarWSDLLocator.class);
+
+ private Catalog catalog;
+
+ public CatalogJarWSDLLocator(JarFile moduleFile, URI wsdlURI, Catalog catalog) {
+ super(moduleFile, wsdlURI);
+ this.catalog = catalog;
+ }
+
+ @Override
+ protected InputSource resolve(String parentLocation, String importLocation) {
+ String resolvedImportLocation = null;
+
+ if (this.catalog != null) {
+ try {
+ resolvedImportLocation = this.catalog.resolveSystem(importLocation);
+ if (resolvedImportLocation == null) {
+ resolvedImportLocation = catalog.resolveURI(importLocation);
+ }
+ if (resolvedImportLocation == null) {
+ resolvedImportLocation = catalog.resolvePublic(importLocation, parentLocation);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Catalog resolution failed", e);
+ }
+ }
+
+ if (resolvedImportLocation == null) {
+ // not found in the catalog
+ return super.resolve(parentLocation, importLocation);
+ } else {
+ // found in the catalog
+ return super.resolve("", resolvedImportLocation);
+ }
+ }
+
+}
Propchange: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/CatalogJarWSDLLocator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java?rev=736396&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java (added)
+++ geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java Wed Jan 21 11:59:33 2009
@@ -0,0 +1,136 @@
+/**
+ * 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.wsdl;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.jar.JarFile;
+import java.util.zip.ZipEntry;
+
+import javax.wsdl.xml.WSDLLocator;
+
+import org.xml.sax.InputSource;
+
+public class JarWSDLLocator implements WSDLLocator {
+
+ private final List<InputStream> streams = new ArrayList<InputStream>();
+
+ private final JarFile moduleFile;
+ private final URI wsdlURI;
+
+ private URI latestImportURI;
+
+ public JarWSDLLocator(JarFile moduleFile, URI wsdlURI) {
+ this.moduleFile = moduleFile;
+ this.wsdlURI = wsdlURI;
+ }
+
+ public InputSource getBaseInputSource() {
+ return resolve("", wsdlURI.toString());
+ }
+
+ public String getBaseURI() {
+ return wsdlURI.toString();
+ }
+
+ public InputSource getImportInputSource(String parentLocation,
+ String relativeLocation) {
+ return resolve(parentLocation, relativeLocation);
+ }
+
+ protected InputSource resolve(String parentLocation,
+ String relativeLocation) {
+ URI parentURI = URI.create(parentLocation);
+ URI relativeURI = URI.create(relativeLocation);
+ InputStream importInputStream;
+ if (relativeURI.isAbsolute()) {
+ latestImportURI = relativeURI;
+ importInputStream = getExternalFile(latestImportURI);
+ } else if (parentURI.isAbsolute()) {
+ latestImportURI = resolveRelative(parentURI, relativeURI);
+ importInputStream = getExternalFile(latestImportURI);
+ } else {
+ latestImportURI = parentURI.resolve(relativeLocation);
+ importInputStream = getModuleFile(latestImportURI);
+ }
+ streams.add(importInputStream);
+ InputSource inputSource = new InputSource(importInputStream);
+ inputSource.setSystemId(getLatestImportURI());
+ return inputSource;
+ }
+
+ public String getLatestImportURI() {
+ return latestImportURI.toString();
+ }
+
+ private URI resolveRelative(URI parentURI, URI relativeURI) {
+ if ("jar".equals(parentURI.getScheme())) {
+ String str = parentURI.toString();
+ int i = str.indexOf('!');
+ if (i != -1) {
+ String jarBase = str.substring(0, i + 1);
+ String jarEntry = str.substring(i + 1);
+
+ URI jarEntryURI = URI.create(jarEntry);
+ URI resolvedRelatvieURI = jarEntryURI.resolve(relativeURI);
+
+ return URI.create(jarBase + resolvedRelatvieURI.toString());
+ }
+ }
+ return parentURI.resolve(relativeURI);
+ }
+
+ private InputStream getExternalFile(URI file) {
+ try {
+ return file.toURL().openStream();
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "Failed to import external file: " + latestImportURI, e);
+ }
+ }
+
+ private InputStream getModuleFile(URI file) {
+ ZipEntry entry = moduleFile.getEntry(file.toString());
+ if (entry == null) {
+ throw new RuntimeException(
+ "File does not exist in the module: " + file);
+ }
+ try {
+ return moduleFile.getInputStream(entry);
+ } catch (Exception e) {
+ throw new RuntimeException(
+ "Could not open stream to import file", e);
+ }
+ }
+
+ public void close() {
+ for (InputStream inputStream : this.streams) {
+ try {
+ inputStream.close();
+ } catch (IOException e) {
+ // ignore
+ }
+ }
+ streams.clear();
+ }
+}
Propchange: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/jaxws/geronimo-jaxws/src/main/java/org/apache/geronimo/jaxws/wsdl/JarWSDLLocator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/server/trunk/plugins/jaxws/jaxws-deployer/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jaxws/jaxws-deployer/pom.xml?rev=736396&r1=736395&r2=736396&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jaxws/jaxws-deployer/pom.xml (original)
+++ geronimo/server/trunk/plugins/jaxws/jaxws-deployer/pom.xml Wed Jan 21 11:59:33 2009
@@ -70,14 +70,14 @@
<dependencies>
<dependency>
<groupId>org.apache.geronimo.configs</groupId>
- <artifactId>j2ee-deployer</artifactId>
+ <artifactId>webservices-common</artifactId>
<type>car</type>
+ <import>classes</import>
</dependency>
<dependency>
<groupId>org.apache.geronimo.configs</groupId>
- <artifactId>webservices-common</artifactId>
+ <artifactId>j2ee-deployer</artifactId>
<type>car</type>
- <import>classes</import>
</dependency>
<dependency>
<groupId>org.apache.geronimo.modules</groupId>