Java,AXIS,webService 呼叫 完整例項 xml 入參出參
阿新 • • 發佈:2018-12-31
* @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 ""; }