-
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。