?? abstractservicegenerator.java
字號:
{ MessagePartInfo part = (MessagePartInfo) bitr.next(); String varName = getUniqueName(javify(part.getName().getLocalPart()), partNames); partNames.add(varName); JType paramType = schema.getType(context, part); ParamInfo param = new ParamInfo(paramType,varName, true); param.setIn(true); param.setName(part.getName()); param.setPart(part); params.put(varName, param); } } if (op.hasOutput() && op.getOutputMessage().size() > 0) { MessageInfo outputMsg = op.getOutputMessage(); Iterator rtitr = outputMsg.getMessageParts().iterator(); MessagePartInfo returnPart = (MessagePartInfo) rtitr.next(); annotateReturnType(method, returnPart); for (Iterator itr = bindings.iterator(); itr.hasNext();) { annotateReturnType(method, returnPart, (Binding) itr.next()); } while (rtitr.hasNext()) { MessagePartInfo part = (MessagePartInfo) rtitr.next(); String varName = getUniqueName(javify(part.getName().getLocalPart()), partNames); partNames.add(varName); JType paramType = getHolderType(context, part); ParamInfo param = params.get(varName); if( param == null ){ param = new ParamInfo(paramType,varName); } param.setOut(true); param.setName(part.getName()); param.setPart(part); params.put(varName, param); } // Annotate out message bindings for (Iterator itr = bindings.iterator(); itr.hasNext();) { Binding binding = (Binding) itr.next(); List headers = binding.getHeaders(outputMsg).getMessageParts(); for (Iterator bitr = headers.iterator(); bitr.hasNext();) { MessagePartInfo part = (MessagePartInfo) bitr.next(); String localName = part.getName().getLocalPart(); String varName = localName; // The same name used for input/output paramter boolean foundMatch = false; if (partNames.contains(localName)){ for (ParamInfo param : params.values()) { String name = param.getPart().getName().getLocalPart(); if( localName.equals(name) && param.getPart().getIndex() == part.getIndex()){ varName = param.getVarName(); foundMatch = true; break; } } } if( !foundMatch){ varName = getUniqueName(javify(localName), partNames); partNames.add(varName); } JType paramType = getHolderType(context, part); ParamInfo param = params.get(varName); if( param == null ){ param = new ParamInfo(paramType,varName,true); } param.setOut(true); param.setName(part.getName()); param.setParamType(paramType); params.put(varName, param); } } } else if (!op.hasOutput()) { annotateOneWay(method); } for (String name: partNames) { ParamInfo param = params.get(name); JVar jvar = method.param(0, param.getParamType(), param.getVarName()); annotateParam(param, jvar); } generateFaults(context, op, method); } protected void annotateOneWay(JMethod method) { } protected void annotateParam(ParamInfo param, JVar jvar ){ } protected JType getHolderType(GenerationContext context,MessagePartInfo part) throws GenerationException { JType genericType = context.getSchemaGenerator().getType(context, part); try { JClass holder = context.getCodeModel().ref("javax.xml.ws.Holder"); if (genericType instanceof JPrimitiveType) { genericType = ((JPrimitiveType) genericType).boxify(); } holder = holder.narrow((JClass) genericType); return holder; } catch (Exception e) { throw new GenerationException("Could not find holder type.", e); } } protected void generateFaults(GenerationContext context, OperationInfo op, JMethod method) throws GenerationException { for (Iterator itr = op.getFaults().iterator(); itr.hasNext();) { FaultInfo faultInfo = (FaultInfo) itr.next(); //List messageParts = faultInfo.getMessageParts(); /*if (messageParts.size() > 1) { throw new GenerationException("Operation " + op.getName() + " has a fault " + faultInfo.getName() + " with multiple parts. This is not supported at this time."); }*/ JClass exCls = getExceptionClass(context, faultInfo); if (exCls == null) throw new GenerationException("Could not find generated " + "fault class for " + faultInfo.getName() + "!"); if( faultInfo.getDocumentation()!= null){ JCommentPart commentPart = method.javadoc().addThrows(exCls); commentPart.add(faultInfo.getDocumentation()); } method._throws(exCls); } } private JClass getExceptionClass(GenerationContext context, FaultInfo faultInfo) { Map<String,JClass> exClasses = (Map<String,JClass>) context.getProperty(FaultGenerator.EXCEPTION_CLASSES); return exClasses.get(faultInfo.getMessageName()); } private String getUniqueName(String varName, List<String> partNames) { if (!partNames.contains(varName)) return varName; for (int i = 2; true; i++) { String v2 = varName + i; if (!partNames.contains(v2)) { return v2; } } } protected abstract String getClassName(GenerationContext context, Service service); protected abstract ClassType getClassType(); protected void annotate(GenerationContext context, OperationInfo op, JMethod method) { } protected void annotate(GenerationContext context, OperationInfo op, JMethod method, Binding binding) { } protected void annotateOutParam(MessagePartInfo part, JVar jvar) { } protected void annotateOutParam(MessagePartInfo part, JVar jvar, Binding binding) { } protected void annotateInOutParam(MessagePartInfo part, JVar jvar, Binding binding) { } protected void annotateReturnType(JMethod method, MessagePartInfo returnPart) { } protected void annotateReturnType(JMethod method, MessagePartInfo returnPart, Binding binding) { } protected void annotate(MessagePartInfo part, JVar jvar) { } protected void annotate(MessagePartInfo part, JVar jvar, Binding binding) { } /** * Find the return type for the operation. If there is no output message void is returned. */ protected JType getReturnType(GenerationContext context, SchemaSupport schema, OperationInfo op) throws GenerationException { JType returnType; if (op.hasOutput() && op.getOutputMessage().size() > 0) { MessagePartInfo returnPart = (MessagePartInfo) op.getOutputMessage().getMessageParts().iterator().next(); returnType = schema.getType(context, returnPart); } else { returnType = context.getCodeModel().VOID; } return returnType; } protected void annotate(GenerationContext context, Service service, JDefinedClass jc, Binding binding) { }}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -