|
Axis 2 example source code file (ModuleBuilder.java)
The Axis 2 ModuleBuilder.java source code/* * 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.axis2.deployment; import org.apache.axiom.om.OMAttribute; import org.apache.axiom.om.OMElement; import org.apache.axis2.AxisFault; import org.apache.axis2.deployment.util.PhasesInfo; import org.apache.axis2.description.AxisModule; import org.apache.axis2.description.AxisOperation; import org.apache.axis2.description.AxisOperationFactory; import org.apache.axis2.description.InOnlyAxisOperation; import org.apache.axis2.description.PolicyInclude; import org.apache.axis2.engine.AxisConfiguration; import org.apache.axis2.engine.MessageReceiver; import org.apache.axis2.i18n.Messages; import org.apache.axis2.java.security.AccessController; import org.apache.axis2.modules.Module; import org.apache.axis2.util.Loader; import javax.xml.namespace.QName; import javax.xml.stream.XMLStreamException; import java.io.InputStream; import java.io.StringWriter; import java.security.PrivilegedActionException; import java.security.PrivilegedExceptionAction; import java.util.ArrayList; import java.util.Iterator; /** * Builds a module description from OM */ public class ModuleBuilder extends DescriptionBuilder { private AxisModule module; public ModuleBuilder(InputStream serviceInputStream, AxisModule module, AxisConfiguration axisConfig) { super(serviceInputStream, axisConfig); this.module = module; } private void loadModuleClass(AxisModule module, String moduleClassName) throws DeploymentException { Class moduleClass; try { if ((moduleClassName != null) && !"".equals(moduleClassName)) { moduleClass = Loader.loadClass(module.getModuleClassLoader(), moduleClassName); final Class fmoduleClass = moduleClass; final AxisModule fmodule = module; try { AccessController.doPrivileged(new PrivilegedExceptionAction() { public Object run() throws IllegalAccessException, InstantiationException { Module new_module = (Module) fmoduleClass.newInstance(); fmodule.setModule(new_module); return null; } }); } catch (PrivilegedActionException e) { throw e.getException(); } } } catch (Exception e) { throw new DeploymentException(e.getMessage(), e); } } public void populateModule() throws DeploymentException { try { OMElement moduleElement = buildOM(); // Setting Module Class , if it is there OMAttribute moduleClassAtt = moduleElement.getAttribute(new QName(TAG_CLASS_NAME)); if (moduleClassAtt != null) { String moduleClass = moduleClassAtt.getAttributeValue(); if ((moduleClass != null) && !"".equals(moduleClass)) { loadModuleClass(module, moduleClass); } } // Get our name and version. If this is NOT present, we'll try to figure it out // from the file name (e.g. "addressing-1.0.mar"). If the attribute is there, we // always respect it. //TODO: Need to check whether ths name is getting overridden by the file name of the MAR OMAttribute nameAtt = moduleElement.getAttribute(new QName("name")); if (nameAtt != null) { String moduleName = nameAtt.getAttributeValue(); if (moduleName != null && !"".equals(moduleName)){ module.setName(moduleName); } } // Process service description OMElement descriptionElement = moduleElement.getFirstChildWithName(new QName(TAG_DESCRIPTION)); if (descriptionElement != null) { OMElement descriptionValue = descriptionElement.getFirstElement(); if (descriptionValue != null) { StringWriter writer = new StringWriter(); descriptionValue.build(); descriptionValue.serialize(writer); writer.flush(); module.setModuleDescription(writer.toString()); } else { module.setModuleDescription(descriptionElement.getText()); } } else { module.setModuleDescription("module description not found"); } // setting the PolicyInclude // processing <wsp:Policy> .. elements Iterator policyElements = moduleElement.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY)); if (policyElements != null && policyElements.hasNext()) { processPolicyElements(PolicyInclude.AXIS_MODULE_POLICY, policyElements, module.getPolicyInclude()); } // processing <wsp:PolicyReference> .. elements Iterator policyRefElements = moduleElement.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY_REF)); if (policyRefElements != null && policyElements.hasNext()) { processPolicyRefElements(PolicyInclude.AXIS_MODULE_POLICY, policyRefElements, module.getPolicyInclude()); } // processing Parameters // Processing service level parameters Iterator itr = moduleElement.getChildrenWithName(new QName(TAG_PARAMETER)); processParameters(itr, module, module.getParent()); // process INFLOW OMElement inFlow = moduleElement.getFirstChildWithName(new QName(TAG_FLOW_IN)); if (inFlow != null) { module.setInFlow(processFlow(inFlow, module)); } OMElement outFlow = moduleElement.getFirstChildWithName(new QName(TAG_FLOW_OUT)); if (outFlow != null) { module.setOutFlow(processFlow(outFlow, module)); } OMElement inFaultFlow = moduleElement.getFirstChildWithName(new QName(TAG_FLOW_IN_FAULT)); if (inFaultFlow != null) { module.setFaultInFlow(processFlow(inFaultFlow, module)); } OMElement outFaultFlow = moduleElement.getFirstChildWithName(new QName(TAG_FLOW_OUT_FAULT)); if (outFaultFlow != null) { module.setFaultOutFlow(processFlow(outFaultFlow, module)); } OMElement supportedPolicyNamespaces = moduleElement.getFirstChildWithName(new QName(TAG_SUPPORTED_POLICY_NAMESPACES)); if (supportedPolicyNamespaces != null) { module.setSupportedPolicyNamespaces( processSupportedPolicyNamespaces(supportedPolicyNamespaces)); } /* * Module description should contain a list of QName of the assertions that are local to the system. * These assertions are not exposed to the outside. */ OMElement localPolicyAssertionElement = moduleElement.getFirstChildWithName(new QName("local-policy-assertions")); if (localPolicyAssertionElement != null) { module.setLocalPolicyAssertions( getLocalPolicyAssertionNames(localPolicyAssertionElement)); } // processing Operations Iterator op_itr = moduleElement.getChildrenWithName(new QName(TAG_OPERATION)); ArrayList operations = processOperations(op_itr); for (int i = 0; i < operations.size(); i++) { AxisOperation operation = (AxisOperation) operations.get(i); module.addOperation(operation); } } catch (XMLStreamException e) { throw new DeploymentException(e); } } private ArrayList processOperations(Iterator operationsIterator) throws DeploymentException { ArrayList operations = new ArrayList(); while (operationsIterator.hasNext()) { OMElement operation = (OMElement) operationsIterator.next(); //getting operation name OMAttribute op_name_att = operation.getAttribute(new QName(ATTRIBUTE_NAME)); if (op_name_att == null) { throw new DeploymentException( Messages.getMessage( Messages.getMessage( DeploymentErrorMsgs.INVALID_OP, "operation name missing"))); } OMAttribute op_mep_att = operation.getAttribute(new QName(TAG_MEP)); String mepURL = null; AxisOperation op_descrip; if (op_mep_att != null) { mepURL = op_mep_att.getAttributeValue(); } if (mepURL == null) { // assuming in-out MEP op_descrip = new InOnlyAxisOperation(); } else { try { op_descrip = AxisOperationFactory.getOperationDescription(mepURL); } catch (AxisFault axisFault) { throw new DeploymentException( Messages.getMessage( Messages.getMessage( DeploymentErrorMsgs.OPERATION_PROCESS_ERROR, axisFault.getMessage()))); } } String opname = op_name_att.getAttributeValue(); op_descrip.setName(new QName(opname)); // Operation Parameters Iterator parameters = operation.getChildrenWithName(new QName(TAG_PARAMETER)); processParameters(parameters, op_descrip, module); //To process wsamapping; processActionMappings(operation, op_descrip); // setting the MEP of the operation // loading the message receivers OMElement receiverElement = operation.getFirstChildWithName(new QName(TAG_MESSAGE_RECEIVER)); if (receiverElement != null) { MessageReceiver messageReceiver = loadMessageReceiver(module.getModuleClassLoader(), receiverElement); op_descrip.setMessageReceiver(messageReceiver); } else { // setting default message receiver MessageReceiver msgReceiver = loadDefaultMessageReceiver(mepURL, null); op_descrip.setMessageReceiver(msgReceiver); } // Process Module Refs Iterator modules = operation.getChildrenWithName(new QName(TAG_MODULE)); processOperationModuleRefs(modules, op_descrip); // processing <wsp:Policy> .. elements Iterator policyElements = operation.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY)); if (policyElements != null && policyElements.hasNext()) { processPolicyElements(PolicyInclude.AXIS_MODULE_OPERATION_POLICY, policyElements, op_descrip.getPolicyInclude()); } // processing <wsp:PolicyReference> .. elements Iterator policyRefElements = operation.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY_REF)); if (policyRefElements != null && policyElements.hasNext()) { processPolicyRefElements(PolicyInclude.AXIS_MODULE_OPERATION_POLICY, policyRefElements, module.getPolicyInclude()); } // setting Operation phase PhasesInfo info = axisConfig.getPhasesInfo(); try { info.setOperationPhases(op_descrip); } catch (AxisFault axisFault) { throw new DeploymentException(axisFault); } // adding the operation operations.add(op_descrip); } return operations; } } Other Axis 2 examples (source code examples)Here is a short list of links related to this Axis 2 ModuleBuilder.java source code file: |
... this post is sponsored by my books ... | |
#1 New Release! |
FP Best Seller |
Copyright 1998-2024 Alvin Alexander, alvinalexander.com
All Rights Reserved.
A percentage of advertising revenue from
pages under the /java/jwarehouse
URI on this website is
paid back to open source projects.