Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance. Project price only 1 $
You can buy this project and download/modify it how often you want.
/*
* Copyright (c) 2005-2010, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* Licensed 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.wso2.carbon.mediation.initializer;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.synapse.config.SynapseConfigUtils;
import org.apache.synapse.config.SynapseConfiguration;
import org.apache.synapse.mediators.Value;
import org.apache.synapse.util.jaxp.SchemaResourceLSInput;
import org.apache.synapse.util.resolver.ResourceMap;
import org.apache.synapse.util.resolver.UserDefinedXmlSchemaURIResolver;
import org.w3c.dom.ls.LSInput;
import org.xml.sax.InputSource;
/**
* Adapting the schemas' Relativepath to the registry actual path
**/
public class RegistryXmlSchemaURIResolver implements UserDefinedXmlSchemaURIResolver {
private String wsdlKey;
private ResourceMap resourceMap;
private SynapseConfiguration synCfg;
private List schemaRegKeys = new ArrayList();
private static final Log log = LogFactory.getLog(RegistryXmlSchemaURIResolver.class);
public void init(ResourceMap resourceMap, SynapseConfiguration synCfg, String wsdlKey) {
this.resourceMap = resourceMap;
this.synCfg = synCfg;
this.wsdlKey = wsdlKey;
}
public void init(ResourceMap resourceMap, SynapseConfiguration synCfg, List schemaRegKeys) {
this.resourceMap = resourceMap;
this.synCfg = synCfg;
this.schemaRegKeys = schemaRegKeys;
}
/**
* Resolve a schema import.
* This method will first attempt to resolve the location using the
* configured {@link ResourceMap} object. If this fails (because no
* {@link ResourceMap} is
* configured or because
* {@link ResourceMap#resolve(SynapseConfiguration, String)} returns null,
* it will resolve the location using
* {@link SynapseConfigUtils#resolveRelativeURI(String, String)}.
*/
public InputSource resolveEntity(String targetNamespace, String schemaLocation, String baseUri) {
InputSource result = null;
if (resourceMap != null) {
result = resourceMap.resolve(synCfg, schemaLocation);
}
if (result == null && wsdlKey != null) {
if (log.isDebugEnabled()) {
log.info("Starting to resolve schema " + schemaLocation +
" using the dependencies got from wsdlKey " + wsdlKey);
}
RegistryDependency regWSDLDep = new RegistryDependency(wsdlKey);
Map dependencyMap = regWSDLDep.getDependencies();
if (dependencyMap != null) {
Set keys = dependencyMap.keySet();
for (Iterator i = keys.iterator(); i.hasNext();) {
String key = (String) i.next();
String value = dependencyMap.get(key);
String constructedPath =
regWSDLDep.constructRegistryPathToRelativePath(schemaLocation);
if (value.endsWith(constructedPath)) {
if (resourceMap == null) {
resourceMap = new ResourceMap();
}
resourceMap.addResource(schemaLocation, value);
break;
}
}
result = resourceMap.resolve(synCfg, schemaLocation);
}
} else if (result == null) {
result =
new InputSource(SynapseConfigUtils.resolveRelativeURI(baseUri, schemaLocation));
}
return result;
}
/**
* Used in validate mediator to validate the schemas
*
* @param type
* The type of the resource being resolved. For XML [XML 1.0]
* resources (i.e. entities), applications must use the value
* "http://www.w3.org/TR/REC-xml". For XML Schema [XML Schema
* Part 1] , applications must use the value
* "http://www.w3.org/2001/XMLSchema". Other types of resources
* are outside the scope of this specification and therefore
* should recommend an absolute URI in order to use this method.
* @param namespaceURI
* The namespace of the resource being resolved, e.g. the
* target namespace of the XML Schema [XML Schema Part 1] when
* resolving XML Schema resources.
* @param publicId
* The public identifier of the external entity being
* referenced, or null if no public identifier was supplied or if
* the resource is not an entity.
* @param systemId
* The system identifier, a URI reference [IETF RFC 2396], of
* the external resource being referenced, or null if no system
* identifier was supplied.
* @param baseURI
* The absolute base URI of the resource being parsed, or null
* if there is no base URI.
*
* @return A LSInput,
* object describing the new input source, or null to
* request that the parser open a regular URI connection to the
* resource.
*
*/
public LSInput resolveResource(String type, String namespaceURI, String publicId,
String systemId, String baseURI) {
InputSource inputSource = null;
if (log.isDebugEnabled()) {
log.debug("Resolving Schema resource " + systemId);
}
// check with the registry schema resolver
if (resourceMap == null) {
for (int i = 0; i < schemaRegKeys.size(); i++) {
RegistryDependency regWSDLDep =
new RegistryDependency(schemaRegKeys.get(i)
.getKeyValue());
Map dependencyMap = regWSDLDep.getDependencies();
if (dependencyMap.size()>0) {
Set keys = dependencyMap.keySet();
for (Iterator itr = keys.iterator(); itr.hasNext();) {
String key = (String) itr.next();
String value = dependencyMap.get(key);
String constructedPath =
regWSDLDep.constructRegistryPathToRelativePath(systemId);
if (value.endsWith(constructedPath)) {
if (resourceMap == null) {
resourceMap = new ResourceMap();
}
resourceMap.addResource(systemId, value);
break;
}
}
inputSource = resourceMap.resolve(synCfg, systemId);
} else {
// It comes here since there is no any other 'include'
// schemas.
// We need to resolve this schema(base schema without any
// includes) also.
resourceMap.addResource(systemId, schemaRegKeys.get(i).getKeyValue());
}
}
} else {
inputSource = resourceMap.resolve(synCfg, systemId);
}
if (inputSource == null) {
log.warn("Unable to resolve schema resource " + systemId);
return null;
}
SchemaResourceLSInput schemaResourceLSInput = new SchemaResourceLSInput();
schemaResourceLSInput.setByteStream(inputSource.getByteStream());
return schemaResourceLSInput;
}
}