- ? public ? class ?Person? ??
- ??{ ??
- private ?String?name; ??
- private ?String?surname; ??
- private ?Date?registerDate?=? new ?Date(); ??
- private ? int ?age?=? 20 ; ??
- ???...??
public class Person { private String name; private String surname; private Date registerDate = new Date(); private int age = 20; ...
2.? 服務接口類
- ?public?interface?PersonService?{??? ??
- String?printPerson(Person?person)?;? ??
- Person?createPerson(String?name,String?surname,int?age);???? ??
- ????Person[]?batchCreatePerson(String?namePattern); ??
- ?}??
public interface PersonService { String printPerson(Person person) ; Person createPerson(String name,String surname,int age); Person[] batchCreatePerson(String namePattern); }
3. 實現類:
- package?demo.mule.person; ??
- ??
- public?class?PersonServiceImpl?implements?PersonService?{ ??
- ????public?String?printPerson(Person?person)?{?????? ??
- ????????return?"person:name="?+?person.getName()?+",surname="?+?person.getSurname(); ??
- ????} ??
- ???? ??
- ????/** ?
- ?????*?test?return?a?complex?type?by?web?service ?
- ?????*/??
- ????public?Person?createPerson(String?name,?String?surname,int?age)?{ ??
- ????????Person?p?=?new?Person(name,surname); ??
- ????????p.setAge(age); ??
- ????????System.out.println("a?person?is?created:"?+?p.getName()); ??
- ????????return?p; ??
- ????} ??
- ???? ??
- ????public?Person[]?batchCreatePerson(String?namePattern)?{ ??
- ????????Person[]?persons?=?new?Person[3]; ??
- ????????for?(int?i?=?0;?i?<?persons.length;?i++)?{ ??
- ????????????Person?p?=?new?Person(namePattern?+?i,namePattern?+?i); ??
- ????????????p.setAge(?20?+?i?); ??
- ????????????persons[i]?=?p; ??
- ????????} ??
- ????????return?persons; ??
- ????} ??
- }??
package demo.mule.person; public class PersonServiceImpl implements PersonService { public String printPerson(Person person) { return "person:name=" + person.getName() +",surname=" + person.getSurname(); } /** * test return a complex type by web service */ public Person createPerson(String name, String surname,int age) { Person p = new Person(name,surname); p.setAge(age); System.out.println("a person is created:" + p.getName()); return p; } public Person[] batchCreatePerson(String namePattern) { Person[] persons = new Person[3]; for (int i = 0; i < persons.length; i++) { Person p = new Person(namePattern + i,namePattern + i); p.setAge( 20 + i ); persons[i] = p; } return persons; } }
4. person-config.xml
- ??<?xml?version="1.0"?encoding="UTF-8"?>??
- <!DOCTYPE?mule-configuration?PUBLIC?"-//MuleSource?//DTD?mule-configuration?XML?V1.0//EN"?"http://mule.mulesource.org/dtds/mule-configuration.dtd">??
- <mule-configuration?id="mule-test"?version="1.0">??
- ????<model?name="personService">??
- ????????<!--?test:?http://localhost:8082/services/personService?method=createPerson?-->??????????? ??
- ????????<mule-descriptor?name="personService"?implementation="demo.mule.person.PersonServiceImpl">??
- ????????????<inbound-router>??
- ????????????????<endpoint?address="axis:http://localhost:8082/services"></endpoint>??
- ????????????</inbound-router>????? ??
- ????????????<!--?not?nessesary? ??
- ????????????<properties>??
- ????????????????<property?name="style"?value="wrapped"/>??
- ????????????????<property?name="use"?value="literal"/>??
- ????????????</properties>????? ??
- ????????????-->??
- ????????</mule-descriptor>???????????? ??
- ????</model>??
- </mule-configuration>??
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mule-configuration PUBLIC "-//MuleSource //DTD mule-configuration XML V1.0//EN" "http://mule.mulesource.org/dtds/mule-configuration.dtd"> <mule-configuration id="mule-test" version="1.0"> <model name="personService"> <!-- test: http://localhost:8082/services/personService?method=createPerson --> <mule-descriptor name="personService" implementation="demo.mule.person.PersonServiceImpl"> <inbound-router> <endpoint address="axis:http://localhost:8082/services"></endpoint> </inbound-router> <!-- not nessesary <properties> <property name="style" value="wrapped"/> <property name="use" value="literal"/> </properties> --> </mule-descriptor> </model> </mule-configuration>
5. server啟動
- ??public?class?PersonServiceLaucher?{ ??
- public?static?void?main(String[]?args)?throws?ConfigurationException?{ ??
- ????MuleXmlConfigurationBuilder?muleXmlConfigurationBuilder?=?new?MuleXmlConfigurationBuilder(); ??
- ????UMOManager?manager?=?muleXmlConfigurationBuilder.configure("demo/mule/person/person-config.xml"); ??
- } ??
public class PersonServiceLaucher { public static void main(String[] args) throws ConfigurationException { MuleXmlConfigurationBuilder muleXmlConfigurationBuilder = new MuleXmlConfigurationBuilder(); UMOManager manager = muleXmlConfigurationBuilder.configure("demo/mule/person/person-config.xml"); } }
6. 測試類
- ?public?class?PersonClient?{???? ??
- ????private?MuleClient?muleClient?;? ??
- ????public?PersonClient()?{ ??
- ????????try?{ ??
- ????????????muleClient?=?new?MuleClient(); ??
- ????????}?catch?(UMOException?e)?{?????? ??
- ????????????e.printStackTrace(); ??
- ????????} ??
- ????} ??
- ??
- ????public?void?testPrintPerson()?throws?Exception?{ ??
- ???????? ??
- ????????Person?person?=?new?Person("David","Jones"); ??
- ????????UMOMessage?msg?=?new?MuleMessage(person?); ??
- ????????UMOMessage?message?=?muleClient.send("axis:http://localhost:8082/services/personService?method=printPerson",msg); ??
- ???????? ??
- ????????System.out.println("message:"?+?message.getPayloadAsString()); ??
- ????} ??
- ???? ??
- ????public?void?testCreatePerson()?throws?Exception?{ ??
- ????????Object[]?args?=?new?Object[]{"小龍","李",?new?Integer(23)}; ??
- ????????UMOMessage?msg?=?new?MuleMessage(args?); ??
- ????????UMOMessage?message?=?muleClient.send("axis:http://localhost:8082/services/personService?method=createPerson",msg); ??
- ???? ??
- ????????Person?p?=?(Person)message.getPayload(); ??
- ????????System.out.println("message:"?+?message.getPayloadAsString()); ??
- ????????System.out.println("payload:"?+?p.getName()?+","?+?p.getSurname()?+","?+?p.getAge()); ??
- ????} ??
- ???? ??
- ????public?void?testBatchCreatePerson()?throws?UMOException?{ ??
- ????????Object[]?args?=?new?Object[]{"Admin"}; ??
- ????????UMOMessage?msg?=?new?MuleMessage(args?); ??
- ????????UMOMessage?message?=?muleClient.send("axis:http://localhost:8082/services/personService?method=batchCreatePerson",msg); ??
- ???????? ??
- ????????Person[]?ps?=?(Person[])message.getPayload(); ??
- ????????System.out.println("persons:"?+?ps.length); ??
- ????????for?(int?i?=?0;?i?<?ps.length;?i++)?{ ??
- ????????????Person?p?=?ps[i]; ??
- ????????????System.out.println("person:"?+?p.getName()?+","?+?p.getSurname()?+","?+?p.getAge()); ??
- ????????}??????? ??
- ????} ??
- ????public?static?void?main(String[]?args)?throws?Exception?{ ??
- ????????PersonClient?personClient?=?new?PersonClient(); ??
- ????????personClient.testPrintPerson(); ??
- ????????personClient.testCreatePerson();???????? ??
- ????????personClient.testBatchCreatePerson(); ??
- ????} ??
- }??
public class PersonClient { private MuleClient muleClient ; public PersonClient() { try { muleClient = new MuleClient(); } catch (UMOException e) { e.printStackTrace(); } } public void testPrintPerson() throws Exception { Person person = new Person("David","Jones"); UMOMessage msg = new MuleMessage(person ); UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=printPerson",msg); System.out.println("message:" + message.getPayloadAsString()); } public void testCreatePerson() throws Exception { Object[] args = new Object[]{"小龍","李", new Integer(23)}; UMOMessage msg = new MuleMessage(args ); UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=createPerson",msg); Person p = (Person)message.getPayload(); System.out.println("message:" + message.getPayloadAsString()); System.out.println("payload:" + p.getName() +"," + p.getSurname() +"," + p.getAge()); } public void testBatchCreatePerson() throws UMOException { Object[] args = new Object[]{"Admin"}; UMOMessage msg = new MuleMessage(args ); UMOMessage message = muleClient.send("axis:http://localhost:8082/services/personService?method=batchCreatePerson",msg); Person[] ps = (Person[])message.getPayload(); System.out.println("persons:" + ps.length); for (int i = 0; i < ps.length; i++) { Person p = ps[i]; System.out.println("person:" + p.getName() +"," + p.getSurname() +"," + p.getAge()); } } public static void main(String[] args) throws Exception { PersonClient personClient = new PersonClient(); personClient.testPrintPerson(); personClient.testCreatePerson(); personClient.testBatchCreatePerson(); } }
測試過程:
1) 啟動Mule服務容器
2) 執行PersonClient
總結:
? 1) Mule暴露POJO為一個服務還是很簡單的, 配置非常少
? 2) 傳遞和返回Java復雜數據類型,自定義數據類型都非常方便。不過,客戶端需要明確知道每個方法傳遞的參數個數和類型,以及返回的參數類型,并且需要自己type cast。 在具體項目中,可以自己再做一層封裝或用AOP, 以本地調用的方式調用 mule 的web service。