servicebuilder.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 833 行 · 第 1/3 页
JAVA
833 行
}
return exOps;
}
private void processMessages(Iterator messages, AxisOperation operation)
throws DeploymentException {
while (messages.hasNext()) {
OMElement messageElement = (OMElement) messages.next();
OMAttribute label = messageElement.getAttribute(new QName(TAG_LABEL));
if (label == null) {
throw new DeploymentException(Messages.getMessage("messagelabelcannotfound"));
}
AxisMessage message = operation.getMessage(label.getAttributeValue());
Iterator parameters = messageElement.getChildrenWithName(new QName(TAG_PARAMETER));
// processing <wsp:Policy> .. </..> elements
Iterator policyElements =
messageElement.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY));
if (policyElements != null) {
processPolicyElements(PolicyInclude.AXIS_MESSAGE_POLICY, policyElements,
message.getPolicyInclude());
}
// processing <wsp:PolicyReference> .. </..> elements
Iterator policyRefElements =
messageElement.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY_REF));
if (policyRefElements != null) {
processPolicyRefElements(PolicyInclude.AXIS_MESSAGE_POLICY, policyRefElements,
message.getPolicyInclude());
}
processParameters(parameters, message, operation);
}
}
/**
* Gets the list of modules that is required to be engaged globally.
*
* @param moduleRefs <code>java.util.Iterator</code>
* @throws DeploymentException <code>DeploymentException</code>
*/
protected void processModuleRefs(Iterator moduleRefs) throws DeploymentException {
try {
while (moduleRefs.hasNext()) {
OMElement moduleref = (OMElement) moduleRefs.next();
OMAttribute moduleRefAttribute = moduleref.getAttribute(new QName(TAG_REFERENCE));
if (moduleRefAttribute != null) {
String refName = moduleRefAttribute.getAttributeValue();
if (axisConfig.getModule(refName) == null) {
throw new DeploymentException(
Messages.getMessage(DeploymentErrorMsgs.MODULE_NOT_FOUND, refName));
} else {
service.addModuleref(refName);
}
}
}
} catch (AxisFault axisFault) {
throw new DeploymentException(axisFault);
}
}
protected void processOperationModuleConfig(Iterator moduleConfigs, ParameterInclude parent,
AxisOperation operation)
throws DeploymentException {
while (moduleConfigs.hasNext()) {
OMElement moduleConfig = (OMElement) moduleConfigs.next();
OMAttribute moduleName_att = moduleConfig.getAttribute(new QName(ATTRIBUTE_NAME));
if (moduleName_att == null) {
throw new DeploymentException(
Messages.getMessage(DeploymentErrorMsgs.INVALID_MODULE_CONFIG));
} else {
String module = moduleName_att.getAttributeValue();
ModuleConfiguration moduleConfiguration =
new ModuleConfiguration(module, parent);
Iterator parameters = moduleConfig.getChildrenWithName(new QName(TAG_PARAMETER));
processParameters(parameters, moduleConfiguration, parent);
operation.addModuleConfig(moduleConfiguration);
}
}
}
private ArrayList processOperations(Iterator operationsIterator) throws AxisFault {
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")));
}
// setting the MEP of the operation
OMAttribute op_mep_att = operation.getAttribute(new QName(TAG_MEP));
String mepurl = null;
if (op_mep_att != null) {
mepurl = op_mep_att.getAttributeValue();
}
String opname = op_name_att.getAttributeValue();
AxisOperation op_descrip;
op_descrip = service.getOperation(new QName(opname));
if(op_descrip==null){
op_descrip = service.getOperation(new QName(service.getTargetNamespace(),opname));
}
if (op_descrip == null) {
if (mepurl == null) {
// assumed MEP is in-out
op_descrip = new InOutAxisOperation();
op_descrip.setParent(service);
} else {
op_descrip = AxisOperationFactory.getOperationDescription(mepurl);
}
op_descrip.setName(new QName(opname));
String MEP = op_descrip.getMessageExchangePattern();
if (WSDL2Constants.MEP_URI_IN_ONLY.equals(MEP) ||
WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) ||
WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) ||
WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) ||
WSDL2Constants.MEP_URI_ROBUST_IN_ONLY.equals(MEP) ||
WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) {
AxisMessage inaxisMessage = op_descrip
.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
if (inaxisMessage != null) {
inaxisMessage.setName(opname + Java2WSDLConstants.MESSAGE_SUFFIX);
}
}
if (WSDL2Constants.MEP_URI_OUT_ONLY.equals(MEP) ||
WSDL2Constants.MEP_URI_OUT_OPTIONAL_IN.equals(MEP) ||
WSDL2Constants.MEP_URI_IN_OPTIONAL_OUT.equals(MEP) ||
WSDL2Constants.MEP_URI_ROBUST_OUT_ONLY.equals(MEP) ||
WSDL2Constants.MEP_URI_IN_OUT.equals(MEP)) {
AxisMessage outAxisMessage = op_descrip
.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
if (outAxisMessage != null) {
outAxisMessage.setName(opname + Java2WSDLConstants.RESPONSE);
}
}
}
// setting the PolicyInclude
// processing <wsp:Policy> .. </..> elements
Iterator policyElements =
operation.getChildrenWithName(new QName(POLICY_NS_URI, TAG_POLICY));
if (policyElements != null && policyElements.hasNext()) {
processPolicyElements(PolicyInclude.AXIS_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 && policyRefElements.hasNext()) {
processPolicyRefElements(PolicyInclude.AXIS_OPERATION_POLICY, policyRefElements,
op_descrip.getPolicyInclude());
}
// Operation Parameters
Iterator parameters = operation.getChildrenWithName(new QName(TAG_PARAMETER));
processParameters(parameters, op_descrip, service);
//To process wsamapping;
processActionMappings(operation, op_descrip);
// loading the message receivers
OMElement receiverElement =
operation.getFirstChildWithName(new QName(TAG_MESSAGE_RECEIVER));
if (receiverElement != null) {
MessageReceiver messageReceiver = loadMessageReceiver(service.getClassLoader(),
receiverElement);
op_descrip.setMessageReceiver(messageReceiver);
} else {
// setting default message receiver
MessageReceiver msgReceiver = loadDefaultMessageReceiver(
op_descrip.getMessageExchangePattern()
, service);
op_descrip.setMessageReceiver(msgReceiver);
}
// Process Module Refs
Iterator modules = operation.getChildrenWithName(new QName(TAG_MODULE));
processOperationModuleRefs(modules, op_descrip);
// processing Messages
Iterator messages = operation.getChildrenWithName(new QName(TAG_MESSAGE));
processMessages(messages, op_descrip);
// setting Operation phase
if (axisConfig != null) {
PhasesInfo info = axisConfig.getPhasesInfo();
info.setOperationPhases(op_descrip);
}
Iterator moduleConfigs = operation.getChildrenWithName(new QName(TAG_MODULE_CONFIG));
processOperationModuleConfig(moduleConfigs, op_descrip, op_descrip);
// adding the operation
operations.add(op_descrip);
}
return operations;
}
protected void processServiceModuleConfig(Iterator moduleConfigs, ParameterInclude parent,
AxisService service)
throws DeploymentException {
while (moduleConfigs.hasNext()) {
OMElement moduleConfig = (OMElement) moduleConfigs.next();
OMAttribute moduleName_att = moduleConfig.getAttribute(new QName(ATTRIBUTE_NAME));
if (moduleName_att == null) {
throw new DeploymentException(
Messages.getMessage(DeploymentErrorMsgs.INVALID_MODULE_CONFIG));
} else {
String module = moduleName_att.getAttributeValue();
ModuleConfiguration moduleConfiguration =
new ModuleConfiguration(module, parent);
Iterator parameters = moduleConfig.getChildrenWithName(new QName(TAG_PARAMETER));
processParameters(parameters, moduleConfiguration, parent);
service.addModuleConfig(moduleConfiguration);
}
}
}
/*
* process data locator configuration for data retrieval.
*/
private void processDataLocatorConfig(OMElement dataLocatorElement, AxisService service) {
OMAttribute serviceOverallDataLocatorclass =
dataLocatorElement.getAttribute(new QName(DRConstants.CLASS_ATTRIBUTE));
if (serviceOverallDataLocatorclass != null) {
String className = serviceOverallDataLocatorclass.getAttributeValue();
service.addDataLocatorClassNames(DRConstants.SERVICE_LEVEL, className);
}
Iterator iterator = dataLocatorElement
.getChildrenWithName(new QName(DRConstants.DIALECT_LOCATOR_ELEMENT));
while (iterator.hasNext()) {
OMElement locatorElement = (OMElement) iterator.next();
OMAttribute dialect =
locatorElement.getAttribute(new QName(DRConstants.DIALECT_ATTRIBUTE));
OMAttribute dialectclass =
locatorElement.getAttribute(new QName(DRConstants.CLASS_ATTRIBUTE));
service.addDataLocatorClassNames(dialect.getAttributeValue(),
dialectclass.getAttributeValue());
}
}
public void setWsdlServiceMap(HashMap wsdlServiceMap) {
this.wsdlServiceMap = wsdlServiceMap;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?