cxf java 实体对象_(四)CXF处理JavaBean以及复合类型

前面讲的是处理简单类型,今天这里来讲下CXF处理JavaBean以及复合类型,比如集合;

这里实例是客户端传一个JavaBean,服务器端返回集合类型;

在原来的项目实例基础上,我们先创建一个实体类User:

packagecom.wishwzp.entity;/*** 用户实体类

*@authorAdministrator

**/

public classUser {private Integer id; //编号

private String userName; //用户名

private String password; //密码

publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getUserName() {returnuserName;

}public voidsetUserName(String userName) {this.userName =userName;

}publicString getPassword() {returnpassword;

}public voidsetPassword(String password) {this.password =password;

}

}

再创建一个Role实体类:

packagecom.wishwzp.entity;/*** 角色实体

*@authorAdministrator

**/

public classRole {private Integer id; //编号

private String roleName; //角色名称

publicRole() {super();//TODO Auto-generated constructor stub

}publicRole(Integer id, String roleName) {super();this.id =id;this.roleName =roleName;

}publicInteger getId() {returnid;

}public voidsetId(Integer id) {this.id =id;

}publicString getRoleName() {returnroleName;

}public voidsetRoleName(String roleName) {this.roleName =roleName;

}

}

然后HelloWorld再加一个接口方法getRoleByUser,通过用户查找角色:

packagecom.wishwzp.webservice;importjava.util.List;importjavax.jws.WebService;importcom.wishwzp.entity.Role;importcom.wishwzp.entity.User;

@WebServicepublic interfaceHelloWorld {publicString say(String str);public ListgetRoleByUser(User user);

}

然后HelloWorld接口实现类 HelloWorldImpl写下新增的方法的具体实现,我们这里写死,模拟下即可:

packagecom.wishwzp.webservice.impl;importjava.util.ArrayList;importjava.util.List;importjavax.jws.WebService;importcom.wishwzp.entity.Role;importcom.wishwzp.entity.User;importcom.wishwzp.webservice.HelloWorld;

@WebServicepublic class HelloWorldImpl implementsHelloWorld{publicString say(String str) {return "hello " +str;

}public ListgetRoleByUser(User user) {//TODO Auto-generated method stub

List roleList=new ArrayList();//模拟 直接写死

if(user!=null){if(user.getUserName().equals("wishwzp") && user.getPassword().equals("123456")){

roleList.add(new Role(1,"技术总监"));

roleList.add(new Role(2,"架构师"));

}else if(user.getUserName().equals("jack") && user.getPassword().equals("123456")){

roleList.add(new Role(3,"程序员"));

}returnroleList;

}else{return null;

}

}

}

c51fd9ba6a2618b68fdd62158bde8bad.png

服务端其他地方不用动;

下面我们来处理下客户端,和前面讲的一样。我们用wsdl2java工具重新生成代码,这里就不再讲;

如:

我的地址是:D:\eclipse_workspace\WS_Client\src\main\java 你们的可能和我不一样:

然后我们进入dos,进入上面的本地硬盘地址,然后执行命令:wsdl2java http://192.168.0.110/helloWorld?wsdl

4f3147165e224149b42ca6100b0d65e6.png

这里我看到,实体类,以及接口实现,代码都生成了。

我们改下Client类:

packagecom.wishwzp.webservice;importjava.util.List;public classClient {public static voidmain(String[] args) {

HelloWorldService service=newHelloWorldService();

HelloWorld helloWorld=service.getHelloWorldPort();//System.out.println(helloWorld.say("wishwzp测试"));

User user=newUser();

user.setUserName("jack");

user.setPassword("123456");

List roleList=helloWorld.getRoleByUser(user);for(Role role:roleList){

System.out.println(role.getId()+","+role.getRoleName());

}

}

}

运行截图:

0dd0fdba8d60fc0a1d8342076f1e7b3c.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在调用 WebService 时,有时候会遇到 CXF 无法自动转化的类型,比如一些自定义类型或者复杂类型。此时,需要手动处理类型转化。 一种常见的方式是使用 JAXB 生成的 Java 类来处理类型转化。具体实现步骤如下: 1. 使用 `wsimport` 工具生成客户端代码。假设 WebService 的 WSDL 地址为 `http://localhost:8080/HelloWebService?wsdl`,则可以使用以下命令生成客户端代码: ``` wsimport -p com.example.client http://localhost:8080/HelloWebService?wsdl ``` 这里的 `-p` 参数指定了生成的 Java 类所在的包名。 2. 在程序中导入生成的 Java 类,然后使用它来处理类型转化。例如,如果 WebService 的方法返回类型为 `com.example.server.User`,而 CXF 无法自动转化这个类型,那么可以使用生成的 `com.example.client.User` 类来代替: ```java import com.example.client.User; import com.example.client.HelloWebService; public class HelloClient { public static void main(String[] args) { // 创建 WebService 客户端 HelloWebService client = createClient(); // 调用 WebService 方法 User user = client.getUserById(1); // 转化类型 com.example.server.User serverUser = convertUser(user); // 处理 serverUser } private static HelloWebService createClient() { // 创建 JaxWsProxyFactoryBean 对象 JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); // 设置 WebService 地址 factory.setAddress("http://localhost:8080/HelloWebService"); // 设置接口类型 factory.setServiceClass(HelloWebService.class); // 创建 WebService 代理对象 return (HelloWebService) factory.create(); } private static com.example.server.User convertUser(User user) { com.example.server.User serverUser = new com.example.server.User(); serverUser.setId(user.getId()); serverUser.setName(user.getName()); // 处理其它属性 return serverUser; } } ``` 在这个例子中,我们先调用 WebService 方法获取到一个 `com.example.client.User` 类型对象,然后使用 `convertUser` 方法将它转化为 `com.example.server.User` 类型对象。最后,我们可以使用 `serverUser` 对象处理业务逻辑。 需要注意的是,这种方式需要手动处理类型转化,比较繁琐。如果类型比较复杂,也可能会出现转化错误的问题。因此,在设计 WebService 接口时,建议使用 CXF 支持的类型或者标准的数据交换格式(比如 XML、JSON 等),以避免类型转化的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值