「javacxf搭建」Javaxf

博主:adminadmin 2022-11-26 19:54:06 41

本篇文章给大家谈谈javacxf搭建,以及Javaxf对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

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的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-26,除非注明,否则均为首码项目网原创文章,转载请注明出处。