最近在学习java,想搞j2ee的开发,以及手机网站的开发。
IDE:Intellij IDEA 13
JDK: 1.7
server:Tomcat 8.0.15
System:windows 7 X64
总结:
1:搞清楚,IDEA中,什么是插件,哪些是插件!
2:CXF中,在开发WebService的过程中,不要单独的针对helloWord.java(implement interface IHelloworld) 进行compile(ctrl +shit +F9),保险期间,还是直接执行build project 。因为只是单独的对helloworld.java进行编译的话,IHelloWorld.java时没有编译的,所以总是会提示:找不到符号 之类的Error!
3:不同版本之间的CXF还是不同的。刚开始,绕了很大的弯路。下载了CXF3.0.2 在IDEA中,进行webservice插件引用时,总是引用不成功,搞了半天,猜想可能是CXF版本太高的问题,就将其降低到CXF2.7.13 ,中间还是出现了或多或少的问题,就干脆降到了2.6.,当时官网的最低版本。
在进行Restful WebSErvice 开发时, 单独开发挺好,在引入springframwork时,开始报 "找不到对应的bean,"是springframework中的问题,这不是扯吗?于是,就上网找答案,for a long time.....总算是找到了,说是包冲突的问题,其实看到问题的时候,也大概能猜到是包冲突的问题,但是不知道是哪个jar冲突啊?看到了CXF 2.7.0的类似报错,说是,有个 cxf-services-ws-discovery-service-2.7.0.jar 跟springframework中的包冲突,但是悲剧的是,我在我项目引用的CXF2.6
包中没有找到对应的jar包啊,当时就吐血3L;干脆升级项目的CXF版本。就将其升级到了CXF 2.7.13,运行时果断不报错,挺顺利,心里那个得瑟啊!赶紧测试其他功能啊!
不测试不要紧,一测试,哎呀我的妈啊,你不带这样玩我的吧,怎么总是这样啊,原来访问 http://localhost:8080/services/rest1/list 很轻松的事情,怎么突然之间就报错了呢?报
org.apache.cxf.jaxrs.interceptor.JAXRSInInterceptor processRequest WARNING: No root resource matching request path” ,真是一波未平一波又起啊!怎么那么曲折呢!
不能灰心,打起精神,看源代码吧,一看之下发现,有个地方还真的可能是问题。
@Path(value="sample") public interface RestSample { @GET @Produces(MediaType.TEXT_PLAIN) @Path("/request/{param}") public String doRequest(@PathParam("param") String param, @Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse); <span style="color: rgb(204, 102, 204); font-family: Verdana, Georgia, serif; font-size: 14px;">@GET</span> <span style="color: rgb(204, 102, 204); font-family: Verdana, Georgia, serif; font-size: 14px;">@Produces(MediaType.TEXT_PLAIN)</span> public String doGet(); @GET @Path("/bean/{id}") @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON }) public User getBean(@PathParam("id") int id);
如上面贴出的代码部分,@Path参数还是有差异的,其中fuction doGet方法或函数(C# 叫方法)没有Path参数,在进行请求的时候,可以使用默认的/sample进行请求,如“http://localhost:8080/services/rest1/sample”,但是,请求其他的方法时,就不用默认的Path,用自己的path参数来请求,但是用了CXF2.7.13 后,你请求的时候,就不行了,就会报什么找不到对应的请求路径了。于是,就顺手调整了一下,测试呗,嘿,还别说,还真有用,直接就搞定了。
看来 Interface 上面的Path 参数意义不同, 2.7.13将value="/sample"当成了父路径;而 2.6是将其当成默认路径了。
而且,cxf-servlet.xml和applicationContext-server.xml基本上差不多,可以进行替代,我也测试了一下,暂时没有发现问题!