| /* |
| * 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.ode.axis2.util; |
| |
| import java.io.File; |
| import java.io.FileInputStream; |
| import java.io.IOException; |
| import java.io.InputStream; |
| import java.net.URI; |
| import java.net.URISyntaxException; |
| |
| import javax.wsdl.xml.WSDLLocator; |
| |
| import org.apache.commons.logging.Log; |
| import org.apache.commons.logging.LogFactory; |
| import org.xml.sax.InputSource; |
| |
| public class Axis2WSDLLocator implements WSDLLocator { |
| private static final Log LOG = LogFactory.getLog(Axis2WSDLLocator.class); |
| private URI _baseUri; |
| private String _latest; |
| |
| public Axis2WSDLLocator(URI baseUri) throws URISyntaxException { |
| _baseUri = baseUri; |
| } |
| |
| public InputSource getBaseInputSource() { |
| try { |
| InputSource is = new InputSource(); |
| is.setByteStream(openResource(_baseUri)); |
| is.setSystemId(_baseUri.toString()); |
| return is; |
| } catch (IOException e) { |
| LOG.error("Unable to create InputSource for " + _baseUri, e); |
| return null; |
| } |
| } |
| |
| public InputSource getImportInputSource(String parent, String imprt) { |
| URI uri; |
| try { |
| uri = parent == null ? _baseUri.resolve(imprt) : new URI(parent).resolve(imprt); |
| } catch (URISyntaxException e1) { |
| LOG.error("URI syntax error: parent="+parent+" error="+e1); |
| return null; |
| } |
| if (LOG.isDebugEnabled()) { |
| LOG.debug("Get import: import=" + imprt + " parent=" + parent); |
| } |
| |
| InputSource is = new InputSource(); |
| try { |
| is.setByteStream(openResource(uri)); |
| } catch (Exception e) { |
| LOG.error("Unable to open import resource: " + uri, e); |
| return null; |
| } |
| is.setSystemId(uri.toString()); |
| _latest = uri.toString(); |
| return is; |
| } |
| |
| public String getBaseURI() { |
| return _baseUri.toString(); |
| } |
| |
| public String getLatestImportURI() { |
| return _latest; |
| } |
| |
| public void close() { |
| } |
| |
| public InputStream openResource(URI uri) throws IOException { |
| if (uri.isAbsolute() && uri.getScheme().equals("file")) { |
| try { |
| return uri.toURL().openStream(); |
| } catch (Exception except) { |
| LOG.error("openResource: unable to open file URL " + uri + "; " + except.toString()); |
| return null; |
| } |
| } |
| |
| // Note that if we get an absolute URI, the relativize operation will simply |
| // return the absolute URI. |
| URI relative = _baseUri.relativize(uri); |
| if (relative.isAbsolute() && !relative.getScheme().equals("urn")) { |
| LOG.error("openResource: invalid scheme (should be urn:) " + uri); |
| return null; |
| } |
| |
| File f = new File(_baseUri.getPath(), relative.getPath()); |
| if (!f.exists()) { |
| LOG.error("openResource: file not found " + f); |
| return null; |
| } |
| return new FileInputStream(f); |
| } |
| } |