You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2008/03/04 15:31:52 UTC
svn commit: r633485 [5/7] - in /webservices/axis2/trunk/java/modules:
integration/test-resources/ integration/test-resources/ComplexDataTypes/
integration/test/org/apache/axis2/deployment/
integration/test/org/apache/axis2/engine/ integration/test/org/...
Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java?rev=633485&r1=633484&r2=633485&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/description/AxisService.java Tue Mar 4 06:31:32 2008
@@ -17,7 +17,6 @@
* under the License.
*/
-
package org.apache.axis2.description;
import java.io.File;
@@ -119,2632 +118,2764 @@
*/
public class AxisService extends AxisDescription {
- //////////////////////////////////////////////////////////////////
- // Standard Parameter names
+ // ////////////////////////////////////////////////////////////////
+ // Standard Parameter names
- /**
- * If this param is true, and the service has exactly one AxisOperation,
- * normal operation dispatch (via URI/soapAction/etc) will not be necessary,
- * and we'll just default to funneling all messages to that op. This is
- * useful for passthrough/ESB/embedded applications.
- */
- public static final String SUPPORT_SINGLE_OP = "supportSingleOperation";
- //////////////////////////////////////////////////////////////////
-
- public static final String IMPORT_TAG = "import";
- public static final String INCLUDE_TAG = "include";
- public static final String SCHEMA_LOCATION = "schemaLocation";
-
- private Map endpointMap = new HashMap();
-
- /*This is a map between the QName of the element of a message
- *specified in the WSDL and an Operation. It enables SOAP Body-based
- *dispatching for doc-literal bindings.
- */
- private Map messageElementQNameToOperationMap = new HashMap();
-
- private int nsCount = 0;
- private static final Log log = LogFactory.getLog(AxisService.class);
- private URL fileName;
-
- // Maps httpLocations to corresponding operations. Used to dispatch rest messages.
- private HashMap httpLocationDispatcherMap = null;
-
- // A map of (String alias, AxisOperation operation). The aliases might include: SOAPAction,
- // WS-Addressing action, the operation name, the AxisInputMessage name. See:
- // - invalidOperationsAliases
- // - mapActionToOperatoin()
- // - getOperationByAction()
- // REVIEW: This really should be seperate maps for the different types of aliases so they don't
- // conflict with each other. For example, so that an identical operation name and soap action
- // on different operatoins don't cause a collision; the following can't be routed because
- // "foo" is not unique across different operations:
- // operation 1: action = foo, name = bar
- // operation 2: action = bar, name = foo
- private HashMap operationsAliasesMap = null;
-
- // Collection of aliases that are invalid for this service because they are duplicated across
- // multiple operations under this service.
- private List invalidOperationsAliases = null;
-// private HashMap operations = new HashMap();
-
- // to store module ref at deploy time parsing
- private ArrayList moduleRefs = null;
-
- // to keep the time that last update time of the service
- private long lastupdate;
- private HashMap moduleConfigmap;
- private String name;
- private ClassLoader serviceClassLoader;
-
- //to keep the XMLSchema getting either from WSDL or java2wsdl
- private ArrayList schemaList;
- //private XmlSchema schema;
-
- //wsdl is there for this service or not (in side META-INF)
- private boolean wsdlFound = false;
-
- //to store the scope of the service
- private String scope;
-
- //to store default message receivers
- private HashMap messageReceivers;
-
- // to set the handler chain available in phase info
- private boolean useDefaultChains = true;
-
- //to keep the status of the service , since service can stop at the run time
- private boolean active = true;
-
- private boolean elementFormDefault = true;
-
- //to keep the service target name space
- private String targetNamespace =
- Java2WSDLConstants.DEFAULT_TARGET_NAMESPACE;
- private String targetNamespacePrefix =
- Java2WSDLConstants.TARGETNAMESPACE_PREFIX;
-
- // to store the target namespace for the schema
- private String schematargetNamespace;// = Java2WSDLConstants.AXIS2_XSD;
- private String schematargetNamespacePrefix =
- Java2WSDLConstants.SCHEMA_NAMESPACE_PRFIX;
-
- private boolean enableAllTransports = true;
- private List exposedTransports = new ArrayList();
-
- //To keep reference to ServiceLifeCycle instance , if the user has
- // specified in services.xml
- private ServiceLifeCycle serviceLifeCycle;
-
-
- /**
- * Keeps track whether the schema locations are adjusted
- */
- private boolean schemaLocationsAdjusted = false;
-
- private boolean wsdlImportLocationAdjusted = false;
-
- /**
- * A table that keeps a mapping of unique xsd names (Strings)
- * against the schema objects. This is populated in the first
- * instance the schemas are asked for and then used to serve
- * the subsequent requests
- */
- private Map schemaMappingTable = null;
-
-
- /**
- * counter variable for naming the schemas
- */
- private int count = 0;
- /**
- * A custom schema Name prefix. if set this will be used to
- * modify the schema names
- */
- private String customSchemaNamePrefix = null;
-
- /**
- * A custom schema name suffix. will be attached to the
- * schema file name when the files are uniquely named.
- * A good place to add a file extension if needed
- */
- private String customSchemaNameSuffix = null;
-
- /////////////////////////////////////////
- // WSDL related stuff ////////////////////
- ////////////////////////////////////////
-
- /** Map of prefix -> namespaceURI */
- private NamespaceMap namespaceMap;
-
- private String soapNsUri;
- private String endpointName;
- private String endpointURL;
-
- private boolean clientSide = false;
-
- //To keep a ref to ObjectSupplier instance
- private ObjectSupplier objectSupplier;
-
- // package to namespace mapping
- private Map p2nMap;
-
- // to keep the exclude property details
- private ExcludeInfo excludeInfo;
-
- private TypeTable typeTable;
-
- // Data Locators for WS-Mex Support
- private HashMap dataLocators;
- private HashMap dataLocatorClassNames;
- private AxisDataLocatorImpl defaultDataLocator;
- // Define search sequence for datalocator based on Data Locator types.
- LocatorType[] availableDataLocatorTypes = new LocatorType[] {
- LocatorType.SERVICE_DIALECT,
- LocatorType.SERVICE_LEVEL,
- LocatorType.GLOBAL_DIALECT,
- LocatorType.GLOBAL_LEVEL,
- LocatorType.DEFAULT_AXIS
- };
-
- // name of the binding used : use in codegeneration
- private String bindingName;
-
- // names list keep to preserve the parameter order
- private List operationsNameList;
-
- private String[] eprs;
- private boolean customWsdl = false;
-
- public AxisEndpoint getEndpoint(String key) {
- return (AxisEndpoint) endpointMap.get(key);
- }
-
- public void addEndpoint(String key, AxisEndpoint axisEndpoint) {
- this.endpointMap.put(key, axisEndpoint);
- }
-
- /**
- * @deprecated Use AddressingHelper.getAddressingRequirementParemeterValue
- */
- public String getWSAddressingFlag() {
- return AddressingHelper.getAddressingRequirementParemeterValue(this);
- }
-
- /**
- * @deprecated Use AddressingHelper.setAddressingRequirementParemeterValue
- */
- public void setWSAddressingFlag(String ar) {
- AddressingHelper.setAddressingRequirementParemeterValue(this, ar);
- }
-
- public boolean isSchemaLocationsAdjusted() {
- return schemaLocationsAdjusted;
- }
-
- public void setSchemaLocationsAdjusted(boolean schemaLocationsAdjusted) {
- this.schemaLocationsAdjusted = schemaLocationsAdjusted;
- }
-
- public Map getSchemaMappingTable() {
- return schemaMappingTable;
- }
-
- public void setSchemaMappingTable(Map schemaMappingTable) {
- this.schemaMappingTable = schemaMappingTable;
- }
-
- public String getCustomSchemaNamePrefix() {
- return customSchemaNamePrefix;
- }
-
- public void setCustomSchemaNamePrefix(String customSchemaNamePrefix) {
- this.customSchemaNamePrefix = customSchemaNamePrefix;
- }
-
- public String getCustomSchemaNameSuffix() {
- return customSchemaNameSuffix;
- }
-
- public void setCustomSchemaNameSuffix(String customSchemaNameSuffix) {
- this.customSchemaNameSuffix = customSchemaNameSuffix;
- }
-
- /**
- * Constructor AxisService.
- */
- public AxisService() {
- super();
- this.operationsAliasesMap = new HashMap();
- this.invalidOperationsAliases = new ArrayList();
- moduleConfigmap = new HashMap();
- //by default service scope is for the request
- scope = Constants.SCOPE_REQUEST;
- httpLocationDispatcherMap = new HashMap();
- messageReceivers = new HashMap();
- moduleRefs = new ArrayList();
- schemaList = new ArrayList();
- serviceClassLoader = (ClassLoader) org.apache.axis2.java.security.AccessController
- .doPrivileged(new PrivilegedAction() {
- public Object run() {
- return Thread.currentThread().getContextClassLoader();
- }
- });
- objectSupplier = new DefaultObjectSupplier();
- dataLocators = new HashMap();
- dataLocatorClassNames = new HashMap();
-
- }
-
- /**
- * @return name of the port type
- * @deprecated use AxisService#getEndpointName() instead.
- */
- public String getPortTypeName() {
- return endpointName;
- }
-
- /**
- * @param portTypeName
- * @deprecated use AxisService#setEndpointName() instead
- */
- public void setPortTypeName(String portTypeName) {
- this.endpointName = portTypeName;
- }
-
- public String getBindingName() {
- return bindingName;
- }
-
- public void setBindingName(String bindingName) {
- this.bindingName = bindingName;
- }
-
- /**
- * get the SOAPVersion
- */
- public String getSoapNsUri() {
- return soapNsUri;
- }
-
- public void setSoapNsUri(String soapNsUri) {
- this.soapNsUri = soapNsUri;
- }
-
- /**
- * get the endpointName
- */
- public String getEndpointName() {
- return endpointName;
- }
-
- public void setEndpointName(String endpoint) {
- this.endpointName = endpoint;
- }
-
- /**
- * Constructor AxisService.
- */
- public AxisService(String name) {
- this();
- this.name = name;
- }
-
- public void addMessageReceiver(String mepURI, MessageReceiver messageReceiver) {
- if (WSDL2Constants.MEP_URI_IN_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_ONLY.equals(mepURI)) {
- messageReceivers
- .put(WSDL2Constants.MEP_URI_IN_ONLY, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_ONLY, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_ONLY, messageReceiver);
- } else if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_OUT_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_OUT_ONLY.equals(mepURI)) {
- messageReceivers
- .put(WSDL2Constants.MEP_URI_OUT_ONLY, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2006Constants.MEP_URI_OUT_ONLY, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_OUT_ONLY, messageReceiver);
- } else if (WSDL2Constants.MEP_URI_IN_OUT.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_OUT.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_OUT.equals(mepURI)) {
- messageReceivers
- .put(WSDL2Constants.MEP_URI_IN_OUT, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_OUT, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_OUT, messageReceiver);
- } else if (WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_OPTIONAL_OUT.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_OPTIONAL_OUT.equals(mepURI)) {
- messageReceivers.put(WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2006Constants.MEP_URI_IN_OPTIONAL_OUT,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_IN_OPTIONAL_OUT,
- messageReceiver);
- } else if (WSDL2Constants.MEP_URI_OUT_IN.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_OUT_IN.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_OUT_IN.equals(mepURI)) {
- messageReceivers
- .put(WSDL2Constants.MEP_URI_OUT_IN, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2006Constants.MEP_URI_OUT_IN, messageReceiver);
- messageReceivers
- .put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_OUT_IN, messageReceiver);
- } else if (WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_OUT_OPTIONAL_IN.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_OUT_OPTIONAL_IN.equals(mepURI)) {
- messageReceivers.put(WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2006Constants.MEP_URI_OUT_OPTIONAL_IN,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_OUT_OPTIONAL_IN,
- messageReceiver);
- } else if (WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_ROBUST_OUT_ONLY.equals(mepURI)) {
- messageReceivers.put(WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2006Constants.MEP_URI_ROBUST_OUT_ONLY,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_ROBUST_OUT_ONLY,
- messageReceiver);
- } else if (WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI) ||
- WSDLConstants.WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY.equals(mepURI)) {
- messageReceivers.put(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2006Constants.MEP_URI_ROBUST_IN_ONLY,
- messageReceiver);
- messageReceivers.put(WSDLConstants.WSDL20_2004_Constants.MEP_URI_ROBUST_IN_ONLY,
- messageReceiver);
- } else {
- messageReceivers.put(mepURI, messageReceiver);
- }
- }
-
- public MessageReceiver getMessageReceiver(String mepURL) {
- return (MessageReceiver) messageReceivers.get(mepURL);
- }
-
- /**
- * Adds module configuration , if there is moduleConfig tag in service.
- *
- * @param moduleConfiguration
- */
- public void addModuleConfig(ModuleConfiguration moduleConfiguration) {
- moduleConfigmap.put(moduleConfiguration.getModuleName(), moduleConfiguration);
- }
-
- /**
- * Add any control operations defined by a Module to this service.
- *
- * @param module the AxisModule which has just been engaged
- * @throws AxisFault if a problem occurs
- */
- void addModuleOperations(AxisModule module) throws AxisFault {
- HashMap map = module.getOperations();
- Collection col = map.values();
- PhaseResolver phaseResolver = new PhaseResolver(getAxisConfiguration());
- for (Iterator iterator = col.iterator(); iterator.hasNext();) {
- AxisOperation axisOperation = copyOperation((AxisOperation) iterator.next());
- if (this.getOperation(axisOperation.getName()) == null) {
- ArrayList wsamappings = axisOperation.getWSAMappingList();
- if (wsamappings != null) {
- for (int j = 0, size = wsamappings.size(); j < size; j++) {
- String mapping = (String) wsamappings.get(j);
- mapActionToOperation(mapping, axisOperation);
- }
- }
- // If we've set the "expose" parameter for this operation, it's normal (non-
- // control) and therefore it will appear in generated WSDL. If we haven't,
- // it's a control operation and will be ignored at WSDL-gen time.
- if (axisOperation.isParameterTrue(DeploymentConstants.TAG_EXPOSE)) {
- axisOperation.setControlOperation(false);
- } else {
- axisOperation.setControlOperation(true);
- }
-
- phaseResolver.engageModuleToOperation(axisOperation, module);
-
- this.addOperation(axisOperation);
- }
- }
- }
-
- public void addModuleref(String moduleref) {
- moduleRefs.add(moduleref);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.axis2.description.AxisService#addOperation(org.apache.axis2.description.AxisOperation)
- */
-
- /**
- * Method addOperation.
- *
- * @param axisOperation
- */
- public void addOperation(AxisOperation axisOperation) {
- axisOperation.setParent(this);
-
- Iterator modules = getEngagedModules().iterator();
-
- while (modules.hasNext()) {
- AxisModule module = (AxisModule) modules.next();
- try {
- axisOperation.engageModule(module);
- } catch (AxisFault axisFault) {
- log.info(Messages.getMessage("modulealredyengagetoservice", module.getName()));
- }
- }
- if (axisOperation.getMessageReceiver() == null) {
- axisOperation.setMessageReceiver(
- loadDefaultMessageReceiver(axisOperation.getMessageExchangePattern(), this));
- }
- if (axisOperation.getInputAction() == null) {
- axisOperation.setSoapAction("urn:" + axisOperation.getName().getLocalPart());
- }
-
- if (axisOperation.getOutputAction() == null) {
- axisOperation.setOutputAction("urn:" + axisOperation.getName().getLocalPart() +
- Java2WSDLConstants.RESPONSE);
- }
- addChild(axisOperation);
-
- String operationName = axisOperation.getName().getLocalPart();
-
- /*
- Some times name of the operation can be different from the name of the first child of the SOAPBody.
- This will put the correct mapping associating that name with the operation. This will be useful especially for
- the SOAPBodyBasedDispatcher
- */
-
- Iterator axisMessageIter = axisOperation.getChildren();
-
- while (axisMessageIter.hasNext()) {
- AxisMessage axisMessage = (AxisMessage) axisMessageIter.next();
- String messageName = axisMessage.getName();
- if (messageName != null && !messageName.equals(operationName)) {
- mapActionToOperation(messageName, axisOperation);
- }
- }
-
- mapActionToOperation(operationName, axisOperation);
-
- String action = axisOperation.getInputAction();
- if (action.length() > 0) {
- mapActionToOperation(action, axisOperation);
- }
-
- ArrayList wsamappings = axisOperation.getWSAMappingList();
- if (wsamappings != null) {
- for (int j = 0, size = wsamappings.size(); j < size; j++) {
- String mapping = (String) wsamappings.get(j);
- mapActionToOperation(mapping, axisOperation);
- }
- }
-
- if (axisOperation.getMessageReceiver() == null) {
- axisOperation.setMessageReceiver(
- loadDefaultMessageReceiver(
- axisOperation.getMessageExchangePattern(), this));
- }
- }
-
-
- private MessageReceiver loadDefaultMessageReceiver(String mepURL, AxisService service) {
- MessageReceiver messageReceiver;
- if (mepURL == null) {
- mepURL = WSDL2Constants.MEP_URI_IN_OUT;
- }
- if (service != null) {
- messageReceiver = service.getMessageReceiver(mepURL);
- if (messageReceiver != null) {
- return messageReceiver;
- }
- }
- if (getAxisConfiguration() != null) {
- return getAxisConfiguration().getMessageReceiver(mepURL);
- }
- return null;
- }
-
-
- /**
- * Gets a copy from module operation.
- *
- * @param axisOperation
- * @return Returns AxisOperation.
- * @throws AxisFault
- */
- private AxisOperation copyOperation(AxisOperation axisOperation) throws AxisFault {
- AxisOperation operation =
- AxisOperationFactory
- .getOperationDescription(axisOperation.getMessageExchangePattern());
-
- operation.setMessageReceiver(axisOperation.getMessageReceiver());
- operation.setName(axisOperation.getName());
-
- Iterator parameters = axisOperation.getParameters().iterator();
-
- while (parameters.hasNext()) {
- Parameter parameter = (Parameter) parameters.next();
-
- operation.addParameter(parameter);
- }
-
- PolicyInclude policyInclude = new PolicyInclude(operation);
- PolicyInclude axisOperationPolicyInclude = axisOperation.getPolicyInclude();
-
- if (axisOperationPolicyInclude != null) {
- Policy policy = axisOperationPolicyInclude.getPolicy();
- if (policy != null) {
- policyInclude.setPolicy(axisOperationPolicyInclude.getPolicy());
- }
- }
- operation.setPolicyInclude(policyInclude);
-
- operation.setWsamappingList(axisOperation.getWSAMappingList());
- operation.setRemainingPhasesInFlow(axisOperation.getRemainingPhasesInFlow());
- operation.setPhasesInFaultFlow(axisOperation.getPhasesInFaultFlow());
- operation.setPhasesOutFaultFlow(axisOperation.getPhasesOutFaultFlow());
- operation.setPhasesOutFlow(axisOperation.getPhasesOutFlow());
-
- operation.setOutputAction(axisOperation.getOutputAction());
- String[] faultActionNames = axisOperation.getFaultActionNames();
- for (int i = 0; i < faultActionNames.length; i++) {
- operation.addFaultAction(faultActionNames[i],
- axisOperation.getFaultAction(faultActionNames[i]));
- }
-
- return operation;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.axis2.description.AxisService#addToengagedModules(javax.xml.namespace.QName)
- */
-
- /**
- * Engages a module. It is required to use this method.
- *
- * @param axisModule
- * @param engager
- */
- public void onEngage(AxisModule axisModule, AxisDescription engager)
- throws AxisFault {
- // adding module operations
- addModuleOperations(axisModule);
-
- Iterator operations = getOperations();
- while (operations.hasNext()) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- axisOperation.engageModule(axisModule, engager);
- }
- }
-
- /**
- * Maps an alias (such as a SOAPAction, WSA action, or an operation name) to the given
- * AxisOperation. This is used by dispatching (both SOAPAction- and WSAddressing-
- * based dispatching) to figure out which operation a given message is for.
- * Some notes on restrictions of "action"
- * - A null or empty action will be ignored
- * - An action that is a duplicate and references an idential operation is allowed
- * - An acton that is a duplicate and references a different operation is NOT allowed. In this
- * case, the action for the original operation is removed from the alias table, thus removing
- * the ability to route based on this action. This is necessary to prevent mis-directing
- * incoming message to the wrong operation based on SOAPAction.
- *
- * Note that an alias could be a SOAPAction, WS-Addressing Action, the operation name, or some
- * other alias.
- * @see #getOperationByAction(String)
- *
- * @param action the alias key
- * @param axisOperation the operation to map to
- */
- public void mapActionToOperation(String action, AxisOperation axisOperation) {
- if (action == null || "".equals(action)) {
- if (log.isDebugEnabled()) {
- log.debug(
- "mapActionToOperation: A null or empty action cannot be used to map to an operation.");
- }
- return;
- }
- if (log.isDebugEnabled()) {
- log.debug("mapActionToOperation: Mapping Action to Operation: action: " + action +
- "; operation: " + axisOperation+ "named: "+axisOperation.getName());
- }
-
- // First check if this action has already been flagged as invalid because it is a duplicate.
- if (invalidOperationsAliases.contains(action)) {
- // This SOAPAction has already been determined to be invalid; log a message
- // and do not add it to the operation alias map.
- if (log.isDebugEnabled()) {
- log.debug("mapActionToOperation: The action: " + action +
- " can not be used for operation: "
- + axisOperation + " with operation name: " + axisOperation.getName()
- + " because that SOAPAction is not unique for this service.");
- }
- return;
- }
-
- // Check if the action is currently mapping to an operation.
- AxisOperation currentlyMappedOperation = getOperationByAction(action);
- if (currentlyMappedOperation != null) {
- if (currentlyMappedOperation == axisOperation) {
- // This maps to the same operation, then it is already in the alias table, so
- // just silently ignore this mapping request.
- if (log.isDebugEnabled()) {
- log.debug(
- "mapActionToOperation: This operation is already mapped to this action: " +
- action + "; AxisOperation: "
- + currentlyMappedOperation + " named: " +
- currentlyMappedOperation.getName());
- }
- } else {
- // This action is already mapped, but it is to a different operation. Remove
- // the action mapping from the alias table and add it to the list of invalid mappings
- operationsAliasesMap.remove(action);
- invalidOperationsAliases.add(action);
- if (log.isDebugEnabled()) {
- log.debug(
- "mapActionToOperation: The action is already mapped to a different " +
- "operation. The mapping of the action to any operations will be " +
- "removed. Action: " + action + "; original operation: " +
- currentlyMappedOperation + " named " +
- currentlyMappedOperation.getName() +
- "; new operation: " + axisOperation + " named " +
- axisOperation.getName());
- }
- }
- } else {
- operationsAliasesMap.put(action, axisOperation);
- //Adding operation name to the mapping table
-// operationsAliasesMap.put(axisOperation.getName().getLocalPart(), axisOperation);
- }
- }
-
- /**
- * Maps an constant string in the whttp:location to the given operation. This is used by
- * RequestURIOperationDispatcher based dispatching to figure out which operation it is that a
- * given message is for.
- *
- * @param string the constant drawn from whttp:location
- * @param axisOperation the operation to map to
- */
- public void addHttpLocationDispatcherString(String string, AxisOperation axisOperation) {
- httpLocationDispatcherMap.put(string, axisOperation);
- }
-
- public void printSchema(OutputStream out) throws AxisFault {
- for (int i = 0; i < schemaList.size(); i++) {
- XmlSchema schema = addNameSpaces(i);
- schema.write(out);
- }
- }
-
- public XmlSchema getSchema(int index) {
- return addNameSpaces(index);
- }
-
-
- /**
- * Release the list of schema objects.
- * <p/>
- * In some environments, this can provide significant relief
- * of memory consumption in the java heap, as long as the
- * need for the schema list has completed.
- */
- public void releaseSchemaList() {
- if (schemaList != null) {
- // release the schema list
- schemaList.clear();
- }
-
- if (log.isDebugEnabled()) {
- log.debug("releaseSchemaList: schema list has been released.");
- }
- }
-
- private XmlSchema addNameSpaces(int i) {
- XmlSchema schema = (XmlSchema) schemaList.get(i);
- NamespaceMap map = (NamespaceMap) namespaceMap.clone();
- NamespacePrefixList namespaceContext = schema.getNamespaceContext();
- String prefixes[] = namespaceContext.getDeclaredPrefixes();
- for (int j = 0; j < prefixes.length; j++) {
- String prefix = prefixes[j];
- map.add(prefix, namespaceContext.getNamespaceURI(prefix));
- }
- schema.setNamespaceContext(map);
- return schema;
- }
-
- public void setEPRs(String[] eprs) {
- this.eprs = eprs;
- }
-
- public String[] getEPRs() throws AxisFault {
- if (eprs != null && eprs.length != 0) {
- return eprs;
- }
- eprs = calculateEPRs();
- return eprs;
- }
-
- private String[] calculateEPRs(){
- try {
- String requestIP = HttpUtils.getIpAddress(getAxisConfiguration());
- return calculateEPRs(requestIP);
- } catch (SocketException e) {
- log.error("Cannot get local IP address", e);
- }
- return new String[0];
- }
-
- private String[] calculateEPRs(String requestIP) {
- AxisConfiguration axisConfig = getAxisConfiguration();
- if (axisConfig == null) {
- return null;
- }
- ArrayList eprList = new ArrayList();
- if (enableAllTransports) {
- for (Iterator transports = axisConfig.getTransportsIn().values().iterator();
- transports.hasNext();) {
- TransportInDescription transportIn = (TransportInDescription) transports.next();
- TransportListener listener = transportIn.getReceiver();
- if (listener != null) {
- try {
- EndpointReference[] eprsForService =
- listener.getEPRsForService(this.name, requestIP);
- if (eprsForService != null) {
- for (int i = 0; i < eprsForService.length; i++) {
- EndpointReference endpointReference = eprsForService[i];
- if (endpointReference != null) {
- String address = endpointReference.getAddress();
- if (address != null) {
- eprList.add(address);
- }
- }
- }
- }
- } catch (AxisFault axisFault) {
- log.warn(axisFault.getMessage());
- }
- }
- }
- } else {
- List trs = this.exposedTransports;
- for (int i = 0; i < trs.size(); i++) {
- String trsName = (String) trs.get(i);
- TransportInDescription transportIn = axisConfig.getTransportIn(trsName);
- if (transportIn != null) {
- TransportListener listener = transportIn.getReceiver();
- if (listener != null) {
- try {
- EndpointReference[] eprsForService =
- listener.getEPRsForService(this.name, requestIP);
- if (eprsForService != null) {
- for (int j = 0; j < eprsForService.length; j++) {
- EndpointReference endpointReference = eprsForService[j];
- if (endpointReference != null) {
- String address = endpointReference.getAddress();
- if (address != null) {
- eprList.add(address);
- }
- }
- }
- }
- } catch (AxisFault axisFault) {
- log.warn(axisFault.getMessage());
- }
- }
- }
- }
- }
- eprs = (String[]) eprList.toArray(new String[eprList.size()]);
- return eprs;
- }
-
- private void printDefinitionObject(Definition definition, OutputStream out, String requestIP)
- throws AxisFault, WSDLException {
- if (isModifyUserWSDLPortAddress()) {
- setPortAddress(definition, requestIP);
- }
- if (!wsdlImportLocationAdjusted){
- changeImportAndIncludeLocations(definition);
- wsdlImportLocationAdjusted = true;
- }
- WSDLWriter writer = WSDLFactory.newInstance().newWSDLWriter();
- writer.writeWSDL(definition, out);
- }
-
- public void printUserWSDL(OutputStream out,
- String wsdlName) throws AxisFault {
- Definition definition = null;
- // first find the correct wsdl definition
- Parameter wsdlParameter = getParameter(WSDLConstants.WSDL_4_J_DEFINITION);
- if (wsdlParameter != null) {
- definition = (Definition) wsdlParameter.getValue();
- }
-
- if (definition != null) {
- try {
- printDefinitionObject(getWSDLDefinition(definition, wsdlName), out, null);
- } catch (WSDLException e) {
- throw AxisFault.makeFault(e);
- }
- } else {
- printWSDLError(out);
- }
-
- }
-
- /**
- * find the definition object for given name
- * @param parentDefinition
- * @param name
- * @return wsdl definition
- */
- private Definition getWSDLDefinition(Definition parentDefinition, String name) {
-
- if (name == null) return parentDefinition;
-
- Definition importedDefinition = null;
- Iterator iter = parentDefinition.getImports().values().iterator();
- Vector values = null;
- Import wsdlImport = null;
- for (; iter.hasNext();) {
- values = (Vector) iter.next();
- for (Iterator valuesIter = values.iterator(); valuesIter.hasNext();) {
- wsdlImport = (Import) valuesIter.next();
- if (wsdlImport.getLocationURI().endsWith(name)) {
- importedDefinition = wsdlImport.getDefinition();
- break;
- } else {
- importedDefinition = getWSDLDefinition(wsdlImport.getDefinition(), name);
- }
- if (importedDefinition != null) {
- break;
- }
- }
- if (importedDefinition != null) {
- break;
- }
- }
- return importedDefinition;
- }
-
- /**
- * this procesdue recursively adjust the wsdl imports locations
- * and the schmea import and include locations.
- * @param definition
- */
- private void changeImportAndIncludeLocations(Definition definition){
-
- //adjust the schema locations in types section
- Types types = definition.getTypes();
- if (types != null) {
- List extensibilityElements = types.getExtensibilityElements();
- Object extensibilityElement = null;
- Schema schema = null;
- for (Iterator iter = extensibilityElements.iterator(); iter.hasNext();) {
- extensibilityElement = iter.next();
- if (extensibilityElement instanceof Schema) {
- schema = (Schema) extensibilityElement;
- changeLocations(schema.getElement());
- }
- }
- }
-
- Iterator iter = definition.getImports().values().iterator();
- Vector values = null;
- Import wsdlImport = null;
- String originalImprotString = null;
- for (; iter.hasNext();) {
- values = (Vector) iter.next();
- for (Iterator valuesIter = values.iterator(); valuesIter.hasNext();) {
- wsdlImport = (Import) valuesIter.next();
- originalImprotString = wsdlImport.getLocationURI();
- if (originalImprotString.indexOf("://") == -1){
- wsdlImport.setLocationURI(this.name + "?wsdl=" + originalImprotString);
- }
- changeImportAndIncludeLocations(wsdlImport.getDefinition());
- }
- }
- }
-
- /**
- * change the schema Location in the elemment
- * @param element
- */
-
- private void changeLocations(Element element) {
- NodeList nodeList = element.getChildNodes();
- String tagName;
- for (int i = 0; i < nodeList.getLength(); i++) {
- tagName = nodeList.item(i).getLocalName();
- if (IMPORT_TAG.equals(tagName) || INCLUDE_TAG.equals(tagName)) {
- processImport(nodeList.item(i));
- }
- }
- }
-
- private void processImport(Node importNode) {
- NamedNodeMap nodeMap = importNode.getAttributes();
- Node attribute;
- String attributeValue;
- for (int i = 0; i < nodeMap.getLength(); i++) {
- attribute = nodeMap.item(i);
- if (attribute.getNodeName().equals("schemaLocation")) {
- attributeValue = attribute.getNodeValue();
- if (attributeValue.indexOf("://") == -1) {
- attribute.setNodeValue(this.name + "?xsd=" + attributeValue);
- }
- }
- }
- }
-
- /**
- * Produces a XSD for this AxisService and prints it to the specified OutputStream.
- *
- * @param out destination stream.
- * @param xsd schema name
- * @return -1 implies not found, 0 implies redirect to root, 1 implies found/printed a schema
- * @throws IOException
- */
- public int printXSD(OutputStream out, String xsd) throws IOException {
-
- // If we find a SchemaSupplier, use that
- SchemaSupplier supplier = (SchemaSupplier)getParameterValue("SchemaSupplier");
- if (supplier != null) {
- XmlSchema schema = supplier.getSchema(this, xsd);
- if (schema != null) {
- schema.write(new OutputStreamWriter(out, "UTF8"));
- out.flush();
- out.close();
- return 1;
- }
- }
-
- //call the populator
- populateSchemaMappings();
- Map schemaMappingtable =
- getSchemaMappingTable();
- ArrayList schemas = getSchema();
-
- //a name is present - try to pump the requested schema
- if (!"".equals(xsd)) {
- XmlSchema schema =
- (XmlSchema) schemaMappingtable.get(xsd);
- if (schema == null) {
- int dotIndex = xsd.indexOf('.');
- if (dotIndex > 0) {
- String schemaKey = xsd.substring(0,dotIndex);
- schema = (XmlSchema) schemaMappingtable.get(schemaKey);
- }
- }
- if (schema != null) {
- //schema is there - pump it outs
- schema.write(new OutputStreamWriter(out, "UTF8"));
- out.flush();
- out.close();
- } else {
- InputStream in = getClassLoader()
- .getResourceAsStream(DeploymentConstants.META_INF + "/" + xsd);
- if (in != null) {
- out.write(IOUtils.getStreamAsByteArray(in));
- out.flush();
- out.close();
- } else {
- // Can't find the schema
- return -1;
- }
- }
- } else if (schemas.size() > 1) {
- //multiple schemas are present and the user specified
- //no name - in this case we cannot possibly pump a schema
- //so redirect to the service root
- return 0;
- } else {
- //user specified no name and there is only one schema
- //so pump that out
- ArrayList list = getSchema();
- if (list.size() > 0) {
- XmlSchema schema = getSchema(0);
- if (schema != null) {
- schema.write(new OutputStreamWriter(out, "UTF8"));
- out.flush();
- out.close();
- }
- } else {
- String xsdNotFound = "<error>" +
- "<description>Unable to access schema for this service</description>" +
- "</error>";
- out.write(xsdNotFound.getBytes());
- out.flush();
- out.close();
- }
- }
- return 1;
- }
-
- /**
- * Produces a WSDL for this AxisService and prints it to the specified OutputStream.
- *
- * @param out destination stream. The WSDL will be sent here.
- * @param requestIP the hostname the WSDL request was directed at. This should be the address
- * that appears in the generated WSDL.
- * @throws AxisFault if an error occurs
- */
- public void printWSDL(OutputStream out, String requestIP) throws AxisFault {
- // If we're looking for pre-existing WSDL, use that.
- if (isUseUserWSDL()) {
- printUserWSDL(out, null);
- return;
- }
-
- // If we find a WSDLSupplier, use that
- WSDLSupplier supplier = (WSDLSupplier)getParameterValue("WSDLSupplier");
- if (supplier != null) {
- try {
- Definition definition = supplier.getWSDL(this);
- if (definition != null) {
- printDefinitionObject(getWSDLDefinition(definition, null), out, requestIP);
- }
- } catch (Exception e) {
- printWSDLError(out, e);
- }
- return;
- }
-
- // Otherwise, generate WSDL ourselves
- String[] eprArray = requestIP == null ? new String[] { this.endpointName } :
- calculateEPRs(requestIP);
- getWSDL(out, eprArray);
- }
-
- /**
- * Print the WSDL with a default URL. This will be called only during codegen time.
- *
- * @param out
- * @throws AxisFault
- */
- public void printWSDL(OutputStream out) throws AxisFault {
- printWSDL(out, null);
- }
-
- private void setPortAddress(Definition definition) throws AxisFault {
- setPortAddress(definition, null);
- }
-
- private void setPortAddress(Definition definition, String requestIP) throws AxisFault {
- Iterator serviceItr = definition.getServices().values().iterator();
- while (serviceItr.hasNext()) {
- Service serviceElement = (Service) serviceItr.next();
- Iterator portItr = serviceElement.getPorts().values().iterator();
- while (portItr.hasNext()) {
- Port port = (Port) portItr.next();
- List list = port.getExtensibilityElements();
- for (int i = 0; i < list.size(); i++) {
- Object extensibilityEle = list.get(i);
- if (extensibilityEle instanceof SOAPAddress) {
- SOAPAddress soapAddress = (SOAPAddress) extensibilityEle;
- String existingAddress = soapAddress.getLocationURI();
- if (existingAddress == null || existingAddress.equals("REPLACE_WITH_ACTUAL_URL")) {
- ((SOAPAddress) extensibilityEle).setLocationURI(
- getEPRs()[0]);
- } else {
- if (requestIP == null) {
- ((SOAPAddress) extensibilityEle).setLocationURI(
- getLocationURI(getEPRs(), existingAddress));
- } else {
- ((SOAPAddress) extensibilityEle).setLocationURI(
- getLocationURI(calculateEPRs(requestIP), existingAddress));
- }
- }
- } else if (extensibilityEle instanceof SOAP12Address){
- SOAP12Address soapAddress = (SOAP12Address) extensibilityEle;
- String exsistingAddress = soapAddress.getLocationURI();
- if (requestIP == null) {
- ((SOAP12Address) extensibilityEle).setLocationURI(
- getLocationURI(getEPRs(), exsistingAddress));
- } else {
- ((SOAP12Address) extensibilityEle).setLocationURI(
- getLocationURI(calculateEPRs(requestIP), exsistingAddress));
- }
- } else if (extensibilityEle instanceof HTTPAddress){
- HTTPAddress httpAddress = (HTTPAddress) extensibilityEle;
- String exsistingAddress = httpAddress.getLocationURI();
- if (requestIP == null) {
- ((HTTPAddress) extensibilityEle).setLocationURI(
- getLocationURI(getEPRs(), exsistingAddress));
- } else {
- ((HTTPAddress) extensibilityEle).setLocationURI(
- getLocationURI(calculateEPRs(requestIP), exsistingAddress));
- }
- }
- //TODO : change the Endpoint refrence addess as well.
- }
- }
- }
- }
-
- /**
- * this method returns the new IP address corresponding to the
- * already existing ip
- * @param eprs
- * @param epr
- * @return corresponding Ip address
- */
- private String getLocationURI(String[] eprs, String epr) throws AxisFault {
- String returnIP = null;
- if (epr != null) {
- if (epr.indexOf(":") > -1) {
- String existingProtocol = epr.substring(0, epr.indexOf(":")).trim();
- String eprProtocol;
- for (int i = 0; i < eprs.length; i++) {
- eprProtocol = eprs[i].substring(0, eprs[i].indexOf(":")).trim();
- if (eprProtocol.equals(existingProtocol)) {
- returnIP = eprs[i];
- break;
- }
- }
- if (returnIP != null) {
- return returnIP;
- } else {
- throw new AxisFault("Server does not have an epr for the wsdl epr==>" + epr);
- }
- } else {
- throw new AxisFault("invalid epr is given epr ==> " + epr);
- }
- } else {
- throw new AxisFault("No epr is given in the wsdl port");
- }
- }
-
- private void getWSDL(OutputStream out, String[] serviceURL) throws AxisFault {
- // Retrieve WSDL using the same data retrieval path for GetMetadata request.
- DataRetrievalRequest request = new DataRetrievalRequest();
- request.putDialect(DRConstants.SPEC.DIALECT_TYPE_WSDL);
- request.putOutputForm(OutputForm.INLINE_FORM);
-
- MessageContext context = new MessageContext();
- context.setAxisService(this);
- context.setTo(new EndpointReference(serviceURL[0]));
-
- Data[] result = getData(request, context);
- OMElement wsdlElement;
- if (result != null && result.length > 0) {
- wsdlElement = (OMElement) (result[0].getData());
- try {
- XMLPrettyPrinter.prettify(wsdlElement, out);
- out.flush();
- out.close();
- } catch (Exception e) {
- throw AxisFault.makeFault(e);
- }
- }
- }
-
- private void printWSDLError(OutputStream out) throws AxisFault {
- printWSDLError(out, null);
- }
-
- private void printWSDLError(OutputStream out, Exception e) throws AxisFault {
- try {
- String wsdlntfound = "<error>" +
- "<description>Unable to generate WSDL 1.1 for this service</description>" +
- "<reason>If you wish Axis2 to automatically generate the WSDL 1.1, then please +" +
- "set useOriginalwsdl as false in your services.xml</reason>";
- out.write(wsdlntfound.getBytes());
- if (e != null) {
- PrintWriter pw = new PrintWriter(out);
- e.printStackTrace(pw);
- pw.flush();
- }
- out.write("</error>".getBytes());
- out.flush();
- out.close();
- } catch (IOException ex) {
- throw AxisFault.makeFault(ex);
- }
- }
-
- /**
- * Print the WSDL2.0 with a default URL. This will be called only during codegen time.
- *
- * @param out
- * @throws AxisFault
- */
- public void printWSDL2(OutputStream out) throws AxisFault {
- printWSDL2(out, null);
- }
-
- public void printWSDL2(OutputStream out, String requestIP) throws AxisFault {
- AxisService2WSDL20 axisService2WSDL2 = new AxisService2WSDL20(this);
- try {
- if(requestIP != null) {
- axisService2WSDL2.setEPRs(calculateEPRs(requestIP));
- }
- OMElement wsdlElement = axisService2WSDL2.generateOM();
- wsdlElement.serialize(out);
- out.flush();
- out.close();
- } catch (Exception e) {
- throw AxisFault.makeFault(e);
- }
- }
-
- /**
- * Gets the description about the service which is specified in services.xml.
- *
- * @return Returns String.
- * @deprecated Use getDocumentation() instead
- */
- public String getServiceDescription() {
- return getDocumentation();
- }
-
- /**
- * Method getClassLoader.
- *
- * @return Returns ClassLoader.
- */
- public ClassLoader getClassLoader() {
- return this.serviceClassLoader;
- }
-
- /**
- * Gets the control operation which are added by module like RM.
- */
- public ArrayList getControlOperations() {
- Iterator op_itr = getOperations();
- ArrayList operationList = new ArrayList();
-
- while (op_itr.hasNext()) {
- AxisOperation operation = (AxisOperation) op_itr.next();
-
- if (operation.isControlOperation()) {
- operationList.add(operation);
- }
- }
-
- return operationList;
- }
-
- public URL getFileName() {
- return fileName;
- }
-
- public long getLastupdate() {
- return lastupdate;
- }
-
- public ModuleConfiguration getModuleConfig(String moduleName) {
- return (ModuleConfiguration) moduleConfigmap.get(moduleName);
- }
-
- public ArrayList getModules() {
- return moduleRefs;
- }
-
- public String getName() {
- return name;
- }
-
- /**
- * Method getOperation.
- *
- * @param operationName
- * @return Returns AxisOperation.
- */
- public AxisOperation getOperation(QName operationName) {
- AxisOperation axisOperation = (AxisOperation) getChild(operationName);
- if (axisOperation == null) {
- axisOperation = (AxisOperation) getChild(
- new QName(getTargetNamespace(), operationName.getLocalPart()));
- }
- if (axisOperation == null) {
- axisOperation = (AxisOperation) operationsAliasesMap.get(
- operationName.getLocalPart());
- }
-
- return axisOperation;
- }
-
-
- /**
- * Returns the AxisOperation which has been mapped to the given alias.
- *
- * @see #mapActionToOperation(String, AxisOperation)
- *
- * @param action the alias key
- * @return Returns the corresponding AxisOperation or null if it isn't found.
- */
- public AxisOperation getOperationByAction(String action) {
- return (AxisOperation) operationsAliasesMap.get(action);
- }
-
- /**
- * Returns the operation given a SOAP Action. This
- * method should be called if only one Endpoint is defined for
- * this Service. If more than one Endpoint exists, one of them will be
- * picked. If more than one Operation is found with the given SOAP Action;
- * null will be returned. If no particular Operation is found with the given
- * SOAP Action; null will be returned. If the action is in the list of invaliad aliases,
- * which means it did not uniquely identify an operation, a null will be returned.
- *
- * @param soapAction SOAP Action defined for the particular Operation
- * @return Returns an AxisOperation if a unique Operation can be found with the given
- * SOAP Action otherwise will return null.
- */
- public AxisOperation getOperationBySOAPAction(String soapAction) {
-
- // Check for illegal soapActions
- if ((soapAction == null) || soapAction.length() == 0) {
- if(log.isDebugEnabled()){
- log.debug("getOperationBySOAPAction: "+soapAction +" is null or ''. Returning null.");
- }
- return null;
- }
-
- // If the action maps to an alais that is not unique, then it can't be used to map to
- // an operation.
- if (invalidOperationsAliases.contains(soapAction)) {
- if(log.isDebugEnabled()){
- log.debug("getOperationBySOAPAction: "+soapAction +" is an invalid operation alias. Returning null.");
- }
- return null;
- }
-
- // Get the operation from the action->operation map
- AxisOperation operation = (AxisOperation) operationsAliasesMap.get(soapAction);
-
- if (operation != null) {
- if(log.isDebugEnabled()){
- log.debug("getOperationBySOAPAction: Operation ("+operation+","+operation.getName()+") for soapAction: "+soapAction+" found in action map.");
- }
- return operation;
- }
-
- // The final fallback is to check the operations for a matching name.
-
- Iterator children = getChildren();
- // I could not find any spec statement that explicitly forbids using a short name in the SOAPAction header or wsa:Action element,
- // so I believe this to be valid. There may be customers using the shortname as the SOAPAction in their client code that would
- // also require this support.
- while(children.hasNext() && (operation == null)){
- AxisOperation op = (AxisOperation)children.next();
- if(op.getName().getLocalPart().equals(soapAction)){
- operation = op;
- }
- }
-
- if (operation != null) {
- if(log.isDebugEnabled()){
- log.debug("getOperationBySOAPAction: Operation ("+operation+","+operation.getName()+") for soapAction: "+soapAction+" found as child.");
- }
- }
-
- return operation;
- }
-
- /**
- * Method getOperations.
- *
- * @return Returns HashMap
- */
- public Iterator getOperations() {
- return getChildren();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.apache.axis2.description.ParameterInclude#getParameter(java.lang.String)
- */
-
- /**
- * Gets only the published operations.
- */
- public ArrayList getPublishedOperations() {
- Iterator op_itr = getOperations();
- ArrayList operationList = new ArrayList();
-
- while (op_itr.hasNext()) {
- AxisOperation operation = (AxisOperation) op_itr.next();
-
- if (!operation.isControlOperation()) {
- operationList.add(operation);
- }
- }
-
- return operationList;
- }
-
- /**
- * Sets the description about the service which is specified in services.xml
- *
- * @param documentation
- * @deprecated Use setDocumentation() instead
- */
- public void setServiceDescription(String documentation) {
- setDocumentation(documentation);
- }
-
- /**
- * Method setClassLoader.
- *
- * @param classLoader
- */
- public void setClassLoader(ClassLoader classLoader) {
- this.serviceClassLoader = classLoader;
- }
-
- public void setFileName(URL fileName) {
- this.fileName = fileName;
- }
-
- /**
- * Sets the current time as last update time of the service.
- */
- public void setLastupdate() {
- lastupdate = new Date().getTime();
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public ArrayList getSchema() {
- return schemaList;
- }
-
- public void addSchema(XmlSchema schema) {
- if (schema != null) {
- schemaList.add(schema);
- if (schema.getTargetNamespace() != null) {
- addSchemaNameSpace(schema);
- }
- }
- }
-
- public void addSchema(Collection schemas) {
- Iterator iterator = schemas.iterator();
- while (iterator.hasNext()) {
- XmlSchema schema = (XmlSchema) iterator.next();
- schemaList.add(schema);
- addSchemaNameSpace(schema);
- }
- }
-
- public boolean isWsdlFound() {
- return wsdlFound;
- }
-
- public void setWsdlFound(boolean wsdlFound) {
- this.wsdlFound = wsdlFound;
- }
-
- public String getScope() {
- return scope;
- }
-
- /**
- * @param scope - Available scopes :
- * Constants.SCOPE_APPLICATION
- * Constants.SCOPE_TRANSPORT_SESSION
- * Constants.SCOPE_SOAP_SESSION
- * Constants.SCOPE_REQUEST.equals
- */
- public void setScope(String scope) {
- if (Constants.SCOPE_APPLICATION.equals(scope) ||
- Constants.SCOPE_TRANSPORT_SESSION.equals(scope) ||
- Constants.SCOPE_SOAP_SESSION.equals(scope) ||
- Constants.SCOPE_REQUEST.equals(scope)) {
- this.scope = scope;
- }
- }
-
- public boolean isUseDefaultChains() {
- return useDefaultChains;
- }
-
- public void setUseDefaultChains(boolean useDefaultChains) {
- this.useDefaultChains = useDefaultChains;
- }
-
- public Object getKey() {
- return this.name;
- }
-
- public boolean isActive() {
- return active;
- }
-
- public void setActive(boolean active) {
- this.active = active;
- }
-
- public String getSchematargetNamespace() {
- return schematargetNamespace;
- }
-
- public void setSchemaTargetNamespace(String schematargetNamespace) {
- this.schematargetNamespace = schematargetNamespace;
- }
-
- public String getSchemaTargetNamespacePrefix() {
- return schematargetNamespacePrefix;
- }
-
- public void setSchematargetNamespacePrefix(String schematargetNamespacePrefix) {
- this.schematargetNamespacePrefix = schematargetNamespacePrefix;
- }
-
- public String getTargetNamespace() {
- return targetNamespace;
- }
-
- public void setTargetNamespace(String targetNamespace) {
- this.targetNamespace = targetNamespace;
- }
-
- public String getTargetNamespacePrefix() {
- return targetNamespacePrefix;
- }
-
- public void setTargetNamespacePrefix(String targetNamespacePrefix) {
- this.targetNamespacePrefix = targetNamespacePrefix;
- }
-
- public XmlSchemaElement getSchemaElement(QName elementQName) {
- XmlSchemaElement element;
- for (int i = 0; i < schemaList.size(); i++) {
- XmlSchema schema = (XmlSchema) schemaList.get(i);
- if (schema != null) {
- element = schema.getElementByName(elementQName);
- if (element != null) {
- return element;
- }
- }
- }
- return null;
- }
-
- public boolean isEnableAllTransports() {
- return enableAllTransports;
- }
-
- /**
- * To eneble service to be expose in all the transport
- *
- * @param enableAllTransports
- */
- public void setEnableAllTransports(boolean enableAllTransports) {
- this.enableAllTransports = enableAllTransports;
- eprs = calculateEPRs();
- }
-
- public List getExposedTransports() {
- return this.exposedTransports;
- }
-
- public void setExposedTransports(List transports) {
- enableAllTransports = false;
- this.exposedTransports = transports;
- eprs = null; //Do not remove this. We need to force EPR recalculation.
- }
-
- public void addExposedTransport(String transport) {
- enableAllTransports = false;
- if (!this.exposedTransports.contains(transport)) {
- this.exposedTransports.add(transport);
- try {
- eprs = calculateEPRs();
- } catch (Exception e) {
- eprs = null;
- }
- }
- }
-
- public void removeExposedTransport(String transport) {
- enableAllTransports = false;
- this.exposedTransports.remove(transport);
- try {
- eprs = calculateEPRs();
- } catch (Exception e) {
- eprs = null;
- }
- }
-
- public boolean isExposedTransport(String transport) {
- return exposedTransports.contains(transport);
- }
-
- public void onDisengage(AxisModule module) throws AxisFault {
- removeModuleOperations(module);
- for (Iterator operations = getChildren(); operations.hasNext();) {
- AxisOperation axisOperation = (AxisOperation) operations.next();
- axisOperation.disengageModule(module);
- }
- AxisConfiguration config = getAxisConfiguration();
- if (!config.isEngaged(module.getName())) {
- PhaseResolver phaseResolver = new PhaseResolver(config);
- phaseResolver.disengageModuleFromGlobalChains(module);
- }
- }
-
- /**
- * Remove any operations which were added by a given module.
- *
- * @param module the module in question
- */
- private void removeModuleOperations(AxisModule module) {
- HashMap moduleOperations = module.getOperations();
- if (moduleOperations != null) {
- for (Iterator modOpsIter = moduleOperations.values().iterator();
- modOpsIter.hasNext();) {
- AxisOperation operation = (AxisOperation) modOpsIter.next();
- removeOperation(operation.getName());
- }
- }
- }
-
- //#######################################################################################
- // APIs to create AxisService
-
- //
-
- /**
- * To create a AxisService for a given WSDL and the created client is most suitable for client side
- * invocation not for server side invocation. Since all the soap action and wsa action is added to
- * operations
- *
- * @param wsdlURL location of the WSDL
- * @param wsdlServiceName name of the service to be invoke , if it is null then the first one will
- * be selected if there are more than one
- * @param portName name of the port , if there are more than one , if it is null then the
- * first one in the iterator will be selected
- * @param options Service client options, to set the target EPR
- * @return AxisService , the created service will be return
- */
- public static AxisService createClientSideAxisService(URL wsdlURL,
- QName wsdlServiceName,
- String portName,
- Options options) throws AxisFault {
- try {
- InputStream in = wsdlURL.openConnection().getInputStream();
- Document doc = XMLUtils.newDocument(in);
- WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
- reader.setFeature("javax.wsdl.importDocuments", true);
- Definition wsdlDefinition = reader.readWSDL(getBaseURI(wsdlURL.toString()), doc);
- if (wsdlDefinition != null) {
- wsdlDefinition.setDocumentBaseURI(getDocumentURI(wsdlURL.toString()));
- }
- return createClientSideAxisService(wsdlDefinition, wsdlServiceName, portName, options);
- } catch (IOException e) {
- log.error(e.getMessage(), e);
- throw AxisFault.makeFault(e);
- } catch (ParserConfigurationException e) {
- log.error(e.getMessage(), e);
- throw AxisFault.makeFault(e);
- } catch (SAXException e) {
- log.error(e.getMessage(), e);
- throw AxisFault.makeFault(e);
- } catch (WSDLException e) {
- log.error(e.getMessage(), e);
- throw AxisFault.makeFault(e);
- }
- }
-
- private static String getBaseURI(String currentURI) {
- try {
- File file = new File(currentURI);
- if (file.exists()) {
- return file.getCanonicalFile().getParentFile().toURI().toString();
- }
- String uriFragment = currentURI.substring(0, currentURI.lastIndexOf("/"));
- return uriFragment + (uriFragment.endsWith("/") ? "" : "/");
- } catch (IOException e) {
- return null;
- }
- }
-
- private static String getDocumentURI(String currentURI) {
- try {
- File file = new File(currentURI);
- return file.getCanonicalFile().toURI().toString();
- } catch (IOException e) {
- return null;
- }
- }
-
- public static AxisService createClientSideAxisService(Definition wsdlDefinition,
- QName wsdlServiceName,
- String portName,
- Options options) throws AxisFault {
- WSDL11ToAxisServiceBuilder serviceBuilder =
- new WSDL11ToAxisServiceBuilder(wsdlDefinition, wsdlServiceName, portName);
- serviceBuilder.setServerSide(false);
- AxisService axisService = serviceBuilder.populateService();
- AxisEndpoint axisEndpoint = (AxisEndpoint) axisService.getEndpoints()
- .get(axisService.getEndpointName());
- options.setTo(new EndpointReference(axisEndpoint.getEndpointURL()));
- if (axisEndpoint != null) {
- options.setSoapVersionURI((String) axisEndpoint.getBinding()
- .getProperty(WSDL2Constants.ATTR_WSOAP_VERSION));
- }
- return axisService;
- }
-
- /**
- * To create an AxisService using given service impl class name
- * first generate schema corresponding to the given java class , next for each methods AxisOperation
- * will be created. If the method is in-out it will uses RPCMessageReceiver else
- * RPCInOnlyMessageReceiver
- * <p/>
- * Note : Inorder to work this properly RPCMessageReceiver should be available in the class path
- * otherewise operation can not continue
- *
- * @param implClass Service implementation class
- * @param axisConfig Current AxisConfiguration
- * @return return created AxisSrevice the creted service , it can either be null or valid service
- */
- public static AxisService createService(String implClass,
- AxisConfiguration axisConfig) throws AxisFault {
-
- try {
- HashMap messageReciverMap = new HashMap();
- Class inOnlyMessageReceiver = Loader.loadClass(
- "org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver");
- MessageReceiver messageReceiver =
- (MessageReceiver) inOnlyMessageReceiver.newInstance();
- messageReciverMap.put(
- WSDL2Constants.MEP_URI_IN_ONLY,
- messageReceiver);
- Class inoutMessageReceiver = Loader.loadClass(
- "org.apache.axis2.rpc.receivers.RPCMessageReceiver");
- MessageReceiver inOutmessageReceiver =
- (MessageReceiver) inoutMessageReceiver.newInstance();
- messageReciverMap.put(
- WSDL2Constants.MEP_URI_IN_OUT,
- inOutmessageReceiver);
- messageReciverMap.put(WSDL2Constants.MEP_URI_ROBUST_IN_ONLY, inOutmessageReceiver);
-
- return createService(implClass,
- axisConfig,
- messageReciverMap,
- null,
- null,
- axisConfig.getSystemClassLoader());
- } catch (Exception e) {
- throw AxisFault.makeFault(e);
- }
- }
-
- /**
- * messageReceiverClassMap will hold the MessageReceivers for given meps. Key will be the
- * mep and value will be the instance of the MessageReceiver class.
- * Ex:
- * Map mrMap = new HashMap();
- * mrMap.put("http://www.w3.org/2004/08/wsdl/in-only",
- * RPCInOnlyMessageReceiver.class.newInstance());
- * mrMap.put("http://www.w3.org/2004/08/wsdl/in-out",
- * RPCMessageReceiver.class.newInstance());
- *
- * @param implClass
- * @param axisConfiguration
- * @param messageReceiverClassMap
- * @param targetNamespace
- * @param schemaNamespace
- * @throws AxisFault
- */
- public static AxisService createService(String implClass,
- AxisConfiguration axisConfiguration,
- Map messageReceiverClassMap,
- String targetNamespace,
- String schemaNamespace,
- ClassLoader loader) throws AxisFault {
- int index = implClass.lastIndexOf(".");
- String serviceName;
- if (index > 0) {
- serviceName = implClass.substring(index + 1, implClass.length());
- } else {
- serviceName = implClass;
- }
-
- SchemaGenerator schemaGenerator;
- ArrayList excludeOpeartion = new ArrayList();
- AxisService service = new AxisService();
- service.setParent(axisConfiguration);
- service.setName(serviceName);
-
- try {
- Parameter generateBare = service.getParameter(Java2WSDLConstants.DOC_LIT_BARE_PARAMETER);
- if (generateBare != null && "true".equals(generateBare.getValue())) {
- schemaGenerator = new DocLitBareSchemaGenerator(loader,
- implClass, schemaNamespace,
- Java2WSDLConstants.SCHEMA_NAMESPACE_PRFIX, service);
- } else {
- schemaGenerator = new DefaultSchemaGenerator(loader,
- implClass, schemaNamespace,
- Java2WSDLConstants.SCHEMA_NAMESPACE_PRFIX, service);
- }
- schemaGenerator.setElementFormDefault(Java2WSDLConstants.FORM_DEFAULT_UNQUALIFIED);
- Utils.addExcludeMethods(excludeOpeartion);
- schemaGenerator.setExcludeMethods(excludeOpeartion);
- } catch (Exception e) {
- throw AxisFault.makeFault(e);
- }
-
- return createService(implClass,
- serviceName,
- axisConfiguration,
- messageReceiverClassMap,
- targetNamespace,
- loader,
- schemaGenerator, service);
- }
-
- /**
- * messageReceiverClassMap will hold the MessageReceivers for given meps. Key will be the
- * mep and value will be the instance of the MessageReceiver class.
- * Ex:
- * Map mrMap = new HashMap();
- * mrMap.put("http://www.w3.org/2004/08/wsdl/in-only",
- * RPCInOnlyMessageReceiver.class.newInstance());
- * mrMap.put("http://www.w3.org/2004/08/wsdl/in-out",
- * RPCMessageReceiver.class.newInstance());
- *
- * @param implClass
- * @param axisConfiguration
- * @param messageReceiverClassMap
- * @param targetNamespace
- * @throws AxisFault
- */
- public static AxisService createService(String implClass,
- String serviceName,
- AxisConfiguration axisConfiguration,
- Map messageReceiverClassMap,
- String targetNamespace,
- ClassLoader loader,
- SchemaGenerator schemaGenerator,
- AxisService axisService) throws AxisFault {
- Parameter parameter = new Parameter(Constants.SERVICE_CLASS, implClass);
- OMElement paraElement = Utils.getParameter(Constants.SERVICE_CLASS, implClass, false);
- parameter.setParameterElement(paraElement);
- axisService.setUseDefaultChains(false);
- axisService.addParameter(parameter);
- axisService.setName(serviceName);
- axisService.setClassLoader(loader);
-
- NamespaceMap map = new NamespaceMap();
- map.put(Java2WSDLConstants.AXIS2_NAMESPACE_PREFIX,
- Java2WSDLConstants.AXIS2_XSD);
- map.put(Java2WSDLConstants.DEFAULT_SCHEMA_NAMESPACE_PREFIX,
- Java2WSDLConstants.URI_2001_SCHEMA_XSD);
- axisService.setNameSpacesMap(map);
- Utils.processBeanPropertyExclude(axisService);
- axisService.setElementFormDefault(false);
- try {
- axisService.addSchema(schemaGenerator.generateSchema());
- } catch (Exception e) {
- throw AxisFault.makeFault(e);
- }
- axisService.setSchemaTargetNamespace(schemaGenerator.getSchemaTargetNameSpace());
- axisService.setTypeTable(schemaGenerator.getTypeTable());
- if (targetNamespace == null) {
- targetNamespace = schemaGenerator.getSchemaTargetNameSpace();
- }
- if (targetNamespace != null && !"".equals(targetNamespace)) {
- axisService.setTargetNamespace(targetNamespace);
- }
- JMethod[] method = schemaGenerator.getMethods();
- PhasesInfo pinfo = axisConfiguration.getPhasesInfo();
- for (int i = 0; i < method.length; i++) {
- JMethod jmethod = method[i];
- AxisOperation operation = axisService.getOperation(new QName(jmethod.getSimpleName()));
- String mep = operation.getMessageExchangePattern();
- MessageReceiver mr;
- if (messageReceiverClassMap != null) {
-
- if (messageReceiverClassMap.get(mep) != null) {
- Object obj = messageReceiverClassMap.get(mep);
- if (obj instanceof MessageReceiver) {
- mr = (MessageReceiver) obj;
- operation.setMessageReceiver(mr);
- } else {
- log.error(
- "Object is not an instance of MessageReceiver, thus, default MessageReceiver has been set");
- mr = axisConfiguration
- .getMessageReceiver(operation.getMessageExchangePattern());
- operation.setMessageReceiver(mr);
- }
- } else {
- log.error(
- "Required MessageReceiver couldn't be found, thus, default MessageReceiver has been used");
- mr = axisConfiguration
- .getMessageReceiver(operation.getMessageExchangePattern());
- operation.setMessageReceiver(mr);
- }
- } else {
- log.error(
- "MessageRecevierClassMap couldn't be found, thus, default MessageReceiver has been used");
- mr = axisConfiguration.getMessageReceiver(operation.getMessageExchangePattern());
- operation.setMessageReceiver(mr);
- }
- pinfo.setOperationPhases(operation);
- axisService.addOperation(operation);
- }
- return axisService;
-
- }
-
- public void removeOperation(QName opName) {
- AxisOperation operation = getOperation(opName);
- if (operation != null) {
- removeChild(opName);
- ArrayList mappingList = operation.getWSAMappingList();
- if (mappingList != null) {
- for (int i = 0; i < mappingList.size(); i++) {
- String actionMapping = (String) mappingList.get(i);
- operationsAliasesMap.remove(actionMapping);
- }
- }
- operationsAliasesMap.remove(operation.getName().getLocalPart());
- }
- }
-
- /**
- * Get the namespace map for this service.
- *
- * @return a Map of prefix (String) to namespace URI (String)
- * @deprecated please use getNamespaceMap()
- */
- public Map getNameSpacesMap() {
- return namespaceMap;
- }
-
- /**
- * Get the namespace map for this service.
- *
- * @return a Map of prefix (String) to namespace URI (String)
- */
- public Map getNamespaceMap() {
- return namespaceMap;
- }
-
- /**
- * Sets the
- * @param nameSpacesMap
- */
- public void setNameSpacesMap(NamespaceMap nameSpacesMap) {
- this.namespaceMap = nameSpacesMap;
- }
-
- public void setNamespaceMap(NamespaceMap namespaceMap) {
- this.namespaceMap = namespaceMap;
- }
-
- private void addSchemaNameSpace(XmlSchema schema) {
- String targetNameSpace = schema.getTargetNamespace();
- String prefix = schema.getNamespaceContext().getPrefix(targetNameSpace);
-
- if (namespaceMap == null) {
- namespaceMap = new NamespaceMap();
- }
-
- if (!namespaceMap.values().contains(targetNameSpace)){
- // i.e this target namespace not exists in the namesapce map
- // find a non exists prefix to add this target namesapce
- while ((prefix == null) || namespaceMap.keySet().contains(prefix)){
- prefix = "ns" + nsCount++;
- }
- namespaceMap.put(prefix,targetNameSpace);
- }
-
- }
-
- public Map populateSchemaMappings(){
- // when calling from other than codegen. i.e from deployment
- // engine we don't have to override the absolute http locations.
- return populateSchemaMappings(false);
- }
-
- /**
- * runs the schema mappings if it has not been run previously
- * it is best that this logic be in the axis service since one can
- * call the axis service to populate the schema mappings
- */
- public Map populateSchemaMappings(boolean overrideAbsoluteAddress) {
-
- //populate the axis service with the necessary schema references
- ArrayList schema = this.schemaList;
- Map changedSchemaLocations = null;
- if (!this.schemaLocationsAdjusted) {
- Hashtable nameTable = new Hashtable();
- Hashtable sourceURIToNewLocationMap = new Hashtable();
- //calculate unique names for the schemas
- calculateSchemaNames(schema, nameTable, sourceURIToNewLocationMap, overrideAbsoluteAddress);
- //adjust the schema locations as per the calculated names
- changedSchemaLocations = adjustSchemaNames(schema, nameTable,sourceURIToNewLocationMap);
- //reverse the nametable so that there is a mapping from the
- //name to the schemaObject
- setSchemaMappingTable(swapMappingTable(nameTable));
- setSchemaLocationsAdjusted(true);
- }
- return changedSchemaLocations;
- }
-
-
- /**
- * run 1 -calcualte unique names
- *
- * @param schemas
- */
- private void calculateSchemaNames(List schemas,
- Hashtable nameTable,
- Hashtable sourceURIToNewLocationMap,
- boolean overrideAbsoluteAddress) {
- //first traversal - fill the hashtable
- for (int i = 0; i < schemas.size(); i++) {
- XmlSchema schema = (XmlSchema) schemas.get(i);
- XmlSchemaObjectCollection includes = schema.getIncludes();
-
- for (int j = 0; j < includes.getCount(); j++) {
- Object item = includes.getItem(j);
- XmlSchema s;
- if (item instanceof XmlSchemaExternal) {
- XmlSchemaExternal externalSchema = (XmlSchemaExternal) item;
- s = externalSchema.getSchema();
-
- if (s != null && getSchemaLocationWithDot(sourceURIToNewLocationMap, s) == null) {
- //insert the name into the table
- insertIntoNameTable(nameTable, s, sourceURIToNewLocationMap, overrideAbsoluteAddress);
- //recursively call the same procedure
- calculateSchemaNames(Arrays.asList(new XmlSchema[]{s}),
- nameTable, sourceURIToNewLocationMap, overrideAbsoluteAddress);
- }
- }
- }
- }
- }
-
- /**
- * A quick private sub routine to insert the names
- *
- * @param nameTable
- * @param s
- */
- private void insertIntoNameTable(Hashtable nameTable,
- XmlSchema s,
- Hashtable sourceURIToNewLocationMap,
- boolean overrideAbsoluteAddress) {
- String sourceURI = s.getSourceURI();
- // check whether the sourece uri is an absolute one and are
- // we allowed to override it.
- // if the absolute uri overriding is not allowed the use the
- // original sourceURI as new one
- if (sourceURI.startsWith("http") && !overrideAbsoluteAddress) {
- nameTable.put(s, sourceURI);
- sourceURIToNewLocationMap.put(sourceURI, sourceURI);
- } else {
- String newURI = sourceURI.substring(sourceURI.lastIndexOf('/') + 1);
- if (newURI.endsWith(".xsd")) {
- //remove the .xsd extention
- newURI = newURI.substring(0, newURI.lastIndexOf("."));
- } else {
- newURI = "xsd" + count++;
- }
-
- newURI = customSchemaNameSuffix != null ? newURI + customSchemaNameSuffix : newURI;
- // make it unique
- while (nameTable.containsValue(newURI)) {
- newURI = newURI + count++;
- }
-
- nameTable.put(s, newURI);
- sourceURIToNewLocationMap.put(sourceURI, newURI);
- }
-
- }
-
- /**
- * Run 2 - adjust the names
- */
- private Map adjustSchemaNames(List schemas,
- Hashtable nameTable,
- Hashtable sourceURIToNewLocationMap) {
- Hashtable importedSchemas = new Hashtable();
- //process the schemas in the main schema list
- for (int i = 0; i < schemas.size(); i++) {
- adjustSchemaName((XmlSchema) schemas.get(i),
- nameTable,
- importedSchemas,
- sourceURIToNewLocationMap);
- }
- //process all the rest in the name table
- Enumeration nameTableKeys = nameTable.keys();
- while (nameTableKeys.hasMoreElements()) {
- adjustSchemaName((XmlSchema) nameTableKeys.nextElement(),
- nameTable,
- importedSchemas,
- sourceURIToNewLocationMap);
-
- }
- return importedSchemas;
- }
-
- /**
- * Adjust a single schema
- *
- * @param parentSchema
- * @param nameTable
- */
- private void adjustSchemaName(XmlSchema parentSchema,
- Hashtable nameTable,
- Hashtable importedSchemas,
- Hashtable sourceURIToNewLocationMap) {
- XmlSchemaObjectCollection includes = parentSchema.getIncludes();
- for (int j = 0; j < includes.getCount(); j++) {
- Object item = includes.getItem(j);
- if (item instanceof XmlSchemaExternal) {
- XmlSchemaExternal xmlSchemaExternal = (XmlSchemaExternal) item;
- XmlSchema s = xmlSchemaExternal.getSchema();
- adjustSchemaLocation(s,
- xmlSchemaExternal,
- nameTable,
- importedSchemas,
- sourceURIToNewLocationMap);
- }
- }
-
- }
-
- /**
- * Adjusts a given schema location
- *
- * @param s
- * @param xmlSchemaExternal
- * @param nameTable
- */
- private void adjustSchemaLocation(XmlSchema s,
- XmlSchemaExternal xmlSchemaExternal,
- Hashtable nameTable,
- Hashtable importedSchemas,
- Hashtable sourceURIToNewLocationMap) {
- if (s != null) {
- String schemaLocation = xmlSchemaExternal.getSchemaLocation();
-
- if (schemaLocation.indexOf("://") == -1) {
- String newschemalocation = customSchemaNamePrefix == null ?
- //use the default mode
- (getName() + "?xsd=" + getSchemaLocationWithDot(sourceURIToNewLocationMap, s)) :
[... 3176 lines stripped ...]
---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org