最近公司的项目要将公司采集到的数据提交到上级管理机构去,接收方提供了接口和数据上传规范。要通过XML方式提交,因为之前从未涉及过WebService方面的知识,网上好多资料都不是太明白,一些网友写的Demo要不说的太复杂,要不解释不清楚。后来根据网友的Demo根据接口提交数据规范自己写了个Demo成功后,总结下自己在哪些一些需要注意的地方。
1、Demo代码
import java.net.MalformedURLException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestService {
public static void main(String[] args) {
try {
String wsdlUrl = "http://****:8086/mds/services/DataService"; //接口地址 (提交数据的接口地址,注意去掉?wsdl)
String nameSpaceUri = "http://ws.****.com.cn/"; //命名空间地址(上传接口方法所在命名空间)
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(wsdlUrl));
call.setOperationName(new QName(nameSpaceUri,"uploadAllData"));
call.addParameter(new QName(nameSpaceUri,"value"),org.apache.axis.Constants.XSD_STRING,ParameterMode.IN);
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
call.setUseSOAPAction(true);
call.setSOAPActionURI(nameSpaceUri+"uploadAllData");
//call.setUsername("sapuser");
//call.setPassword("sappass");
call.setReturnType(org.apache.axis.Constants.XSD_STRING);
String postdata = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><request><reqtype>05</reqtype>"
+ "<secret></secret>"
+ "<body><userid>15</userid><seeid>1101</seeid><time>20120522224350</time>"
+ "<data><type>01</type><value>11</value></data>"
+ "<data><type>02</type><value>22</value></data>"
+ "</body></request>";;
String ret = (String)call.invoke(new Object[] {postdata});
System.out.println("Successful = " + ret);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
2、获取namespaceUri
将接收方给的接口路径在浏览器中打开,如下图
获取到namespace后作为代码中的nameSpaceUri。
3、注意事项
(1)call.setTargetEndpointAddress(new java.net.URL(wsdlUrl))中wsdlUrl是对方给的接口中去掉?wsdl后的路径。
(2)call.addParameter(new QName(nameSpaceUri,"value"),org.apache.axis.Constants.XSD_STRING,ParameterMode.IN); QName中第一个参数是wsdlUrl路径,
第二个参数把我坑的有点惨,这个参数我也不太明白为什么写个“value”就OK了。
(3)postdata的Xml文件双引号(“)要用斜杠加双引号(\")代替。
(4)postdata的Xml字符串要根据数据上传规范来拼接,我提交的接口规范如下()
<?xml version="1.0" encoding="UTF-8"?>
<request>
<reqtype>05</reqtype>
<secret></secret>
<body>
<userid>15</userid> --企业标识
<seeid>1001</seeid> --监控点序号
<time>20120522224350</time> --时刻
<data>
<type>01</type> --指标类型
<value>219</value> --指标值
</data>
<data>
<type>02</type> --指标类型
<value>217</value> --指标值
</data>
</body>
</request>
响应格式:
<?xml version="1.0" encoding="UTF-8"?>
<response>
<flag>1</flag>
</response>