⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractservicegenerator.java

📁 Xfire文件 用于开发web service 的一个开源工具 很好用的
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
            {                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 + -