📄 javastubwriter.java
字号:
* @param opStyle * @param oneway * @param opIndex */ protected void writeOperation(PrintWriter pw, BindingOperation operation, Parameters parms, String soapAction, String opStyle, boolean oneway, int opIndex) { writeComment(pw, operation.getDocumentationElement(), true); if (parms.signature == null) { return; } pw.println(parms.signature + " {"); pw.println(" if (super.cachedEndpoint == null) {"); pw.println( " throw new org.apache.axis.NoEndPointException();"); pw.println(" }"); pw.println(" org.apache.axis.client.Call _call = createCall();"); pw.println(" _call.setOperation(_operations[" + opIndex + "]);"); // SoapAction if (soapAction != null) { pw.println(" _call.setUseSOAPAction(true);"); pw.println(" _call.setSOAPActionURI(\"" + soapAction + "\");"); } boolean hasMIME = Utils.hasMIME(bEntry, operation); // Encoding: literal or encoded use. Use use = bEntry.getInputBodyType(operation.getOperation()); if (use == Use.LITERAL) { // Turn off encoding pw.println(" _call.setEncodingStyle(null);"); // turn off XSI types pw.println( " _call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE);"); } if (hasMIME || (use == Use.LITERAL)) { // If it is literal, turn off multirefs. // // If there are any MIME types, turn off multirefs. // I don't know enough about the guts to know why // attachments don't work with multirefs, but they don't. pw.println( " _call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE);"); } Style style = Style.getStyle(opStyle, bEntry.getBindingStyle()); if ((style == Style.DOCUMENT) && symbolTable.isWrapped()) { style = Style.WRAPPED; } Iterator iterator = bEntry.getBinding().getExtensibilityElements().iterator(); while (iterator.hasNext()) { Object obj = iterator.next(); if (obj instanceof SOAPBinding) { pw.println( " _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS);"); } else if (obj instanceof UnknownExtensibilityElement) { // TODO: After WSDL4J supports soap12, change this code UnknownExtensibilityElement unkElement = (UnknownExtensibilityElement) obj; QName name = unkElement.getElementType(); if (name.getNamespaceURI().equals(Constants.URI_WSDL12_SOAP) && name.getLocalPart().equals("binding")) { pw.println( " _call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP12_CONSTANTS);"); } } } // Operation name if (style == Style.WRAPPED) { // We need to make sure the operation name, which is what we // wrap the elements in, matches the Qname of the parameter // element. Map partsMap = operation.getOperation().getInput().getMessage().getParts(); Iterator i = partsMap.values().iterator(); QName q = null; while (q == null && i.hasNext()) { Part p = (Part) i.next(); q = p.getElementName(); } if(q != null) { pw.println(" _call.setOperationName(" + Utils.getNewQName(q) + ");"); } else { log.warn(Messages.getMessage("missingPartsForMessage00",operation.getOperation().getInput().getMessage().getQName().toString())); } } else { QName elementQName = Utils.getOperationQName(operation, bEntry, symbolTable); if (elementQName != null) { pw.println(" _call.setOperationName(" + Utils.getNewQName(elementQName) + ");"); } } pw.println(); // Set the headers pw.println(" setRequestHeaders(_call);"); // Set the attachments pw.println(" setAttachments(_call);"); // Set DIME flag if needed if (bEntry.isOperationDIME(operation.getOperation().getName())) { pw.println( " _call.setProperty(_call.ATTACHMENT_ENCAPSULATION_FORMAT, _call.ATTACHMENT_ENCAPSULATION_FORMAT_DIME);"); } // Invoke the operation if (oneway) { pw.print(" _call.invokeOneWay("); } else { pw.print(" try {"); pw.print(" java.lang.Object _resp = _call.invoke("); } pw.print("new java.lang.Object[] {"); writeParameters(pw, parms); pw.println("});"); pw.println(); if (!oneway) { writeResponseHandling(pw, parms); } pw.println(" }"); pw.println(); } // writeOperation /** * Method writeParameters * * @param pw * @param parms */ protected void writeParameters(PrintWriter pw, Parameters parms) { // Write the input and inout parameter list boolean needComma = false; for (int i = 0; i < parms.list.size(); ++i) { Parameter p = (Parameter) parms.list.get(i); if (p.getMode() != Parameter.OUT) { if (needComma) { pw.print(", "); } else { needComma = true; } String javifiedName = Utils.xmlNameToJava(p.getName()); if (p.getMode() != Parameter.IN) { javifiedName += ".value"; } if (p.getMIMEInfo() == null && !p.isOmittable()) { javifiedName = Utils.wrapPrimitiveType(p.getType(), javifiedName); } pw.print(javifiedName); } } } // writeParamters /** * Method writeResponseHandling * * @param pw * @param parms */ protected void writeResponseHandling(PrintWriter pw, Parameters parms) { pw.println(" if (_resp instanceof java.rmi.RemoteException) {"); pw.println(" throw (java.rmi.RemoteException)_resp;"); pw.println(" }"); int allOuts = parms.outputs + parms.inouts; if (allOuts > 0) { pw.println(" else {"); pw.println(" extractAttachments(_call);"); if (allOuts == 1) { if (parms.returnParam != null) { writeOutputAssign(pw, "return ", parms.returnParam, "_resp"); } else { // The resp object must go into a holder int i = 0; Parameter p = (Parameter) parms.list.get(i); while (p.getMode() == Parameter.IN) { p = (Parameter) parms.list.get(++i); } String javifiedName = Utils.xmlNameToJava(p.getName()); String qnameName = Utils.getNewQNameWithLastLocalPart(p.getQName()); pw.println(" java.util.Map _output;"); pw.println( " _output = _call.getOutputParams();"); writeOutputAssign(pw, javifiedName + ".value = ", p, "_output.get(" + qnameName + ")"); } } else { // There is more than 1 output. Get the outputs from getOutputParams. pw.println(" java.util.Map _output;"); pw.println(" _output = _call.getOutputParams();"); for (int i = 0; i < parms.list.size(); ++i) { Parameter p = (Parameter) parms.list.get(i); String javifiedName = Utils.xmlNameToJava(p.getName()); String qnameName = Utils.getNewQNameWithLastLocalPart(p.getQName()); if (p.getMode() != Parameter.IN) { writeOutputAssign(pw, javifiedName + ".value = ", p, "_output.get(" + qnameName + ")"); } } if (parms.returnParam != null) { writeOutputAssign(pw, "return ", parms.returnParam, "_resp"); } } pw.println(" }"); } else { pw.println(" extractAttachments(_call);"); } // End catch // Get faults Map faults = parms.faults; // Get faults of signature List exceptionsThrowsList = new ArrayList(); int index = parms.signature.indexOf("throws"); if (index != -1) { String[] thrExcep = StringUtils.split(parms.signature.substring(index+6),','); for (int i = 0; i < thrExcep.length; i++) { exceptionsThrowsList.add(thrExcep[i].trim()); } } pw.println(" } catch (org.apache.axis.AxisFault axisFaultException) {"); if (faults != null && faults.size() > 0) { pw.println(" if (axisFaultException.detail != null) {"); for (Iterator faultIt = exceptionsThrowsList.iterator(); faultIt .hasNext();) { String exceptionFullName = (String) faultIt.next(); pw.println(" if (axisFaultException.detail instanceof " + exceptionFullName + ") {"); pw.println(" throw (" + exceptionFullName + ") axisFaultException.detail;"); pw.println(" }"); } pw.println(" }"); } pw.println(" throw axisFaultException;"); pw.println("}"); } // writeResponseHandling /** * writeOutputAssign * * @param pw * @param target (either "return" or "something =" * @param source (source String) */ protected void writeOutputAssign(PrintWriter pw, String target, Parameter param, String source) { TypeEntry type = param.getType(); if ((type != null) && (type.getName() != null)) { String typeName = type.getName(); // If minOccurs="0" and singular or array with nillable underlying // type get the corresponding wrapper type. if ((param.isOmittable() && param.getType().getDimensions().equals("")) || (param.getType() instanceof CollectionType && ((CollectionType) param.getType()).isWrapped()) || param.getType().getUnderlTypeNillable()) { typeName = Utils.getWrapperType(type); } // Try casting the output to the expected output. // If that fails, use JavaUtils.convert() pw.println(" try {"); pw.println(" " + target + Utils.getResponseString(param, source)); pw.println( " } catch (java.lang.Exception _exception) {"); pw.println( " " + target + Utils.getResponseString(param, "org.apache.axis.utils.JavaUtils.convert(" + source + ", " + typeName + ".class)")); pw.println(" }"); } else { pw.println(" " + target + Utils.getResponseString(param, source)); } }} // class JavaStubWriter
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -