import java.io.File;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
public class WeatherWebService {
//这个方法返回所有工单记录
public static String[] selectAllCargoInfor() {
// webservice路径
// 这里后面加不加 "?wsdl" 效果都一样的
String endpoint = "http://180.76.147.120:8989/Service1.asmx?wsdl";
String[] res = null;
//webService 命名空间
String nameSpace = "http://dengsss.org/";
// 查询所有数据的接口方法名
String operationName = "selectAllOrder_Record";
String soapAction = "http://dengsss.org/selectAllOrder_Record";
// 定义service对象
Service service = new Service();
// 创建一个call对象
Call call;
try {
call = (Call) service.createCall();
// 设置目标地址,即webservice路径
call.setTargetEndpointAddress(endpoint);
// 设置操作名称,即方法名称
call.setOperationName(new QName(nameSpace,operationName));
// // 此处需要配置传入参数类型与参数名称,如果未设置jax-ws则无法接受参数,会认为传入的参数为null
// call.addParameter(new QName(nameSpace, "TransNo"),
// org.apache.axis.encoding.XMLType.XSD_STRING,
// javax.xml.rpc.ParameterMode.IN);
// 设置返回值类型
// 对于返回是字符串数组的返回类型只有这两种可行
call.setReturnClass(java.lang.String[].class);
call.setUseSOAPAction(true);
call.setSOAPActionURI(soapAction);
try {
res = (String[]) call.invoke(new Object[] {});
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 如果返回类型是org.apache.axis.encoding.XMLType.SOAP_VECTOR时用下面的转型接收
// Vector v=(Vector) call.invoke(new Object[]{cityCode,userId});
} catch (ServiceException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return res;
}
WebService端的接口方法已经存在,这里用axis方式调用需要的方法。
这里的方法返回的是字符串数组。
如果需要传入参数,那么就配置传入参数类型与参数名称,
因为我是需要把本地数据库的数据传到websevice的数据库并存起来,传输的方式为把本地数据库的数据导出存为一个XML格式文件,然后再把这个XML文件转化成字符串,并把它作为传递的参数,在这个过程中主要有两歩:
1.把数据库表中数据导出存为xml格式文件,代码如下:
<pre name="code" class="java">import java.io.File;
import j