这些天在做这个需求,在平台间的转换,一个很小的错误挡了几天,一直排除压缩问题,可能是自己经验和能力还不到吧,记录下来这个错误,不说了,直接上代码,要注意的细节都在注释里。
package cn.com.webservice;
import java.rmi.RemoteException;
import java.util.Vector;
import javax.xml.namespace.QName;
import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.encoding.XMLType;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class TestNet {
public static void main(String args[]){
// 提供IP地址搜索WEB服务的URL
String url ="http://www.webxml.com.cn/WebServices/WeatherWebService.asmx"; // 在浏览器中打开url,可以找到
//private String soapAction="http://WebXml.com.cn/getCountryCityByIp"
String namespace = "http://WebXml.com.cn/";// targetNamespace
String actionURI = "getWeatherbyCityName"; // Action路径
String op = "getWeatherbyCityName"; // 要调用的方法名
String city = "上海";//要传的参数变量
Service service = new Service();
try {
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(url));
call.setUseSOAPAction(true);
// action url
call.setSOAPActionURI(namespace + actionURI);//这个soapaction网站上也有对照放进去就可以了
// 设置要调用哪个方法
call.setOperationName(new QName(namespace, op));
call.setEncodingStyle(null);
// 设置参数名称,具体参照从浏览器中看到的
call.addParameter(new QName(namespace, "theCityName"),XMLType.XSD_STRING, ParameterMode.IN); //入参,这里要注意参数名一定和webservice上测试框的参数名一致
call.setReturnType(new QName(namespace, op), Vector.class); // 返回的数据类型
Object[] params = new Object[] {city};
// 调用方法并传递参数
Vector v = (Vector) call.invoke(params);
for (int i = 0; i < v.size(); i++)
{
System.out.println(v.get(i));
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
}