不同项目间的通讯方法

一个项目需要用到另一个项目的方法时,可以考虑使这两个项目互相收发数据:
1.在请求数据的项目中新建一个action,写如下代码:

//获取数据库的字段,在数据库中写好发送数据的项目地址(如果测试的话在执行方法中把地址写死也可以)
Map<String, String> webServiceMap = new HashMap<String, String>();
    public void getWebServiceMap(){
        webServiceMap = new HashMap<String, String>();
        for(SysConfig config:sysConfigService.getFTP_cfgtype("??????")){                     //调用SQL语句查询数据库相关字段
            webServiceMap.put(config.getCfgkey(), config.getCfgvalue());
        }
    }

//执行方法
public String dataDownLoadTask(){
        getWebServiceMap();
        pageContent();
        WebServiceClientGetData wscgd=new WebServiceClientGetData();
        dataTypeList=wscgd.getDataTypeNewList(webServiceMap.get("项目地址"), webServiceMap.get("命名空间"));
        page=wscgd.dataDownLoadTask(webServiceMap.get("项目地址"), webServiceMap.get("命名空间"), page, userString, dataTypeId, isDownLoad, isgetAndZip, taskTimeBegin, taskTimeEnd,dataTypeIdS);
        return "dataDownLoadTaskList";
    }
//别忘记加get和set方法

2.WebServiceClientGetData 中的getDataTypeNewList方法为:

    @SuppressWarnings("rawtypes")
    public int/*需要传递的参数,实体类或者其他类型*/[]  getDataTypeNewList(String webServiceUrl,String webServiceTargetNamespace){
        try {
            RPCServiceClient serviceClient = new RPCServiceClient();
            Options options = serviceClient.getOptions();
            // 指定调用WebService的URL
            EndpointReference targetEPR = new EndpointReference(webServiceUrl);
            options.setTo(targetEPR);
            // 指定sayHelloToPerson方法的参数值
            Object[] opAddEntryArgs = new Object[] {};
            // 指定sayHelloToPerson方法返回值的数据类型的Class对象
            Class[] classes = new Class[] { int/*需要传递的参数,实体类或者其他类型*/[].class };
            // 指定要调用的sayHelloToPerson方法及WSDL文件的命名空间
            QName opAddEntry = new QName(webServiceTargetNamespace,"getDataTypeNewList"/*发送数据的项目的方法名称*/);
            // 调用sayHelloToPerson方法并输出该方法的返回值
            Object[] response = serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes);
            int/*需要传递的参数,实体类或者其他类型*/[] dataTypeList=(int/*需要传递的参数,实体类或者其他类型*/[]) response[0];
            return dataTypeList;
        } catch (AxisFault e) {
            e.printStackTrace();
        }
        return null;
    }

如果不需要参数传递而只是执行一条命令,那么调用这个方法:

serviceClient.invokeRobust(opAddEntry,opAddEntryArgs);

取代

serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes);

3.而发送数据的项目中需要有与第二步中

QName opAddEntry = new QName(webServiceTargetNamespace,"getDataTypeNewList"/*发送数据的项目的方法名称*/);

相同的方法名。
例如:

public int/*需要传递的参数,实体类或者其他类型*/[] getDataTypeNewList(){/*查询需要的数据,例如实体类,注意这里不能跨项目传递列表,只能传递数组*/}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值