这是最近项目中和第三方联调接口时遇到的一个问题。
第三方服务端:是使用jersery REST框架构建的web services服务,提供给我们的是wadl文件。他们是基于的是JDK1.6开发环境,jersery的版本也比较高,也是基于JDK1.6.
我方客户端:我们的现网环境是基于JDK1.5,所以要考虑基于JDK1.5环境进行开发测试。如果直接使用和他们一样版本的jersery客户端jar,基于他们提供的wadl文件生成客户端,基本上是半小时内将问题搞定,但那必须在jdk1.6环境下,
所以我们必须让他在jdk1.5环境下能跑,最后在网上找了低版本的jersery客户端jar,同时将jaxb相关的几个jar也替换成低版本的,自己写客户端调用,而不使用直接自动生成的客户端代码,将问题搞定。
客户端调用代码如下所示:
import javax.ws.rs.core.MediaType; import net.sf.json.JSONObject; 。。。 import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.WebResource; public class JzzService { private static Client client = Client.create(); private static Logger logger = Logger.getLogger(JzzService.class); /** * 外部认证 */ public static RespOutCertificate outCertificate( ReqOutCertificate reqOutCertificate) { String url = "http://ip:port/services"; WebResource webResource = client.resource( url).path( "outCertificate"); JSONObject json = null; if(reqOutCertificate != null){ json = JSONObject.fromObject(reqOutCertificate); logger.info("请求外部认证接口的参数为:" + json); }else logger.info("外部认证请求对象为空"); RespOutCertificate respOut = webResource.entity(reqOutCertificate, MediaType.APPLICATION_JSON).post(RespOutCertificate.class); logger.info("外部认证返回结果:" + (respOut == null ? null : respOut.toString())); return respOut; } 。。。。。。。。。。。 }
其中的请求对象和响应对应都加入@XmlRootElement注解,如下所示:
@XmlRootElement public class ReqOutCertificate { private String cardasno; private String termno; private String radom1; private String skfactor; private String mac1facto; 。。。。。 }
附件lib.rar是使程序能在jdk1.5环境下能运行的lib,包含所有的jar包。这是关键。
附件lib_for_jdk5.rar是能在jdk1.5下运行的关键的几个jar包。