1.首先要把AXIS包里的jar文件放到java项目的lib目录下,这里用的是AXIS1_4版本
2.在java代码中实现:远程调用路径以及设置参数
3.若接口提供的方法需要传递xml类型的参数,例如接口是这样的
实现代码 如下:
package test; import java.rmi.RemoteException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; 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; import org.apache.axis.encoding.XMLType; import util.DBUtil; import util.MySqlDBUtil; public class CopyOfOrgSt { private static Connection con = null; private static PreparedStatement pst = null; private static ResultSet rs = null; private static Connection mcon = null; private static PreparedStatement mpst = null; private static ResultSet mrs = null; public static void main(String[] args){ CopyOfOrgSt orgst=new CopyOfOrgSt(); orgst.seAndtr(); } public String invokeRemoteFuc(String method,String param) { System.out.println(param); // 远程调用路径 String endpoint = "http://IP地址:端口号/*/*/*?wsdl"; String result = "call failed!"; Service service = new Service(); Call call; try { call = (Call) service.createCall(); call.setTargetEndpointAddress(endpoint); //new QName的URL是要指向的命名空间的名称,这个URL地址在你的wsdl打开后可以看到的, //上面有写着targetNamespace="http://*.*.*/",这个就是你的命名空间值了; call.setOperationName(new QName("http://*.*.*/",method)); // 调用的方法名 // 设置参数名 :参数名 ,参数类型:String, 参数模式:'IN' or 'OUT' call.addParameter("guid",XMLType.XSD_STRING,ParameterMode.IN); call.setEncodingStyle("UTF-8"); call.setReturnType(XMLType.XSD_STRING); result = (String) call.invoke(new Object[] {param});// 远程调用 } catch (ServiceException e) { e.printStackTrace(); } catch (RemoteException e) { e.printStackTrace(); } return result; } public void seAndtr() { con=DBUtil.getConnection(); mcon=MySqlDBUtil.getConnection(); String param=""; String sql="select a.FKeyID,isnull(b.FKeyID,'-1') as PARENTORGID,a.FNo,a.FName from ORGMAIN a left join ORGMAIN b on cast(a.FParentID as nvarchar(50))=b.FNo"; String msql="select * from org_organization where orgserial=?"; try {// 更新/添加 pst=con.prepareStatement(sql); mpst=mcon.prepareStatement(msql); rs=pst.executeQuery(); if(rs!=null){ while(rs.next()){ param="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+ "<ORGANIZATION>"+ "<Field ColName=\"guid\" Value=\""+rs.getString("FKeyID")+"\"></Field>"+ "<Field ColName=\"parentOrgId\" Value=\""+rs.getString("PARENTORGID")+"\"></Field>"+ "<Field ColName=\"orgName\" Value=\""+rs.getString("FName")+"\"></Field>"+ "<Field ColName=\"orgCode\" Value=\""+rs.getString("FNo")+"\"></Field>"+ //"<Field ColName=\"orgManagerEmpId\" Value=\""+rs.getString("FKeyID")+"\"></Field>"+ //"<Field ColName=\"orgDescripte\" Value=\""+rs.getString("FKeyID")+"\"></Field>"+ "</ORGANIZATION>"; String ppid=rs.getString("FNo"); System.out.println("======================================="+ppid); mpst.setString(1,ppid); mrs=mpst.executeQuery(); if(mrs.next()){//有结果集,更新 String result=invokeRemoteFuc("updateOrganization",param); System.out.println("更新结果:"+result); }else{//无结果集,新增 String result=invokeRemoteFuc("addOrganization",param); System.out.println("新增结果:"+result); } } } //删除 String delsql="select orgserial from org_organization where orgserial not in (?) and guid is not null"; mpst=mcon.prepareStatement(delsql); String dpsql="select FNo from ORGMAIN"; Statement dpst=con.createStatement(); ResultSet dprs=dpst.executeQuery(dpsql); String str=""; if(dprs!=null){//从中间库中查询所有的FNo while(dprs.next()){ str=str.concat(","+dprs.getString("FNo"));//将所有FNo用","拼接 //str.append(","+dprs.getString("FNo"));//将所有FNo用","拼接 } str=str.substring(1); mpst.setString(1,str);//将字符串设置到最外层查询 mrs=mpst.executeQuery();//执行最外层查询 String delorgserial=""; if(mrs!=null){ while(mrs.next()){ delorgserial=delorgserial.concat(","+mrs.getString("orgserial"));//取得oa所有的需要删除的组织编号 } delorgserial=delorgserial.substring(1); System.out.println("---"+delorgserial); //取得需要删除的记录的guid和组织名,orgparentorgid字段用来关联出parentOrgId String selsql="select guid,orgname,orgserial,orgparentorgid from org_organization where orgserial=?"; mpst=mcon.prepareStatement(selsql); String[] strs=delorgserial.split(","); for(int i=0;i<strs.length;i++){ mpst.setString(1,strs[i]);//遍历字符数组分别赋值到sql mrs=mpst.executeQuery();//执行最外层查询 //用查询出来的guid作为parentOrgId String selmsql=""; if(mrs.next()){ int orgparentorgid=mrs.getInt("orgparentorgid"); selmsql="select guid from org_organization where org_id="+orgparentorgid; } Statement selmst=mcon.createStatement(); ResultSet selmrs=selmst.executeQuery(selmsql); String guid=""; if(selmrs.next()){ guid=selmrs.getString("guid"); } param="<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>"+ "<ORGANIZATION>"+ "<Field ColName=\"guid\" Value=\""+mrs.getString("guid")+"\"></Field>"+ "<Field ColName=\"parentOrgId\" Value=\""+guid+"\"></Field>"+ "<Field ColName=\"orgName\" Value=\""+mrs.getString("orgname")+"\"></Field>"+ "<Field ColName=\"orgCode\" Value=\""+mrs.getString("orgserial")+"\"></Field>"+ //"<Field ColName=\"orgManagerEmpId\" Value=\""+rs.getString("FKeyID")+"\"></Field>"+ //"<Field ColName=\"orgDescripte\" Value=\""+rs.getString("FKeyID")+"\"></Field>"+ "</ORGANIZATION>"; //执行删除操作 String result=invokeRemoteFuc("delOrganization",param); System.out.println("删除结果:"+result); } }else{ System.out.println("没有需要删除的数据"); } } rs.close(); pst.close(); con.close(); mrs.close(); mpst.close(); mcon.close(); }catch(Exception e){ e.printStackTrace(); } } }