网络编程

bbossgroups webservice引擎使用方法

发布制作:admin  发布日期:2011/6/8

ossgroups 3 webservice引擎使用方法可以参考bbossgroups培训教程的25-28页,下载地址:

http://dl.iteye.com/topics/download/5e8d0f07-53c2-34f1-a0d8-ee43369774ea



也可以参考CXF WEBSERVICE测试用例:

http://dl.iteye.com/topics/download/910322f9-0cb7-312b-935a-732504c43f63


目 录 [ - ]

  1. 通过aop组件配置cxf组件工厂调用方式
  2. 调用方法
  3. 服务发布
  4. 服务定义
  5. 服务组件和接口实现
  6. 服务实例的配置和装载
  7. 客服端调用服务

通过aop组件配置cxf组件工厂调用方式

通过aop组件配置cxf组件工厂调用方式
利用aop框架中的工厂组件管理模式,可以非常方便的获取cxf webservice服务的客服端调用接口,从而方便地实现webservice服务调用。
14.9.2.1 客服端配置文件

<properties>
   <property name="WSServiceClient" factory-bean="WSServiceClientFactory" factory-method="create"/> 
      
     <property name="WSServiceClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean"> 
         <property name="serviceClass" value="org.frameworkset.web.ws.WSService"/> 
         <property name="address" value="http://localhost:8080/bboss-mvc/cxfservices/mysfirstwsservicePort"/>          
    </property>
</properties> 


说明:
WSServiceClient-代表webservice服务客服端接口组件名称,客服端调用程序通过该名称获取服务调用接口实例,该实例通过工厂模式(组件创建工厂
WSServiceClientFactory的create方法创建)获取。
WSServiceClientFactory-组件创建工厂(非静态),webservice客服端通过该工厂的create实例方法来创建服务调用接口实例。在该工厂的定义中可以看出,为了创建webservice服务调用接口,需要指定两个属性serviceClass和address,通过serviceClass属性指定了webservice服务对应的接口,address指定了webservice服务地址。

调用方法

调用方法

public class WSClient {
ApplicationContext context ;
@Before
public void init()
{
context = ApplicationContext.getApplicationContext("org/frameworkset/web/ws/wsclient.xml");
}
@Test
public void test()
{
org.frameworkset.web.ws.WSService wsservice =  (WSService)context.getBeanObject("WSServiceClient");
System.out.println(wsservice.sayHello("多多"));
}

} 

服务发布

webservice服务装载功能,可以从mvc控制器配置文件和所有的applicationcontext对应的配置文件中配置和装载webservice服务:
在Mvc框架控制器文件中配置的ws服务会在webservice引擎启动时自动装载。
普通的applicationcontext容器对应的配置文件中配置的ws服务不能自动加载,我们需要将这些配置文件单独装配到
org/frameworkset/spi/ws/webserivce-modules.xml文件中,以便webservice引擎启动时通过扫描org/frameworkset/spi/ws/webserivce-modules.xml中装配的组件配置文件来装载其中配置的webservice服务。

org/frameworkset/spi/ws/webserivce-modules.xml文件时3.1版本中新加的用来装配独立applicationcontext中配置的ws服务的部署描述文件。

org/frameworkset/spi/ws/webserivce-modules.xml装载服务实例

<properties>
<!--
webservice服务组件装配文件,每个文件作为单独的容器来处理,这里装配的是classpath上下文中需要独立加载的webservice服务
mvc框架中需要加载的webservice服务只需要在对应的组件中标注servicePort即可,当webservice引擎启动时会加载这两种模式下的
所有webservice服务
需要注意的是,webservice引擎需要在mvc框架启动后在启动
-->
<property name="cxf.webservices.modules">
<array componentType="String">
<property value="org/frameworkset/spi/ws/protocol-ws.xml"/>
</array>
</property>

<!-- 本组件依赖于bboss-mvc.jar -->
<property name="webapplicationcontext" factory-class="org.frameworkset.web.servlet.support.WebApplicationContextUtils" factory-method="getWebApplicationContext"/>
</properties> 

服务定义

3.1版本中标识webservice服务的属性变更为ws: servicePort,服务发布引擎通过识别带ws:前缀的属性来识别webservice服务,并发布该服务,例如:

<property name="rpc.webservice.RPCCall"
  singlable="true"
  ws:servicePort="RPCCallServicePort"
class="org.frameworkset.spi.remote.webservice.RPCCall"/> 

服务组件和接口实现

服务组件和接口实现

服务接口

package org.frameworkset.web.ws;

import javax.jws.WebService;

/**
 * <p>Title: WSService.java</p> 
 * <p>Description: </p>
 * <p>bboss workgroup</p>
 * <p>Copyright (c) 2008</p>
 * @Date 2011-4-24
 * @author biaoping.yin
 * @version 1.0
 */
@WebService(name="WSService")
public interface WSService {
	
	public String sayHello(String duoduo)
	;

}



服务组件实现

package org.frameworkset.web.ws;

import javax.jws.WebService;

/**
 * <p>Title: WSServiceImpl.java</p> 
 * <p>Description: </p>
 * <p>bboss workgroup</p>
 * <p>Copyright (c) 2008</p>
 * @Date 2011-4-24
 * @author biaoping.yin
 * @version 1.0
 */
@WebService(name="WSServiceImpl")
public class WSServiceImpl implements WSService{

	public String sayHello(String duoduo) {
		System.out.println("ModuleService欢迎您!" + duoduo);
		return "ModuleService欢迎您!" + duoduo;
	}

}

服务实例的配置和装载

服务配置文件内容

<properties>
	
	<property name="mysfirstwsservice" 					  
					  ws:servicePort="mysfirstwsservicePort"				  
					  class="org.frameworkset.web.ws.WSServiceImpl"/>
</properties>	



服务配置文件装配

<properties>
<!-- 
		webservice服务组件装配文件,每个文件作为单独的容器来处理,这里装配的是classpath上下文中需要独立加载的webservice服务
		mvc框架中需要加载的webservice服务只需要在对应的组件中标注servicePort即可,当webservice引擎启动时会加载这两种模式下的
		所有webservice服务		
		需要注意的是,webservice引擎需要在mvc框架启动后在启动
	 -->
	<property name="cxf.webservices.modules" >
		<array componentType="String">
			
			<property value="org/frameworkset/web/ws/testwsmodule.xml"/>
		</array>
	</property>
	
	
	<!-- 本组件依赖于bboss-mvc.jar -->
	<property name="webapplicationcontext" 
			  factory-class="org.frameworkset.web.servlet.support.WebApplicationContextUtils" 
			  factory-method="getWebApplicationContext"/>
		
	
	
	
</properties>



客服端配置:

  <properties>
   <property name="WSServiceClient" factory-bean="WSServiceClientFactory" factory-method="create"/>  
       
     <property name="WSServiceClientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">  
         <property name="serviceClass" value="org.frameworkset.web.ws.WSService"/>  
         <property name="address" value="http://localhost:8080/bboss-mvc/cxfservices/mysfirstwsservicePort"/>           
    </property>
    </properties>  

客服端调用服务

客服端调用服务

package org.frameworkset.web.ws;

import org.frameworkset.spi.ApplicationContext;
import org.junit.Before;
import org.junit.Test;

/**
 * <p>Title: WSClient.java</p> 
 * <p>Description: </p>
 * <p>bboss workgroup</p>
 * <p>Copyright (c) 2008</p>
 * @Date 2011-4-28 下午01:59:19
 * @author biaoping.yin
 * @version 1.0
 */
public class WSClient {
	ApplicationContext context ; 
	@Before
	public void init()
	{
		context = ApplicationContext.getApplicationContext("org/frameworkset/web/ws/wsclient.xml"); 
	}
	@Test
	public void test()
	{
		org.frameworkset.web.ws.WSService wsservice =  (WSService)context.getBeanObject("WSServiceClient");
		System.out.println(wsservice.sayHello("多多"));
	}