1. 程式人生 > >Java,AXIS,webService 呼叫 完整例項 xml 入參出參

Java,AXIS,webService 呼叫 完整例項 xml 入參出參

* @param model
	 * @return
	 */
	@ResponseBody
	@RequestMapping(value = "getDbPatientInfo" )
	public String listForGds(String message) {
		message = "<?xml version=\"1.0\" encoding=\"UTF-8\"?standalone=\"yes\"?>"
				+ "<data>"
				+ "<funname>inspect_list</funname>"
				+ "<schedule_time_start>2016-08-01</schedule_time_start>"
				+ "<schedule_time_end>2017-08-01</schedule_time_end>"
				+ "</data>"
				+ "";
		
        try {
        	String url = "http://localhost:7008/Service.svc?wsdl";//設定要呼叫的介面地址
        	String nameSpace = "http://tempuri.org/";//名稱空間 targetNamespace 
        	String funName = "funMain";//設定函式名  
        	//建立服務
        	Service service = new Service();
            Call call = (Call) service.createCall();  
            call.setTargetEndpointAddress(url);
            call.setUseSOAPAction(true);  
            
            //返回引數型別
            call.setReturnType(XMLType.XSD_STRING);
            call.setEncodingStyle("UTF-8");
            call.setReturnType(new QName("http://www.w3.org/2001/XMLSchema","string"));//設定返回引數  xmlns:s="http://www.w3.org/2001/XMLSchema"
            
            //設定要呼叫的介面方法
            call.setOperationName(new QName(nameSpace,funName));//設定函式名  
            call.setSOAPActionURI("http://tempuri.org/IService/funMain");//設定URI
            
            
          
            //Map<String, String> roleMap = new HashMap<String, String>();
            //roleMap.put("Password", "123456");
            //1把 從當前名稱空間的 nameSpace 元素名是 MySoapHeader 的元素 新增到
            //SOAPHeaderElement soapHeaderElement = new SOAPHeaderElement(nameSpace,soapHeader);
            /*
            <s:element name="MySoapHeader" type="tns:MySoapHeader"/>
			<s:complexType name="MySoapHeader">
				<s:sequence>
				<s:element minOccurs="0" maxOccurs="1" name="Password" type="s:string"/>
				</s:sequence>
				<s:anyAttribute/>
			</s:complexType>
             */
            
            //2 更改介面部分內容
           /* for (Map.Entry<String, String> entry : roleMap.entrySet()){
                soapHeaderElement.addChildElement(entry.getKey()).setValue(entry.getValue());
                soapHeaderElement.addChildElement(entry.getKey()).setValue(entry.getValue());
            }
            soapHeaderElement.setNamespaceURI(nameSpace);
            call.addHeader(soapHeaderElement);
            */
            
            
            
            /**
             * 第一種   新增引數
             */
            // 設定引數名:(message)    第二個引數表示String型別,第三個引數表示入參
            /*call.addParameter(new QName(nameSpace,"message"), XMLType.XSD_STRING, ParameterMode.IN);
            //返回引數型別
            call.setReturnType(XMLType.XSD_STRING);
            call.setEncodingStyle("UTF-8");
            String retVal = (String) call.invoke(new Object[]{message});
            logger.info(retVal); */
            
            
            
            
            /**
             * 第二種  新增引數
             */
            List<Object> list = new ArrayList<Object>();
            Map<String,Object> map=new HashMap<String, Object>();
            map.put("message",message);//輸入引數值
            for (Map.Entry<String, Object> entry : map.entrySet()) {
                if (entry.getValue() instanceof String) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_STRING, ParameterMode.IN);
                } else if (entry.getValue() instanceof Long) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_LONG, ParameterMode.IN);
                } else if (entry.getValue() instanceof Double) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_DOUBLE, ParameterMode.IN);
                } else if (entry.getValue() instanceof Float) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_FLOAT, ParameterMode.IN);
                } else if (entry.getValue() instanceof Integer) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_INTEGER, ParameterMode.IN);
                } else if (entry.getValue() instanceof Date) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_DATETIME, ParameterMode.IN);
                } else if (entry.getValue() instanceof Boolean) {
                    call.addParameter(new QName(nameSpace, entry.getKey()),
                            XMLType.XSD_BOOLEAN, ParameterMode.IN);
                }
                list.add(entry.getValue());
                logger.info(entry.getKey() + "=======" + entry.getValue());
            }
            //返回引數型別
            call.setReturnType(XMLType.XSD_STRING);
            call.setEncodingStyle("UTF-8");
            //開始呼叫
            String result = (String) call.invoke(list.toArray());
            logger.info(result);
            
				
				
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "";
	}