Flex3与EJB3的WebService通讯

项目中使用了Flex3 + EJB3 + WebService的方案,这里做了个小例子,总结一下。

此例的业务很简单,就是一个部门职员系统。

在EJB3中写WebService是很简单的,只要几个annotation而已,如下

 

@Stateless 
@javax.jws.WebService(name = "HumanResourcesWS",
	serviceName = "HumanResourcesService",
	portName = "HumanResourcesPort")
@WebContext(contextRoot = Constants.CONTEXT_ROOT, urlPattern = "/HumanResources")
public class HumanResourcesServiceBean implements HumanResourcesService {

	@WebMethod
	public boolean saveEmployee(EmployeeBean employee) {
		System.out.println(employee);
		return true;
	}
	
	@WebMethod
	public List<EmployeeBean> findEmployee(int departmentId, String position) {
		System.out.println("departmentId : " + departmentId);
		System.out.println("position : " + position);
		
		List<EmployeeBean> list = new ArrayList<EmployeeBean>();
		list.add(MockDAO.generateRonny(departmentId));
		list.add(MockDAO.generateRichard(departmentId));
		
		return list;
	}
	
	@WebMethod
	public DepartmentBean getDepartment(int departmentId) {
		System.out.println("departmentId : " + departmentId);
		return MockDAO.generateJavaDepartment();
	}
}

 

@WebContext(contextRoot = Constants.CONTEXT_ROOT, urlPattern = "/HumanResources") 注解将决定WSDL的地址

 

这方面相关的资料很多,这里就不多说了

 

Flex方面,首先写了一个BaseService父类,继承了mx.rpc.soap.WebService

 

调用WebService前要赋值 webService.wsdl = WebService的WSDL地址,然后webService.loadWSDL();

 

调用服务端WebService方法,有2中方式推荐

1. 使用AbstractOperation

var op : AbstractOperation = webService.getOperation( WebService Method Name );
op.addEventListener(ResultEvent.RESULT, 回调函数);
op.send(多个参数用逗号隔开);

2. 直接使用动态命名

webService.WebSerivceMethodName.addEventListener(ResultEvent.RESULT, 回调函数);
webService.WebSerivceMethodName(多个参数用逗号隔开);

 

在回调函数中使用event.result as Object;取得返回结果

 

我将这个例子打包成.ear文件,下载后放到jboss-4.2.3.GA\server\default\deploy目录中,然后启动JBoss


访问 http://localhost:8080/onecompanyweb/flex/onecompanyflex.html 即可看到效果

.ear文件包含java和flex的源代码,想研究的可以仔细看看

你可能感兴趣的:(html,jboss,webservice,Flex,SOAP)