Terry.Li-彬

虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业。

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  143 随笔 :: 344 文章 :: 130 评论 :: 0 Trackbacks
Java代码 复制代码
  1.   public   class  Person    
  2.   {   
  3. private  String name;   
  4. private  String surname;   
  5. private  Date registerDate =  new  Date();   
  6. private   int  age =  20 ;   
  7.    ...  


2.  服务接口类
Java代码 复制代码
  1.  public interface PersonService {      
  2. String printPerson(Person person) ;    
  3. Person createPerson(String name,String surname,int age);       
  4.     Person[] batchCreatePerson(String namePattern);   
  5.  }  


3. 实现类:
Java代码 复制代码
  1. package demo.mule.person;   
  2.   
  3. public class PersonServiceImpl implements PersonService {   
  4.     public String printPerson(Person person) {         
  5.         return "person:name=" + person.getName() +",surname=" + person.getSurname();   
  6.     }   
  7.        
  8.     /**  
  9.      * test return a complex type by web service  
  10.      */  
  11.     public Person createPerson(String name, String surname,int age) {   
  12.         Person p = new Person(name,surname);   
  13.         p.setAge(age);   
  14.         System.out.println("a person is created:" + p.getName());   
  15.         return p;   
  16.     }   
  17.        
  18.     public Person[] batchCreatePerson(String namePattern) {   
  19.         Person[] persons = new Person[3];   
  20.         for (int i = 0; i < persons.length; i++) {   
  21.             Person p = new Person(namePattern + i,namePattern + i);   
  22.             p.setAge( 20 + i );   
  23.             persons[i] = p;   
  24.         }   
  25.         return persons;   
  26.     }   
  27. }  


4. person-config.xml
Xml代码 复制代码
  1.   <?xml version="1.0" encoding="UTF-8"?>  
  2. <!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN" "http://mule.mulesource.org/dtds/mule-configuration.dtd">  
  3. <mule-configuration id="mule-test" version="1.0">  
  4.     <model name="personService">  
  5.         <!-- test: http://localhost:8082/services/personService?method=createPerson -->              
  6.         <mule-descriptor name="personService" implementation="demo.mule.person.PersonServiceImpl">  
  7.             <inbound-router>  
  8.                 <endpoint address="axis:http://localhost:8082/services"></endpoint>  
  9.             </inbound-router>        
  10.             <!-- not nessesary    
  11.             <properties>  
  12.                 <property name="style" value="wrapped"/>  
  13.                 <property name="use" value="literal"/>  
  14.             </properties>        
  15.             -->  
  16.         </mule-descriptor>               
  17.     </model>  
  18. </mule-configuration>  



5. server启动
Java代码 复制代码
  1.   public class PersonServiceLaucher {   
  2. public static void main(String[] args) throws ConfigurationException {   
  3.     MuleXmlConfigurationBuilder muleXmlConfigurationBuilder = new MuleXmlConfigurationBuilder();   
  4.     UMOManager manager = muleXmlConfigurationBuilder.configure("demo/mule/person/person-config.xml");   
  5. }   



6. 测试类
Java代码 复制代码
  1.  public class PersonClient {       
  2.     private MuleClient muleClient ;    
  3.     public PersonClient() {   
  4.         try {   
  5.             muleClient = new MuleClient();   
  6.         } catch (UMOException e) {         
  7.             e.printStackTrace();   
  8.         }   
  9.     }   
  10.   
  11.     public void testPrintPerson() throws Exception {   
  12.            
  13.         Person person = new Person("David","Jones");   
  14.         UMOMessage msg = new MuleMessage(person );   
  15.         UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=printPerson",msg);   
  16.            
  17.         System.out.println("message:" + message.getPayloadAsString());   
  18.     }   
  19.        
  20.     public void testCreatePerson() throws Exception {   
  21.         Object[] args = new Object[]{"小龙","李"new Integer(23)};   
  22.         UMOMessage msg = new MuleMessage(args );   
  23.         UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=createPerson",msg);   
  24.        
  25.         Person p = (Person)message.getPayload();   
  26.         System.out.println("message:" + message.getPayloadAsString());   
  27.         System.out.println("payload:" + p.getName() +"," + p.getSurname() +"," + p.getAge());   
  28.     }   
  29.        
  30.     public void testBatchCreatePerson() throws UMOException {   
  31.         Object[] args = new Object[]{"Admin"};   
  32.         UMOMessage msg = new MuleMessage(args );   
  33.         UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=batchCreatePerson",msg);   
  34.            
  35.         Person[] ps = (Person[])message.getPayload();   
  36.         System.out.println("persons:" + ps.length);   
  37.         for (int i = 0; i < ps.length; i++) {   
  38.             Person p = ps[i];   
  39.             System.out.println("person:" + p.getName() +"," + p.getSurname() +"," + p.getAge());   
  40.         }          
  41.     }   
  42.     public static void main(String[] args) throws Exception {   
  43.         PersonClient personClient = new PersonClient();   
  44.         personClient.testPrintPerson();   
  45.         personClient.testCreatePerson();           
  46.         personClient.testBatchCreatePerson();   
  47.     }   
  48. }  



测试过程:
1) 启动Mule服务容器
2) 执行PersonClient


总结:
  1) Mule暴露POJO为一个服务还是很简单的, 配置非常少
  2) 传递和返回Java复杂数据类型,自定义数据类型都非常方便。不过,客户端需要明确知道每个方法传递的参数个数和类型,以及返回的参数类型,并且需要自己type cast。 在具体项目中,可以自己再做一层封装或用AOP, 以本地调用的方式调用 mule 的web service。
posted on 2009-09-19 20:42 礼物 阅读(1735) 评论(0)  编辑  收藏 所属分类: AxisESB