`
xiaomao1027
  • 浏览: 9901 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
最近访客 更多访客>>
社区版块
存档分类
最新评论

转:Mule web service调用中的复杂类型传递

    博客分类:
  • j2ee
阅读更多

Mule版本: 1.4.4

  官网上很辛苦在一个旮旯里找到如何向 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代码 复制代码
  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.    ...  
  public class Person 
   {
	private String name;
	private String surname;
	private Date registerDate = new Date();
	private int age = 20;
    ...



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.  }  
  public interface PersonService {	
	String printPerson(Person person) ;	
	Person createPerson(String name,String surname,int age);	
 	Person[] batchCreatePerson(String namePattern);
  }



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. }  
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代码 复制代码
  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>  
  <?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代码 复制代码
  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. }   
   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代码 复制代码
  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. }  
 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。

 

 

转载自:http://www.iteye.com/topic/300604

分享到:
评论

相关推荐

    实战Mule:利用Mule调用XFire发布的Web服务

    【实战Mule:利用Mule调用XFire发布的Web服务】这一主题主要涵盖了两个核心概念:Mule ESB(企业服务总线)和XFire,它们都是在IT领域中的重要工具,尤其在分布式系统和集成解决方案中发挥着关键作用。 Mule ESB是一...

    mule使用SOAP工件发布和消费web Service的简单例子

    SOAP是一种基于XML的消息传递协议,用于在分布式环境中交换结构化和类型化的信息。它定义了一个消息结构,使得服务提供者和消费者能够通过HTTP、SMTP等传输协议进行通信。 在Mule中,我们使用SOAP工件来处理这些...

    实战Mule:利用Mule调用XFire发布的文件上传服务

    在现代企业级应用集成(EAI)中,Mule ESB(Enterprise Service Bus)作为一种强大的中间件,广泛用于构建灵活、可扩展的系统架构。而XFire是早期的Java Web服务实现,它提供了与SOAP(简单对象访问协议)的接口,...

    mule学习demo(包含webservice调用参数转换)

    在这个"Mule学习demo"中,我们将学习如何创建和配置Flow,以便正确地调用Web服务,处理参数,并处理响应。 总结: "Mule学习demo"是一个实践性的教程,旨在帮助初学者掌握Mule ESB如何与Web服务交互,特别是参数...

    mule-2.1.1-getting-started

    - **Bookstore Example**:该示例展示了如何使用Mule构建一个小型的在线书店应用,涉及到了数据持久化、Web服务调用等技术。 - **Echo Example**:通过这个示例,可以了解如何使用Mule实现消息的回传功能。 - **...

    MuleESB用户手册第一章.pdf

    服务组件是实现业务逻辑的POJO、Spring bean或web service,它们处理消息并在Mule ESB中执行任务。通过inbound和outbound路由器,Mule ESB确保正确地将消息路由到相应服务组件,实现服务间的通信。 3. **面向服务...

    mulesoft3.8 webService consumer

    在MuleSoft 3.8版本中,Web Service Consumer是一个关键组件,允许开发者消费并集成外部Web服务,如SOAP或RESTful服务,进而在不同系统之间传递数据。以下是对这个主题的详细讲解: 1. **MuleSoft简介** MuleSoft...

    mule 详细介绍 (soa esb)

    SOA(Service Oriented Architecture),即面向服务的架构,是一种设计复杂应用系统的软件架构模型,它将应用的不同功能单元(称为服务)通过服务定义接口暴露出来,使得这些服务可以被其他应用发现和调用,从而实现...

    Mule ESB WebService Consumer 结合 DataMapper的使用

    本文主要介绍如何利用Mule ESB中的WebService Consumer与DataMapper组件相结合,实现通过HTTP传递参数并调用远程WebService,同时将返回的数据转换为JSON格式展示。 #### WebService Consumer与DataMapper概述 - *...

    Mule通过HTTP连接并传参给webService例子

    在IT行业中,企业服务总线(Enterprise Service Bus,ESB)是一种重要的中间件技术,用于构建松耦合、模块化的分布式系统。Mule ESB 是其中的佼佼者,它提供了一个灵活、可扩展的平台,允许不同系统之间进行数据交换...

    Mule 2 A Developer's Guide

    这部分介绍了 Mule 中如何使用 CXF 传输来实现 Web 服务的功能。 **从 XFire 到 CXF (From XFire to CXF)** Mule 早期版本使用了 XFire 作为 Web 服务框架,这部分讨论了从 XFire 迁移到 CXF 的过程。 **CXF 连接...

    ESB原理及Mule ESB实践

    ### ESB原理及Mule ESB实践 #### ESB(Enterprise Service Bus)原理概述 **ESB**(企业服务总线)是SOA(面向服务架构)架构中的关键组件之一,用于实现服务间的智能集成与管理。其核心作用在于简化不同系统间的...

    ESB解决方案-mule分享.docx

    ESB(Enterprise Service Bus)是传统中间件技术与 XML、WEB 服务等技术结合的产物。它提供了网络中最基本的服务总线功能,用于集成多个异构系统,实现系统之间的数据交换和业务流程集成。 一、ESB概述 ESB 是一...

    http.rar_HTTP_line8dt_mule esb

    【描述】中的内容表明,Mule ESB已经配置好并且部署了一个名为"BookService"的Web服务。这通常意味着BookService是一个对外提供服务的接口,可能是用来处理图书相关业务,如查询、购买、借阅等操作。在Mule ESB中,...

    MuleESB系统集成设计文档

    ### MuleESB系统集成设计知识点 #### 一、引言 **编写目的:** 本文档旨在详述“MuleESB系统集成项目”的设计细节,以便为项目的参与者(包括项目经理、系统设计师、开发人员、测试人员等)提供必要的参考资料。 *...

    mule_esb_soademo:soa 演示使用休息服务

    在本项目中,Mule ESB扮演了关键角色,它接收来自客户端的请求,然后根据预定义的流程调用不同的REST服务,整合返回的结果。 2. **Mule ESB**:Mule ESB的核心功能包括消息传输、转换和路由。它允许开发者创建和...

Global site tag (gtag.js) - Google Analytics