cxf 学习

来源:互联网 发布:java join多个线程 编辑:程序博客网 时间:2024/05/18 13:45

最近在学习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基本上差不多,可以进行替代,我也测试了一下,暂时没有发现问题!



0 0
原创粉丝点击