CXF有多种数据绑定方式,如:Aegis Databinding,JAXB,MTOM Attachments . 其中JAXB(JavaTM Architecture for XML Binding)是其默认的数据绑定方式。JAXB是一套自动映射XML和Java实例的开发接口和工具。
如果web Service发布的接口为:
String sayUserHello(User user);
List<User> findUsers();
且传入参数类型是类,而且返回的为List ,String 等,这样,发布web service与普通java的没有区别,是因为JAXB都能支持。
但JAXB不能将一些 Java 类型自然映射到 XML 表示形式,例如,HashMap 或其他非 JavaBean 类。如参数类型为接口,以及Map ,这需要特殊的XmlAdapter类进行处理. 例如:
1、 编写要发布的web service 接口和实现
import javax.jws.WebService;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@WebService
public interface HelloWorld {
String sayHello(String text);
String sayUserHello(User user);
List<User> findUsers();
@XmlJavaTypeAdapter(UserMapAdapter.class)
Map<Integer, User> getMapUsers();
}
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import javax.jws.WebService;
@WebService(endpointInterface = "test.HelloWorld",
serviceName = "HelloWorld")
public class HelloWorldImpl implements HelloWorld {
public String sayHello(String text) {
return "Hello " + text;
}
public String sayUserHello(User user) {
return "Hello " + (user!=null?user.getUsername():"guest");
}
public List<User> findUsers() {
ArrayList<User> list = new ArrayList<User>();
list.add(new UserImpl("aa","bb"));
list.add(new UserImpl("aa1","bb"));
list.add(new UserImpl("aa2","bb"));
list.add(new UserImpl("aa3","bb"));
return list;
}
public Map<Integer,User> getMapUsers() {
Map<Integer, User> users = new LinkedHashMap<Integer, User>();
users.put(1, new UserImpl("aa","bb"));
users.put(2, new UserImpl("sss","sss"));
return users;
}
}
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
@XmlJavaTypeAdapter(UserAdapter.class)
public interface User {
String getPassword();
String getUsername();
void setUsername(String username);
void setPassword(String password);
void setUserId(Integer userId);
Integer getUserId();
}
@XmlType(name = "User")
public class UserImpl implements User {
private Integer userId;
private String username;
private String password;
public Integer getUserId() {
return userId;
}
public void setUserId(Integer userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public UserImpl(String username, String password) {
super();
this.username = username;
this.password = password;
}
public UserImpl() {
}
public UserImpl(String username) {
this.username = username;
}
public UserImpl(Integer userId, String username, String password) {
this.userId = userId;
this.username = username;
this.password = password;
}
}
2、 编写适配器
因为JAXB不支持将HashMap 或其他非 JavaBean 类 自然映射到xml表示形式,这样就要定义一个适配器使用java类型适应自定义编组.一般有两步:
1>. 编写一个类继承XmlAdapter,以实现此抽象类的适配器。
2>. 安装使用注释 XmlJavaTypeAdapter 的适配器。
类XmlAdapter的说明:
类 XmlAdapter<ValueType,BoundType>
BoundType - JAXB 不知道如何处理的一些类型。编写一个适配器,以便允许通过 ValueType 将此类型用作内存表示形式。
ValueType - JAXB 无需其他操作便知道如何处理的类型。
其两个抽象方法:
marshal(...):编组过程中,JAXB 绑定框架调用 XmlAdapter.marshal(..) 将 bound 类型修改为 value 类型,然后将 value 类型编组为 XML 表示形式。
unmarshal(...):解组过程中,JAXB 绑定框架首先将 XML 表示形式解组为 value 类型,然后调用 XmlAdapter.unmarshal(..) 将 value 类型修改为 bound 类型。
常用的几个注释说明:
a.@XmlJavaTypeAdapter 注释可以与下列编程元素一起使用: JavaBean 属性 、字段、参数 、包 Cou
分享到:
相关推荐
CXF+Spring+Tomcat发布WebService
CXF+Jetty发布WebService
简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...
CXF+Tomat发布WebService没有Spring
cxf+spring+tomcat 只是演示,一个helloWorld的例子
这个是cxf+spring发布webservice和restservice的服务端项目
Spring+CXF+MyBatis整合代码,运行即可使用。
cxf+spring+client+springmvc
cxf+spring实现webservice
用CXF+Eclipse开发Web Services程序,包括环境搭建,插件安装以及简单的Web Services入门程序。
CXF+spring+struts实现WebService
Spring+CXF+tomcat开发webservice,包含服务端和客户端,导入myeclipse就可以用。帮助大家搭建webservice框架,实现webservice功能。
详细描述了在Eclipse环境下,使用CXF开发并在Tomcat中部署Web服务的步骤及注意事项,均是具体实验后的总结,适合初学者参考
cxf2.1.3 web项目Helloworld,在tomcat6.0可以跑,相关lib可以从cxf.apache.org下载.
CXF+spring+restful创建一个web的接口项目源代码,添加了restful实现的配置及jar包
这个是cxf 集成spring 的webservice的例子 供大家参考
CXF+Spring+MyBatis+Maven项目整合,包含服务端和客户端。
1):含有spring-3.2.8.RELEASE.jar、velocity-tools-2.0.jar、velocity-1.7.jar、mybatis-spring-1.0.2.jar、mybatis-3.0.6.jar、cxf-api-2.2.9.jar等丰富的jar包。 2):采用spring3.2作为bean容器管理,...
内容为CXF整合spring的服务端和客户端开发例子,注释不太详尽,网上的教程比较多,但是多跑不起来,特地把整个工程都打包给大家做参考,程序内容均来自网上整理,均可以运行。
代码是我一行行敲的,直接部署就能用,service,client端实现了:(cxf用的是3.0最新的) 1维数组, 2维数组, 3维数组, List, List , Map(adapter方式实现的), 直接返回bean, 返回object[], 做了header的安全认证校验.