JAVA调用ICE接口实践

最近刚开发了一个需求,使用ICE调用服务器端的接口,过程如下:

1 首先是准备环境,通过下载得到安装包,这次我用的是3.1版本(目前最新是3.4)

2 接着使用bin目录下slice2java将得到的ice文件转化为Java类,命令为slice2java    ****.ice

3 将lib目录下Ice.jar引入Java工程内,开始编写客户端代码

 

 

public abstract class AbstractIceAgent {

    protected Logger         logger           = LoggerFactory.getLogger(AbstractIceAgent.class.getName());

    private static final int DEFAULT_TIME_OUT = 2000;

    String                   identId;

    public AbstractIceAgent(){
    }

    public AbstractIceAgent(String identId){
        this.identId = identId;
    }

    public String getIdentId() {
        return identId;
    }

    public void setIdentId(String identId) {
        this.identId = identId;
    }

    public Object executeProxy(Object bean) {
        Communicator communicator = Ice.Util.initialize();
        Object returnValue = null;
        try {
            ObjectPrx objPrx = communicator.stringToProxy(identId);
            objPrx.ice_timeout(DEFAULT_TIME_OUT);
            returnValue = methodAction(objPrx, bean);
        } catch (Exception e) {
            logger.error("execute proxy cause error:" + e);
            throw new RuntimeException(e);
        } finally {
            if (communicator != null) {
                try {
                    communicator.destroy();
                    communicator = null;
                } catch (Exception e) {
                    // do nothing
                }
            }
        }
        return returnValue;
    }

    /**
     * ice接口方法的定义
     * 
     * @param base
     */
    abstract Object methodAction(ObjectPrx base, Object bean);

}

 

 

 这是一个虚基类,子类只需覆盖methodAction即可。

 

 

 

 

package  ****;

public interface AIMFriendBO {

    int[] isFriend(String memberId, String[] friendIds);
}

 

 这是本次需要实现的接口。

 

 

public class AIMFriendAgent extends AbstractIceAgent implements AIMFriendBO {

    // private static final String ICE_INTERFACE = "ADPushAgentId:default -h 10.2.225.50 -p 11001";
    // private static BrmmsRemindAgent brmmsIceAgent = new BrmmsRemindAgent(ICE_INTERFACE);

    protected Logger logger = LoggerFactory.getLogger(AIMFriendAgent.class.getName());
    
	private String              strCaller;
    private String              strServiceType;
    
	public void setStrCaller(String strCaller) {
		this.strCaller = strCaller;
	}

	public void setStrServiceType(String strServiceType) {
		this.strServiceType = strServiceType;
	}

    public AIMFriendAgent(){
    };

    public AIMFriendAgent(String identId){
        super(identId);
    }


    @Override
    Object methodAction(ObjectPrx base, Object bean) {
    	WWContactInterfacePrx ctWebInterfacePrx = WWContactInterfacePrxHelper.checkedCast(base);
        AliIMContact contact = (AliIMContact) bean;
        IntSeqHolder isFriendSeq=new IntSeqHolder();
        StringHolder retMsgHolder=new StringHolder();
        
        int result  = ctWebInterfacePrx.IsFriend(strCaller, strServiceType, contact.getMemberId(), contact.getContactIds(), isFriendSeq, retMsgHolder);
        
        // 10000 means ok normally
        if(result==10000){
        	return isFriendSeq.value;
        }else{
        	logger.error("check contact error in AIMFriendAgent , cause :" + retMsgHolder.value);
        	return null;
        }
    }

	public int[] isFriend(String memberId, String[] friendIds) {
        if (memberId == null||friendIds==null) {
            throw new RuntimeException("ice contact relation check parameters are empty");
        }

        int[] returnValue=(int[]) this.executeProxy(new AliIMContact(memberId,friendIds));
        return returnValue;
        
	}
	


}

 

这是最后的实现,使用时只需在spring的配置文件中配好需要的参数即可直接使用。  

参考文献:http://blog.csdn.net/linkyou/archive/2009/02/02/3858233.aspx

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Java调用HTTP接口的步骤如下: 1. 创建一个URL对象,指定HTTP接口的地址。 2. 打开URL连接,获取URLConnection对象。 3. 设置URLConnection对象的请求方式、超时时间等参数。 4. 发送请求,并获取服务器返回的响应结果。 5. 处理响应结果,可以将响应结果转换成字符串或其他格式。 下面是一个简单的示例代码,演示如何使用Java调用HTTP接口: ```java import java.net.*; import java.io.*; public class HttpDemo { public static void main(String[] args) throws Exception { URL url = new URL("http://example.com/api"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setConnectTimeout(5000); conn.setReadTimeout(5000); if (conn.getResponseCode() != 200) { throw new RuntimeException("HTTP error code : " + conn.getResponseCode()); } BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); String output; System.out.println("Output from Server .... \n"); while ((output = br.readLine()) != null) { System.out.println(output); } conn.disconnect(); } } ``` 上面的代码使用Java的URLConnection类实现了一个简单的HTTP GET请求,并将响应结果输出到控制台。如果需要发送POST请求,可以使用URLConnection的setRequestMethod方法设置为POST,并调用URLConnection的getOutputStream方法向服务器发送请求数据。 ### 回答2: 使用Java调用HTTP接口的主要步骤如下: 1. 导入相关的类库:首先需要在Java项目中导入相关的类库,如java.net包下的URL、HttpURLConnection类等。 2. 构建URL对象:根据需要调用的HTTP接口地址,使用URL类的构造方法创建URL对象。例如,可以通过URL url = new URL("http://www.example.com/api")创建一个指向接口地址的URL对象。 3. 打开连接:通过调用URL对象的openConnection()方法,打开URL连接。这将返回一个URLConnection对象。 4. 设置请求参数:如果需要传递请求参数,可以通过调用URLConnection对象的setRequestMethod()方法设置HTTP请求方法,例如GET或POST。可以通过调用URLConnection对象的setRequestProperty()方法设置请求头参数,例如Content-Type,Authorization等。 5. 发送请求:如果是GET请求,可以直接调用URLConnection对象的connect()方法发送请求。如果是POST请求,可以先获取URLConnection对象的OutputStream,并通过写入输出流的方式发送请求参数,然后再调用connect()方法发送请求。 6. 获取响应:通过调用URLConnection对象的getResponseCode()方法获取HTTP响应的状态码,以判断请求是否成功。可以通过调用URLConnection对象的getInputStream()方法获取HTTP响应的输入流,以获取响应数据。 7. 处理响应:根据接口的具体响应数据格式,可以使用Java提供的相关类库(如JSON解析库)对响应数据进行解析和处理。 8. 关闭连接:使用完毕后,需要调用URLConnection对象的disconnect()方法关闭连接。 注意事项: - 如果接口需要进行身份认证,可以在请求头中添加Authorization参数,例如使用Basic Auth或Token等方式。 - 使用HTTPS协议时,需要进行SSL证书验证。 - 在处理大量请求时,可能需要考虑使用连接池来提高性能和资源利用率。 总结:通过以上步骤,我们可以使用Java调用HTTP接口,发送请求并处理响应,实现与其他系统进行数据交互。 ### 回答3: 使用Java调用http接口可以通过Java的网络编程功能来实现。Java提供了许多类和方法来实现http请求和接收http响应。 首先,我们可以使用Java的URL类来创建一个URL对象,指定要访问的http接口的地址。然后,我们可以使用URLConnection类的openConnection()方法打开该URL连接,并将其转换为HttpURLConnection对象。 接下来,我们可以设置HttpURLConnection对象的请求方法(GET、POST、PUT、DELETE等),设置请求头部信息(如Content-Type、Authorization等),并通过setDoOutput()方法将请求数据写入连接。 然后,我们可以使用HttpURLConnection的getOutputStream()方法获取输出流,将请求数据写入流中。如果是GET请求,可以通过HttpURLConnection的getInputStream()方法获取输入流,读取服务器的响应数据。 最后,我们可以使用BufferedReader类逐行读取服务器的响应数据,并保存在一个字符串中,或按照其它需要进行处理。 在处理http响应数据时,我们可以使用Java提供的第三方库,如Apache HttpClient和OkHttp,它们封装了更多的功能和便捷的方法,使用起来更加方便。 总的来说,使用Java调用http接口需要一些基本的编程知识和网络编程相关的类和方法。通过对Java网络编程的学习和使用,我们可以轻松地实现与http接口的交互,并处理接口返回的数据。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值