posts - 84, comments - 54, trackbacks - 0, articles - 0
   :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

在RAD7中为EJB创建Web Service

Posted on 2009-03-17 15:23 马达+斯加 阅读(995) 评论(0)  编辑  收藏 所属分类: Websphere Portal
 

一、准备工作

因为本地测试服务器WAS6.0,所以先在RAD7中打开window>preferences>web services>Server and Runtime,在Server项选择WebSphere v6.0 Server

Workspace中创建一个Websphere v6.0的本地服务器。

创建一个Enterprise Application Project项目:Weather,须包含一个EJB项目和一个dynamic web项目。WeatherWeb在创建之后保持空,专门提供Web Service


接下来,为项目创建一个EJB

为了简化过程,只在WeatherEJBEJB中写了简单的方法,例如:
    public String getInformation(){
        
return "WEATHER WEB SERVICE";
    }

    
    
public int getTemperature(Calendar date) {
        
return 26;
    }

    
    
public String getWind(Calendar date) {
        
return "SW";
    }
 

然后,在WeatherEJB上点击右键,选择Prepare for Deployment

 

二、EJB生成Webservice

右键点击WeatherEJBBean,选择Webservices->Create Webservice

因为是从JavaWebservice,在Web Service type中选择Bottom up EJB Web Service。在Service implementation点击Browse,选择刚才创建的EJB。确保Configuration 中的项目正确后,其他选项保持默认,点击Next




 

之后一直按Next,出现Start server的按钮,点击Start

如果在第一阶段创建EAP的时候没有创建dynamic web项目的话,在此过程中,RAD将会自动创建一个web项目。但是,这个web项目中并不会自带ibm-web-bnd.xmi文件,这在本地环境下没问题,当发布到有多个应用服务器的环境中时,就会遇到以下的错误提示:

ADMA0010E: A Validation error occurred in task Selecting virtual hosts for Web modules. A virtual host is not specified for Web module WeatherWeb with URI WeatherWeb.war,WEB-INF/web.xml."

本地服务器启动以后,我们的EAR将会被自动发布,打开Console视图,应该可以看到如下信息:



 

打开IE,输入http://localhost:9080/WeatherWeb/services/WeatherEJB,如果Web Service成功发布,则可以看到如下信息:

{http://bean}WeatherEJB

Hi there, this is a Web service!

 

三、测试Web Service

RAD提供了多种途径进行Web Service的测试。

1.使用Web Services Explorer测试

Project Explorer视图下,展开JSR-109 Web Services,右键点击WeatherEJBService,选择Test With Web Service Explorer



 

之后,IE会打开一个新窗口,在Endpoints栏,新增一个项目:

http://localhost:9080/WeatherWeb/services/WeatherEJB

然后转到左侧的Navigator,展开WeatherEJBSoapBinding,就可以对EJB下的Method逐个进行测试了。




 

2.使用Test JSP 测试

Web Services Explorer无法对SOAP/JMSweb service进行测试,而通过生成Test JSP则可以。

同样在WeatherEJBService上点击右键,选择Generate Client

拖动左侧滑块调整Client Generation Level Test Client

Client Project项指定WeatherWeb,然后点Next



 

然后选择需要测试的方法。完成以后,在WeatherWeb下应该会自动生成一个sampleWeatherEJBProxy的目录,右击TestClient.jsp选择Run As -> Run on Server,选择我们的本地测试服务器。



 

TestClient.jsp上包含了Methods, Inputs, Results三个框架,便可以对Service逐个进行测试。其中setEndpoint()可以为本地测试选择不同的Endpoint。需要注意的是,为方便测试,Web Service返回类型一定要实现toString(),否则在Result中只能看到类似itso.objects.Weather@61a607dc的结果。



 

3. Write a Java Client that uses the stubs

在前面的步骤中,已经利用RAD生成了一个Client。利用Stubs访问Web Service变得非常简单。在此用一个简单的Servlet以测试:

package servlet;

import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.rmi.RemoteException;
import java.util.Calendar;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.rpc.ServiceException;

import ejbs.GetTemperatureResponse;
import ejbs.Weather;
import ejbs.WeatherServiceLocator;

/**
 * Servlet implementation class for Servlet: GetTemperature
 *
 
*/

 
public class GetTemperature extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
    
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     
*/

    
public GetTemperature() {
        
super();
    }
       
    
    
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
     
*/

    
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        WeatherServiceLocator weatherServiceLocator 
= new WeatherServiceLocator();
        
try {
            URL serviceURL 
= new URL("http://dpta00398:9080/WeatherWeb/services/Weather");
            Weather weather 
= weatherServiceLocator.getWeather(serviceURL);
            ejbs.GetTemperature inParam 
= new ejbs.GetTemperature();
            inParam.setDate(Calendar.getInstance());
            GetTemperatureResponse rsp 
= weather.getTemperature(inParam);
            response.getWriter().write(
"Temperature:" + rsp.getGetTemperatureReturn());
        }
 catch (MalformedURLException e) {
            response.getWriter().write(e.getMessage());
        }
 catch (ServiceException e) {
            response.getWriter().write(e.getMessage());
        }
 catch (RemoteException e) {
            response.getWriter().write(e.getMessage());
        }

        
    }
      
    
    
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
     
*/

    
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
                 
}

 

参考资料:《WebSphere Version 6 Web Services Handbook Development and Deployment》


只有注册用户登录后才能发表评论。


网站导航: