? 官網上很辛苦在一個旮旯里找到如何向 Mule暴露的axis web service 傳遞復雜數據類型 ,http://www.mulesource.org/pages/viewpage.action?pageId=4678, 官網上只提供了原理,自己補充了一下客戶端測試代碼,部分服務類做了修改。
???
? 類清單:
? Person: 數據類,測試復雜數據類型的傳遞
? PersonService: 服務接口類
? PersonServiceImpl: 服務實現類。
? PersonServiceLaucher: Mule服務器啟動類
? PersonClient: 客戶端測試類。
? person-config.xml, Mule 配置,其中將 PersonServiceImpl 暴露為一個axis1.4的服務。
1. Person數據類
Java代碼
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.? 服務接口類
Java代碼
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. 實現類:
Java代碼
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代碼
? <? 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啟動
Java代碼
? 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. 測試類
Java代碼
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。
總結
以上是生活随笔 為你收集整理的Mule web service调用中的复杂类型传递 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。