in modules/kernel/src/org/apache/axis2/deployment/ServiceBuilder.java [84:448]
public AxisService populateService(OMElement service_element)
throws DeploymentException {
try {
// Determine whether service should be activated.
String serviceActivate = service_element
.getAttributeValue(new QName(ATTRIBUTE_ACTIVATE));
if (serviceActivate != null) {
if ("true".equals(serviceActivate)) {
service.setActive(true);
} else if ("false".equals(serviceActivate)) {
service.setActive(false);
}
}
// Processing service level parameters
OMAttribute serviceNameatt = service_element
.getAttribute(new QName(ATTRIBUTE_NAME));
// If the service name is explicitly specified in the services.xml
// then use that as the service name
if (serviceNameatt != null) {
if (!"".equals(serviceNameatt.getAttributeValue().trim())) {
AxisService wsdlService = wsdlServiceMap
.get(serviceNameatt.getAttributeValue());
if (wsdlService != null) {
wsdlService.setClassLoader(service.getClassLoader());
wsdlService.setParent(service.getAxisServiceGroup());
service = wsdlService;
service.setWsdlFound(true);
service.setCustomWsdl(true);
}
service.setName(serviceNameatt.getAttributeValue());
// To be on the safe side
if (service.getDocumentation() == null) {
service.setDocumentation(serviceNameatt
.getAttributeValue());
}
}
}
Iterator<OMElement> itr = service_element.getChildrenWithName(new QName(
TAG_PARAMETER));
processParameters(itr, service, service.getParent());
Parameter childFirstClassLoading =
service.getParameter(Constants.Configuration.ENABLE_CHILD_FIRST_CLASS_LOADING);
if (childFirstClassLoading != null) {
ClassLoader cl = service.getClassLoader();
if (cl instanceof DeploymentClassLoader) {
DeploymentClassLoader deploymentClassLoader = (DeploymentClassLoader) cl;
if (JavaUtils.isTrueExplicitly(childFirstClassLoading.getValue())){
deploymentClassLoader.setChildFirstClassLoading(true);
} else if (JavaUtils.isFalseExplicitly(childFirstClassLoading.getValue())){
deploymentClassLoader.setChildFirstClassLoading(false);
}
}
}
// If multiple services in one service group have different values
// for the PARENT_FIRST
// parameter then the final value become the value specified by the
// last service in the group
// Parameter parameter =
// service.getParameter(DeploymentClassLoader.PARENT_FIRST);
// if (parameter !=null && "false".equals(parameter.getValue())) {
// ClassLoader serviceClassLoader = service.getClassLoader();
// ((DeploymentClassLoader)serviceClassLoader).setParentFirst(false);
// }
// process service description
OMElement descriptionElement = service_element
.getFirstChildWithName(new QName(TAG_DESCRIPTION));
if (descriptionElement == null) {
descriptionElement = service_element.getFirstChildWithName(new QName(TAG_DESCRIPTION_ALT));
}
if (descriptionElement != null) {
OMElement descriptionValue = descriptionElement
.getFirstElement();
if (descriptionValue != null) {
service.setDocumentation(descriptionValue);
} else {
service.setDocumentation(descriptionElement.getText());
}
} else {
serviceNameatt = service_element.getAttribute(new QName(
ATTRIBUTE_NAME));
if (serviceNameatt != null) {
if (!"".equals(serviceNameatt.getAttributeValue().trim())
&& service.getDocumentation() == null) {
service.setDocumentation(serviceNameatt
.getAttributeValue());
}
}
}
if (service.getParameter("ServiceClass") == null) {
log.debug("The Service " + service.getName()
+ " does not specify a Service Class");
}
// Process WS-Addressing flag attribute
OMAttribute addressingRequiredatt = service_element
.getAttribute(new QName(ATTRIBUTE_WSADDRESSING));
if (addressingRequiredatt != null) {
String addressingRequiredString = addressingRequiredatt
.getAttributeValue();
AddressingHelper.setAddressingRequirementParemeterValue(
service, addressingRequiredString);
}
// Setting service target namespace if any
OMAttribute targetNameSpace = service_element
.getAttribute(new QName(TARGET_NAME_SPACE));
if (targetNameSpace != null) {
String nameSpeceVale = targetNameSpace.getAttributeValue();
if (nameSpeceVale != null && !"".equals(nameSpeceVale)) {
service.setTargetNamespace(nameSpeceVale);
}
} else {
if (service.getTargetNamespace() == null
|| "".equals(service.getTargetNamespace())) {
service
.setTargetNamespace(Java2WSDLConstants.DEFAULT_TARGET_NAMESPACE);
}
}
// Processing service lifecycle attribute
OMAttribute serviceLifeCycleClass = service_element
.getAttribute(new QName(TAG_CLASS_NAME));
if (serviceLifeCycleClass != null) {
String className = serviceLifeCycleClass.getAttributeValue();
loadServiceLifeCycleClass(className);
}
// Setting schema namespece if any
OMElement schemaElement = service_element
.getFirstChildWithName(new QName(SCHEMA));
if (schemaElement != null) {
OMAttribute schemaNameSpace = schemaElement
.getAttribute(new QName(SCHEMA_NAME_SPACE));
if (schemaNameSpace != null) {
String nameSpeceVale = schemaNameSpace.getAttributeValue();
if (nameSpeceVale != null && !"".equals(nameSpeceVale)) {
service.setSchemaTargetNamespace(nameSpeceVale);
}
}
OMAttribute elementFormDefault = schemaElement
.getAttribute(new QName(SCHEMA_ELEMENT_QUALIFIED));
if (elementFormDefault != null) {
String value = elementFormDefault.getAttributeValue();
if ("true".equals(value)) {
service.setElementFormDefault(true);
} else if ("false".equals(value)) {
service.setElementFormDefault(false);
}
}
// package to namespace mapping. This will be an element that
// maps pkg names to a namespace
// when this is doing AxisService.getSchemaTargetNamespace will
// be overridden
// This will be <mapping/> with @namespace and @package
Iterator<OMElement> mappingIterator = schemaElement
.getChildrenWithName(new QName(MAPPING));
if (mappingIterator != null) {
Map<String,String> pkg2nsMap = new Hashtable<String,String>();
while (mappingIterator.hasNext()) {
OMElement mappingElement = mappingIterator.next();
OMAttribute namespaceAttribute = mappingElement
.getAttribute(new QName(ATTRIBUTE_NAMESPACE));
OMAttribute packageAttribute = mappingElement
.getAttribute(new QName(ATTRIBUTE_PACKAGE));
if (namespaceAttribute != null
&& packageAttribute != null) {
String namespaceAttributeValue = namespaceAttribute
.getAttributeValue();
String packageAttributeValue = packageAttribute
.getAttributeValue();
if (namespaceAttributeValue != null
&& packageAttributeValue != null) {
pkg2nsMap.put(packageAttributeValue.trim(),
namespaceAttributeValue.trim());
} else {
log
.warn("Either value of @namespce or @packagename not available. Thus, generated will be selected.");
}
} else {
log
.warn("Either @namespce or @packagename not available. Thus, generated will be selected.");
}
}
service.setP2nMap(pkg2nsMap);
}
}
// processing Default Message receivers
OMElement messageReceiver = service_element
.getFirstChildWithName(new QName(TAG_MESSAGE_RECEIVERS));
if (messageReceiver != null) {
HashMap<String,MessageReceiver> mrs = processMessageReceivers(service.getClassLoader(),
messageReceiver);
for (Map.Entry<String,MessageReceiver> entry : mrs.entrySet()) {
service.addMessageReceiver(entry.getKey(), entry.getValue());
}
}
// Removing exclude operations
OMElement excludeOperations = service_element
.getFirstChildWithName(new QName(TAG_EXCLUDE_OPERATIONS));
ArrayList<String> excludeops = null;
if (excludeOperations != null) {
excludeops = processExcludeOperations(excludeOperations);
}
if (excludeops == null) {
excludeops = new ArrayList<String>();
}
Utils.addExcludeMethods(excludeops);
// <schema targetNamespace="http://x.y.z"/>
// setting the PolicyInclude
// processing <wsp:Policy> .. </..> elements
Iterator policyElements = PolicyUtil.getPolicyChildren(service_element);
if (policyElements != null && policyElements.hasNext()) {
processPolicyElements(policyElements, service.getPolicySubject());
}
// processing <wsp:PolicyReference> .. </..> elements
Iterator policyRefElements = PolicyUtil.getPolicyRefChildren(service_element);
if (policyRefElements != null && policyRefElements.hasNext()) {
processPolicyRefElements(policyRefElements, service.getPolicySubject());
}
// processing service scope
String sessionScope = service_element.getAttributeValue(new QName(
ATTRIBUTE_SCOPE));
if (sessionScope != null) {
service.setScope(sessionScope);
}
// processing service-wide modules which required to engage globally
Iterator<OMElement> moduleRefs = service_element
.getChildrenWithName(new QName(TAG_MODULE));
processModuleRefs(moduleRefs);
// processing transports
OMElement transports = service_element
.getFirstChildWithName(new QName(TAG_TRANSPORTS));
if (transports != null) {
Iterator<OMElement> transport_itr = transports
.getChildrenWithName(new QName(TAG_TRANSPORT));
ArrayList<String> trs = new ArrayList<String>();
while (transport_itr.hasNext()) {
OMElement trsEle = transport_itr.next();
String transportName = trsEle.getText().trim();
if (axisConfig.getTransportIn(transportName) == null) {
log.warn("Service [ " + service.getName()
+ "] is trying to expose in a transport : "
+ transportName
+ " and which is not available in Axis2");
} else {
trs.add(transportName);
}
}
if(trs.isEmpty()){
throw new AxisFault("Service [" + service.getName()
+ "] is trying expose in tranpsorts: "
+ transports
+ " and which is/are not available in Axis2");
}
service.setExposedTransports(trs);
}
// processing operations
Iterator<OMElement> operationsIterator = service_element
.getChildrenWithName(new QName(TAG_OPERATION));
ArrayList ops = processOperations(operationsIterator);
for (int i = 0; i < ops.size(); i++) {
AxisOperation operationDesc = (AxisOperation) ops.get(i);
ArrayList wsamappings = operationDesc.getWSAMappingList();
if (wsamappings == null) {
continue;
}
if (service.getOperation(operationDesc.getName()) == null) {
service.addOperation(operationDesc);
}
for (int j = 0; j < wsamappings.size(); j++) {
String mapping = (String) wsamappings.get(j);
if (mapping.length() > 0) {
service.mapActionToOperation(mapping, operationDesc);
}
}
}
String objectSupplierValue = (String) service
.getParameterValue(TAG_OBJECT_SUPPLIER);
if (objectSupplierValue != null) {
loadObjectSupplierClass(objectSupplierValue);
}
// Set the default message receiver for the operations that were
// not listed in the services.xml
setDefaultMessageReceivers();
Utils.processBeanPropertyExclude(service);
if (!service.isUseUserWSDL()) {
// Generating schema for the service if the impl class is Java
if (!service.isWsdlFound()) {
// trying to generate WSDL for the service using JAM and
// Java reflection
try {
if (generateWsdl(service)) {
Utils.fillAxisService(service, axisConfig,
excludeops, null);
} else {
ArrayList nonRpcOperations = getNonRPCMethods(service);
Utils.fillAxisService(service, axisConfig,
excludeops, nonRpcOperations);
}
} catch (Exception e) {
throw new DeploymentException(Messages.getMessage(
"errorinschemagen", e.getMessage()), e);
}
}
}
if (service.isCustomWsdl()) {
OMElement mappingElement = service_element
.getFirstChildWithName(new QName(TAG_PACKAGE2QNAME));
if (mappingElement != null) {
processTypeMappings(mappingElement);
}
}
for (String opName : excludeops) {
service.removeOperation(new QName(opName));
service.addExcludeOperationName(opName);
}
// Need to call the same logic towice
setDefaultMessageReceivers();
Iterator<OMElement> moduleConfigs = service_element
.getChildrenWithName(new QName(TAG_MODULE_CONFIG));
processServiceModuleConfig(moduleConfigs, service, service);
// Loading Data Locator(s) configured
OMElement dataLocatorElement = service_element
.getFirstChildWithName(new QName(
DRConstants.DATA_LOCATOR_ELEMENT));
if (dataLocatorElement != null) {
processDataLocatorConfig(dataLocatorElement, service);
}
processEndpoints(service);
processPolicyAttachments(service_element, service);
} catch (AxisFault axisFault) {
throw new DeploymentException(axisFault);
}
startupServiceLifecycle();
return service;
}