cxf 传递对象

CXF框架简单的JavaBean对象传递进行讲解。
 第一步:创建传输的JavaBean对象(UserInfo)

[java] view plain copy
  1. package  com.ws.model;  
  2.   
  3. import  javax.xml.bind.annotation.XmlAccessType;  
  4. import  javax.xml.bind.annotation.XmlAccessorType;  
  5. import  javax.xml.bind.annotation.XmlRootElement;  
  6. import  javax.xml.bind.annotation.XmlType;  
  7.   
  8.   
  9. @XmlRootElement (name= "UserInfo" )  
  10. @XmlAccessorType (XmlAccessType.FIELD)  
  11. @XmlType (propOrder={ "userName" , "userAge" })  
  12. public   class  UserInfo {  
  13.     private  String userName;  
  14.     private  Integer userAge;  
  15.       
  16.     public  UserInfo(String name,Integer age){  
  17.         this .userAge = age;  
  18.         this .userName = name;  
  19.     }  
  20.       
  21.     public  UserInfo(){        
  22.     }  
  23.       
  24.     // 添加geter/seter方法..   
  25.       
  26. }  

注解:@XmlRootElement-指定XML根元素名称(可选)
            @XmlAccessorType-控制属性或方法序列化 , 四种方案:
                       FIELD-对每个非静态,非瞬变属性JAXB工具自动绑定成XML,除非注明XmlTransient 
                       NONE-不做任何处理
                       PROPERTY-对具有set/get方法的属性进行绑定,除非注明XmlTransient
                       PUBLIC_MEMBER -对有set/get方法的属性或具有共公访问权限的属性进行绑定,除非注 明XmlTransient
            @XmlType-映射一个类或一个枚举类型成一个XML Schema类型

第二步:创建webservices服务端接口和实现类 
   
1、创建服务端接口类

[java] view plain copy
  1. package  com.ws.services;  
  2.   
  3. import  javax.jws.WebService;  
  4. import  com.ws.model.UserInfo;  
  5.   
  6. @WebService   
  7. public   interface  IUserServices {  
  8.     public  UserInfo getUserInfo(String userName, Integer userAge);  
  9. }  

   2、创建服务端接口实现类

[java] view plain copy
  1. package  com.ws.services.impl;  
  2.   
  3. import  javax.jws.WebService;  
  4. import  com.ws.model.UserInfo;  
  5. import  com.ws.services.IUserServices;  
  6.   
  7. @WebService   
  8. public   class  UserServicesImpl  implements  IUserServices {  
  9.     public  UserInfo getUserInfo(String userName, Integer userAge) {  
  10.         return   new  UserInfo(userName,userAge);  
  11.     }  
  12. }  

3、创建服务端,并发布服务

[java] view plain copy
  1. package  com.test;  
  2.   
  3. import  javax.xml.ws.Endpoint;  
  4. import  org.apache.cxf.jaxws.JaxWsServerFactoryBean;  
  5. import  com.ws.services.impl.UserServicesImpl;  
  6.   
  7. public   class  ServerTest {  
  8.     public  ServerTest(){  
  9.         // 发布User服务接口   
  10.         Endpoint.publish("http://localhost:8090/userInfoServices"new  UserServicesImpl());  
  11.     }  
  12.     public   static   void  main(String[] args) {  
  13.         // 启动服务   
  14.         new  ServerTest();  
  15.         System.out.println("Server ready..." );     
  16.         try  {  
  17.             Thread.sleep(1000 * 300 ); //休眠五分分钟,便于测试      
  18.         } catch  (InterruptedException e) {  
  19.             e.printStackTrace();  
  20.         }     
  21.         System.out.println("Server exit..." );     
  22.         System.exit(0 );  
  23.     }  
  24. }  

第三步:创建webservices客户端,并进行测试(这里只例举在客户端工程中的测试方法) 
    1、将服务端的JavaBean和Services接口类,copy到客户端工程中,且目录要一致
    2、在客户端工程中,新建一个测试类测试

[java] view plain copy
  1. package  com.ws.client;  
  2.   
  3. import  org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
  4. import  com.ws.model.UserInfo;  
  5. import  com.ws.server.IUserServices;  
  6.   
  7. public   class  UserTest {  
  8.     public   static   void  main(String[] args) {  
  9.         //创建WebService客户端代理工厂      
  10.         JaxWsProxyFactoryBean factory = new  JaxWsProxyFactoryBean();     
  11.         //注册WebService接口      
  12.         factory.setServiceClass(IUserServices.class );     
  13.         //设置WebService地址      
  14.         factory.setAddress("http://localhost:8090/userInfoServices" );          
  15.         IUserServices userServices = (IUserServices)factory.create();     
  16.         System.out.println("invoke userinfo webservice..." );  
  17.         // 测试返回JavaBean对象的   
  18.         UserInfo user = userServices.getUserInfo("vicky"23 );  
  19.         System.out.println("UserName: " +user.getUserName());  
  20.         System.out.println("UserAge : " +user.getUserAge());  
  21.           
  22.         System.exit(0 );     
  23.     }   
  24. }  

第四步:运行webServices服务,在IE中输入http://localhost:8090/userInfoServices?wsdl ,验证服务是否成功发布
第四步:运行客户端,验证。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用CXF调用WebService时,可以通过Java对象传递参数。具体步骤如下: 1. 创建Java对象,包含需要传递的参数。 2. 使用JAXB将Java对象转换为XML格式。 3. 将XML格式的参数传递给WebService。 4. 在WebService端,将XML格式的参数再次转换为Java对象。 以下是一个简单的示例代码: ```java // 创建Java对象 Person person = new Person(); person.setName("张三"); person.setAge(20); // 将Java对象转换为XML格式 JAXBContext context = JAXBContext.newInstance(Person.class); Marshaller marshaller = context.createMarshaller(); StringWriter writer = new StringWriter(); marshaller.marshal(person, writer); String xml = writer.toString(); // 调用WebService HelloService service = new HelloService(); HelloPort port = service.getHelloPort(); String result = port.sayHello(xml); // 将XML格式的返回值转换为Java对象 Unmarshaller unmarshaller = context.createUnmarshaller(); StringReader reader = new StringReader(result); Person response = (Person) unmarshaller.unmarshal(reader); // 输出结果 System.out.println(response.getName() + "," + response.getAge()); ``` 在上述示例中,Person类是一个简单的Java对象,包含name和age两个属性。JAXBContext用于将Java对象转换为XML格式,Marshaller将Java对象编组为XML格式,而Unmarshaller则将XML格式解组为Java对象。最后,通过HelloPort的sayHello方法调用WebService,并将XML格式的参数传递给它。在WebService端,将XML格式的参数再次转换为Java对象,并返回XML格式的结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值