cemitter.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 676 行 · 第 1/2 页
JAVA
676 行
/**
* Loads the operations
*
* @param doc
* @param rootElement
* @param mep
* @return operations found
*/
protected boolean loadOperations(Document doc, Element rootElement, String mep) {
Element methodElement;
String portTypeName = makeCClassName(axisService.getName());
Iterator operations = axisService.getOperations();
boolean opsFound = false;
while (operations.hasNext()) {
AxisOperation axisOperation = (AxisOperation)operations.next();
// populate info holder with mep information. This will used in determining which
// message receiver to use, etc.,
String messageExchangePattern = axisOperation.getMessageExchangePattern();
if (infoHolder.get(messageExchangePattern) == null) {
infoHolder.put(messageExchangePattern, Boolean.TRUE);
}
if (mep == null) {
opsFound = true;
List soapHeaderInputParameterList = new ArrayList();
List soapHeaderOutputParameterList = new ArrayList();
methodElement = doc.createElement("method");
String localPart = axisOperation.getName().getLocalPart();
String opCName = makeCClassName(localPart);
String opNS = axisOperation.getName().getNamespaceURI();
addAttribute(doc, "name", opCName, methodElement);
addAttribute(doc, "localpart", localPart, methodElement);
addAttribute(doc, "qname", localPart + "|" + opNS, methodElement);
addAttribute(doc, "namespace", opNS, methodElement);
String style = axisOperation.getStyle();
addAttribute(doc, "style", style, methodElement);
addAttribute(doc, "dbsupportname",
portTypeName + localPart + DATABINDING_SUPPORTER_NAME_SUFFIX,
methodElement);
addAttribute(doc, "mep", Utils.getAxisSpecifMEPConstant(
axisOperation.getMessageExchangePattern()) + "", methodElement);
addAttribute(doc, "mepURI", axisOperation.getMessageExchangePattern(),
methodElement);
addSOAPAction(doc, methodElement, axisOperation.getName());
//add header ops for input
addHeaderOperations(soapHeaderInputParameterList, axisOperation, true);
//add header ops for output
addHeaderOperations(soapHeaderOutputParameterList, axisOperation, false);
PolicyInclude policyInclude = axisOperation.getPolicyInclude();
Policy policy = policyInclude.getPolicy();
if (policy != null) {
try {
addAttribute(doc, "policy", PolicyUtil.policyComponentToString(policy),
methodElement);
} catch (Exception ex) {
throw new RuntimeException("can't serialize the policy to a String ", ex);
}
}
methodElement.appendChild(
getInputElement(doc, axisOperation, soapHeaderInputParameterList));
methodElement.appendChild(
getOutputElement(doc, axisOperation, soapHeaderOutputParameterList));
methodElement.appendChild(getFaultElement(doc, axisOperation));
rootElement.appendChild(methodElement);
} else {
//mep is present - we move ahead only if the given mep matches the mep of this operation
if (mep.equals(axisOperation.getMessageExchangePattern())) {
//at this point we know it's true
opsFound = true;
List soapHeaderInputParameterList = new ArrayList();
List soapHeaderOutputParameterList = new ArrayList();
List soapHeaderFaultParameterList = new ArrayList();
methodElement = doc.createElement("method");
String localPart = axisOperation.getName().getLocalPart();
String opCName = makeCClassName(localPart);
String opNS = axisOperation.getName().getNamespaceURI();
addAttribute(doc, "name", opCName, methodElement);
addAttribute(doc, "localpart", localPart, methodElement);
addAttribute(doc, "qname", localPart + "|" + opNS, methodElement);
addAttribute(doc, "namespace", axisOperation.getName().getNamespaceURI(),
methodElement);
addAttribute(doc, "style", axisOperation.getStyle(), methodElement);
addAttribute(doc, "dbsupportname",
portTypeName + localPart + DATABINDING_SUPPORTER_NAME_SUFFIX,
methodElement);
addAttribute(doc, "mep", Utils.getAxisSpecifMEPConstant(
axisOperation.getMessageExchangePattern()) + "", methodElement);
addAttribute(doc, "mepURI", axisOperation.getMessageExchangePattern(),
methodElement);
addSOAPAction(doc, methodElement, axisOperation.getName());
addHeaderOperations(soapHeaderInputParameterList, axisOperation, true);
addHeaderOperations(soapHeaderOutputParameterList, axisOperation, false);
/*
* Setting the policy of the operation
*/
Policy policy = axisOperation.getPolicyInclude().getPolicy();
if (policy != null) {
try {
addAttribute(doc, "policy",
PolicyUtil.policyComponentToString(policy),
methodElement);
} catch (Exception ex) {
throw new RuntimeException("can't serialize the policy to a String",
ex);
}
}
methodElement.appendChild(getInputElement(doc,
axisOperation,
soapHeaderInputParameterList));
methodElement.appendChild(getOutputElement(doc,
axisOperation,
soapHeaderOutputParameterList));
methodElement.appendChild(getFaultElement(doc,
axisOperation));
rootElement.appendChild(methodElement);
//////////////////////
}
}
}
return opsFound;
}
/**
* A convenient method for the generating the parameter element
*
* @param doc
* @param paramName
* @param paramType
* @param opName
* @param paramName
*/
protected Element generateParamComponent(Document doc,
String paramName,
String paramType,
QName opName,
String partName,
boolean isPrimitive) {
Element paramElement = doc.createElement("param");
//return paramElement;/*
addAttribute(doc, "name",
paramName, paramElement);
String typeMappingStr = (paramType == null)
? ""
: paramType;
if (JAVA_DEFAULT_TYPE.equals(typeMappingStr)) {
typeMappingStr = C_DEFAULT_TYPE;
}
addAttribute(doc, "type", typeMappingStr, paramElement);
addAttribute(doc, "caps-type", typeMappingStr.toUpperCase(), paramElement);
//adds the short type
addShortType(paramElement, paramType);
// add an extra attribute to say whether the type mapping is the default
if (mapper.getDefaultMappingName().equals(paramType)) {
addAttribute(doc, "default", "yes", paramElement);
}
addAttribute(doc, "value", getParamInitializer(paramType), paramElement);
// add this as a body parameter
addAttribute(doc, "location", "body", paramElement);
//if the opName and partName are present , add them
if (opName != null) {
addAttribute(doc, "opname", opName.getLocalPart(), paramElement);
}
if (partName != null) {
addAttribute(doc, "partname",
JavaUtils.capitalizeFirstChar(partName),
paramElement);
}
if (isPrimitive) {
addAttribute(doc, "primitive", "yes", paramElement);
}
// the following methods are moved from addOurs functioin
Map typeMap = CTypeInfo.getTypeMap();
Iterator it = typeMap.keySet().iterator();
boolean isOurs = true;
while (it.hasNext()) {
if (it.next().equals(typeMappingStr)) {
isOurs = false;
break;
}
}
if (isOurs && typeMappingStr.length() != 0 && !typeMappingStr.equals("void") &&
!typeMappingStr.equals(C_DEFAULT_TYPE)) {
addAttribute(doc, "ours", "yes", paramElement);
} else {
isOurs = false;
}
if (isOurs) {
typeMappingStr = C_OUR_TYPE_PREFIX + typeMappingStr + C_OUR_TYPE_SUFFIX;
}
addAttribute(doc, "axis2-type", typeMappingStr, paramElement);
addAttribute(doc, "axis2-caps-type", typeMappingStr.toUpperCase(), paramElement);
return paramElement; //*/
}
/**
* @param doc
* @param operation
* @param param
*/
protected void addCSpecifcAttributes(Document doc, AxisOperation operation, Element param,
String messageType) {
String typeMappingStr;
Map typeMap = CTypeInfo.getTypeMap();
Iterator typeMapIterator = typeMap.keySet().iterator();
AxisMessage message;
if (messageType.equals(WSDLConstants.MESSAGE_LABEL_IN_VALUE))
message = operation.getMessage(WSDLConstants.MESSAGE_LABEL_IN_VALUE);
else
message = operation.getMessage(WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
QName typeMapping = message.getElementQName();
String paramType = this.mapper.getTypeMappingName(message.getElementQName());
if (doc == null || paramType == null || param == null) {
return;
}
if (message != null) {
String type = this.mapper.getTypeMappingName(message.getElementQName());
typeMappingStr = (type == null)
? ""
: type;
} else {
typeMappingStr = "";
}
addAttribute(doc, "caps-type", paramType.toUpperCase(), param);
boolean isOurs = true;
while (typeMapIterator.hasNext()) {
if (typeMapIterator.next().equals(typeMapping)) {
isOurs = false;
break;
}
}
if (isOurs && !paramType.equals("") && !paramType.equals("void") &&
!paramType.equals("org.apache.axiom.om.OMElement") &&
!typeMappingStr.equals(C_DEFAULT_TYPE)) {
addAttribute(doc, "ours", "yes", param);
}
}
/**
* @param doc
* @param operation
* @return Returns the parameter element.
*/
protected Element[] getInputParamElement(Document doc, AxisOperation operation) {
Element[] param = super.getInputParamElement(doc, operation);
for (int i = 0; i < param.length; i++) {
addCSpecifcAttributes(doc, operation, param[i], WSDLConstants.MESSAGE_LABEL_IN_VALUE);
}
return param;
}
/**
* @param doc
* @param operation
* @return Returns Element.
*/
protected Element getOutputParamElement(Document doc, AxisOperation operation) {
Element param = super.getOutputParamElement(doc, operation);
addCSpecifcAttributes(doc, operation, param, WSDLConstants.MESSAGE_LABEL_OUT_VALUE);
return param;
}
/**
* Gets the output directory for source files.
*
* @param outputDir
* @return Returns File.
*/
protected File getOutputDirectory(File outputDir, String dir2) {
if (dir2 != null && !"".equals(dir2)) {
if (outputDir.getName().equals(".")) {
outputDir = new File(outputDir, dir2);
}
}
if (!outputDir.exists()) {
outputDir.mkdirs();
}
return outputDir;
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?