-
?
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(); ??
- ????} ??
- ???? ??
- ?????
- ?
- ??
- ????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">??
- ??????????????????? ??
- ????????<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。