Java,AXIS,webService 调用 完整实例 xml 入参出参

时间:2021-09-12 21:09:40
* @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 "";
}