「javacxf搭建」Javaxf
本篇文章给大家谈谈javacxf搭建,以及Javaxf对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、Java语言,在cxf+spring搭建的webservice链接数据库查询的数据拼接成XML返回
- 2、请教一个CXF搭建rest的问题
- 3、大哥,java使用CXF创建webservice客户端调用异常,你是去掉了哪个系统包,才不冲突的?谢谢
Java语言,在cxf+spring搭建的webservice链接数据库查询的数据拼接成XML返回
将cxf与spring相关的架包拷到lib目录下。
然后在classpath下新建一个cxfbeans.xml(进行cxf与spring的集成)文件和applicationContext.xml(进行ssh2的配置)。
请教一个CXF搭建rest的问题
您好,您要什么呢,这里都有:
现在互联网Open API流行,将您的Web应用也可以开放Open API给其他第三方使用。达到一种资源有效利用的目的。而Open API的暴露方式是多种多样的。有Web Service形式的,也有提供一个URI方式的,还有就是给客户端一个jar包,直接使用即可。个人认为,对于使用者来说,使用最简单的就是一个“jar包”+“一份使用文档了”,jar将具体的远程通讯细节、鉴权、握手、数据格式转换等等全部都屏蔽掉。不过这个方式仅仅针对于Java应用,如果用于其他技术,例如ASP.NET、PHP的客户端就不合适了。那么折中一下还是提供一个URI资源,客户端无论是什么技术,只要调用此URI资源就可以获取感兴趣的数据,数据格式和技术平台无关(比如JSON、XML)。REST是一种针对网络应用的设计和开发方式,可以降低开发的复杂性,提高系统的可伸缩性。Web应用暴露出来的是URI资源,客户端可以对资源进行操作(CRUD),REST最重要一点就是无状态,这点实际上感觉是特地针对EJB的会话Bean的重量级说的。所以REST轻量得很,轻量就意味着事务性、稳定性、安全性并没有传统JavaEE应用要求得那么高。主要集中于互联网应用对于不同终端的接口。具体的Rest介绍可以参考:
。
Apache的CXF不仅可以将您的Web系统暴露成为Web Service,还可以将您的应用暴露成REST资源供不同客户端调用。
2. 环境搭建
先从Apache站点下载CXF相关jar包。网址是:。
我下载的是apache-cxf-2.3.2,这个版本算是比较老了,能用就行。
下载后将项目lib下面的jar拷贝到自己web项目的lib中。CXF的samples下面有很多例子,都是支持Ant构建和Maven构建的。建议还是先使用传统方式构建项目,之后再迁移为Maven项目。这样依赖哪些东西心理有数,CXF是强依赖于Spring框架的。
3. 暴露REST服务
下面我们开始暴露自己的Web资源成为REST服务。我们先来看看web.xml的内容
Java代码
?xml version="1.0" encoding="UTF-8"?
web-app
!-- 配置Spring的配置文件 --
context-param
param-namecontextConfigLocation/param-name
param-valueWEB-INF/beans.xml/param-value
/context-param
!-- 配置Spring的web Context监听器,将Spring与web工程集成在一起 --
listener
listener-class
org.springframework.web.context.ContextLoaderListener
/listener-class
/listener
!-- 配置CXF --
servlet
servlet-nameCXFServlet/servlet-name
display-nameCXF Servlet/display-name
servlet-class
org.apache.cxf.transport.servlet.CXFServlet
/servlet-class
load-on-startup1/load-on-startup
/servlet
servlet-mapping
servlet-nameCXFServlet/servlet-name
url-pattern/service/*/url-pattern
/servlet-mapping
welcome-file-list
welcome-fileindex.jsp/welcome-file
/welcome-file-list
/web-app
bean.xml内容
Java代码
?xml version="1.0" encoding="UTF-8"?
beans xmlns=""
xmlns:xsi="" xmlns:jaxrs=""
xmlns:context=""
xsi:schemaLocation="
"
!-- 引入CXF下面的配置文件 --
import resource="classpath:META-INF/cxf/cxf.xml" /
import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" /
import resource="classpath:META-INF/cxf/cxf-servlet.xml" /
!-- 将Bean托管给Spring --
bean id="roomService" class="com.platform.restful.demo.RoomService"
/bean
bean id="userService" class="com.platform.restful.demo.UserService"
/bean
!-- 配置需要暴露的BeanService --
jaxrs:server id="restContainer" address="/"
jaxrs:serviceBeans
ref bean="roomService" /
ref bean="userService" /
/jaxrs:serviceBeans
/jaxrs:server
/beans
此配置文件需要注意几点,一个就是xml的beans声明,需要支持jaxrs:server标签,还有一个就是需要引入CXF自己的一些Spring配置项。该配置项全部在cxf-2.3.2.jar下面的META-INF下面。最后就是注意要暴露的Service类需要配置在jaxrs:server标签中,这样REST资源才能生效。我们就看一个服务吧,在看之前先说明一点,代码有问题,先这么写,根据爆出的问题,咱们再修改代码。
先建立值对象
Java代码
package com.platform.restful.demo;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "UserVO")
public class UserVO {
private int id;
private String name;
//省去setter和getter
}
下面是DAO
Java代码
package com.platform.restful.demo;
import java.util.HashMap;
import java.util.Map;
public class UserDAO {
private static MapString, UserVO userVOs;
static {
userVOs = new HashMapString, UserVO();
UserVO u1=new UserVO();
u1.setId(1);
u1.setName("liuyan");
UserVO u2=new UserVO();
u2.setId(2);
u2.setName("yexiaochai");
userVOs.put("1", u1);
userVOs.put("2", u2);
}
public static MapString,UserVO getPersons(){
return userVOs;
}
public static UserVO getPerson(){
return userVOs.get("1");
}
}
下面就是爆出来的门面服务类了
Java代码
package com.platform.restful.demo;
import java.util.Map;
import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
@Path("/userservice")
@Produces("application/json")
public class UserService {
@GET
@Path("/getUsers")
@Consumes("application/xml")
public MapString, UserVO getUsers() {
System.out.println("get users ");
MapString, UserVO userVOs = UserDAO.getPersons();
return userVOs;
}
@GET
@Path("/getUser")
@Consumes("application/xml")
public UserVO getUser() {
System.out.println("get user ");
UserVO userVO = UserDAO.getPerson();
return userVO;
}
}
我们将项目部署到Tomcat上,打开浏览器,输入URL
则输出了一段Json信息
Java代码
{"UserVO":{"id":1,"name":"liuyan"}}
那我们输入URL:
会是什么效果呢,控制台报出如下错误
Java代码
2011-6-15 13:52:47 org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor writeResponseErrorMessage
警告: No message body writer has been found for response class HashMap.
错误信息很明确了public MapString, UserVO getUsers()返回的是Map,ok,比较简单的办法就是再写一个复合值对象。具体可参考
复合对象
Java代码
package com.platform.restful.demo;
import java.util.Map;
import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name = "UserVOMap")
public class UserVOMap {
private MapString, UserVO userVOs;
public MapString, UserVO getUserVOs() {
return userVOs;
}
public void setUserVOs(MapString, UserVO userVOs) {
this.userVOs = userVOs;
}
}
Service服务类修改如下
Java代码
@GET
@Path("/getUsers")
@Consumes("application/xml")
public UserVOMap getUsers() {
System.out.println("get users ");
MapString, UserVO userVOs = UserDAO.getPersons();
UserVOMap userVOMap = new UserVOMap();
userVOMap.setUserVOs(userVOs);
return userVOMap;
}
之后再次访问
获得Json数据如下
Java代码
{"UserVOMap":{"userVOs":{"entry":[{"key":2,"value":{"id":2,"name":"yexiaochai"}},{"key":1,"value":{"id":1,"name":"liuyan"}}]}}}
大哥,java使用CXF创建webservice客户端调用异常,你是去掉了哪个系统包,才不冲突的?谢谢
你是用myeclipse自动生成的客户端?如果是那去掉jax-ws的包然后倒入cxf包就行啦
关于javacxf搭建和Javaxf的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。
发布于:2022-11-26,除非注明,否则均为
原创文章,转载请注明出处。