基于JAX-RPC的快速Web服务开发方案

类别:Java 点击:0 评论:0 推荐:

      前两天写了两篇Blog使用SOAP开发java web服务--Axis开发方案 ,深入探索SOAP1.1--使用SAAJ1.2.1 ,有些读者可能对Java的web服务开发抱怨了,怎的那么复杂呢?不如在net平台下敲几个键就行了,:),请先不用着急,前两天我的Blog只是为了让各位读者深入了解一下什么是SOAP,以及其在Java中的封装接口实现,今天我们来讨论一下,一种高层的web服务实现方案,那就是基于JAX-RPC的服务实现。
      JAX-RPC 1.1规范没有定义用于实现基于JAX-RPC的服务的任何API。基于JAX-RPC的服务均可使用Java类或使用WSDL文档实现,这两种情况,JAX-RPC均不为其服务端实现访问和使用部署的服务指定任何要求。基于JAX-RPC的服务于开发RMI应用程序极为相似(JAX-RPC是使用基于SOAP的RPC和WSDL机制调用异源环境中运行的web服务,集成了远程过程调用(RPC)的性能,通过提供Java与XML/WSDL之间所需的映射,封装了底层SOAP包装和消息交换的复杂操作)。

一、基于Java类开发JAX-RPC服务。
       步骤与RMI开发基本类似:
        1)定义远程接口(服务定义);
        2)实现方案远程接口(服务实现方案);
        3)配置服务;
        4)生成部署文件;
    我实现的例子:  
    1、定义远程接口(StudentInfoIF.java):
/**
 *StudentInfoIF.java
 *Copyright 2005-2-10
 *@author 阿飞
 */
package edu.cun.jws.jaxrpc;

import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 *该接口主要用于jax-rpc服务定义(远程接口)
 */
public interface StudentInfoIF extends Remote{
 /**
  *@param studentName 这是一个学生名字的字符串表达
  *@return String 返回学生的信息
  */
    public String getStudentInfo(String studentName) throws RemoteException;
}
    2、实现远程接口(StudentInfoImpl.java):
/**
 *StudentInfoImpl.java
 *Copyright 2005-2-10
 *@author 阿飞
 */
package edu.cun.jws.jaxrpc;
 
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 *实现远程接口StudentInfoIF,服务实现方案
 *@see StudentInfoIF
 */
public class StudentInfoImpl implements StudentInfoIF{
 
 public String getStudentInfo(String studentName){
  System.out.println("Your name:"+studentName);
  return new String(" Hello");
 }
}
   对上面的源文件进行编译:java *.java  -d .
最后在当前文件夹得到一个edu文件夹,里面就是我们的需要的服务的字节类。
   3、准备部署
      由于是使用JWSDP1.5的开发工具,读者请到SUN网站下载JWSDP开发工具http://java.sun.com/webservices/downloads/webservicespack.html:
我们使用的是jwsdp安装路径/jaxrpc/bin中的工具wsdeploy,该工具先通过调用wscompile  -gen:server来完成编译(由于现在我们部署的对象是Tomcat,所以我们要调用wsdeploy,如果是标准的J2EE实现方案的容器的话,使用wscompile就行了,具体请看帮助文档): 
       因为使用的是wsdeploy,所以要先编写一个jaxrpc-ri.xml文件,针对我们这次的例子:
<?xml version="1.0" encoding="UTF-8"?> 
<webServices 
       xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/dd" 
       version="1.0" 
       targetNamespaceBase="http://www.cun.edu.cn/jws/wsdl"                 <------------这个是你自己命名的空间
       typeNamespaceBase="http://www.cun.edu.cn/jws/types"                  <------------也是自己定义的
       urlPatternBase="/StudentInfo"> 
       <endpoint 
           name="StudentInfo"  
           interface="edu.cun.jws.jaxrpc.StudentInfoIF"                                 <-----------这个是我们提供的接口                  
           implementation="edu.cun.jws.jaxrpc.StudentInfoImpl"/>                 <-----------实现接口的类
       <endpointMapping 
           endpointName="StudentInfo" 
           urlPattern="/Info"/>                                                                        <-----------等于是web.xml文件中的url-pattern
</webServices> 
        如果需要事先对web.xml文件填充的话:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
    version="2.4">
 <session-config>
  <session-timeout>60</session-timeout>
 </session-config>
</web-app>
准备部署工作完毕。
    4、部署(要熟悉j2ee部署规范,这里我的部署对象是Tomcat)
   我们创建一个文件夹StudentInfo
以下是文件夹内容
/StudentInfo
       /WEB-INF
              /classes                                                                  <-------把我们的服务程序拷到这里,这里是edu文件夹
              /lib                                                                         <-------必须的包,
      web.xml                                                                         <-------上面我们编写的文件
      jaxrpc-ri.xml                                                                   <-------上一步编写的文件
注意这里必须的包包括JAX-RPC相关的包,还有SAAJ相关的包(JavaMail,JAF,JAXP),我这里用了以下几个包(由于是使用jdk1.5,所以JAXP相关包不在内):activation.jar(JAF),jaxrpc-api.jar,jaxrpc-impl.jar,jaxrpc-spi.jar,mail.jar,saaj-api.jar,saaj-impl.jar;
好了之后,我们打包成一个war文件(由于wsdeploy需要的输入文件是一个war存档文件):
转换到到StudentInfo目录下,设置好运行wsdeploy的运行路径,运行:
    jar cvf   StudentInfo.war  *
    wsdeploy  -o StudentInfoApp.war StudentInfo.war
    最后我们得到一个StudentInfoApp.war文件,该文件就是我们需要的部署web服务的程序。我们把它拷到Tomcat的webapps目录下,就自动部署好了
    5、测试
    在浏览器中输入:http://localhost:8080/StudentInfoApp/Info 

测试成功,web服务部署完毕,客户端的测试的话,自己编写,可以使用java,也可以使用net平台等作为客户端,请参考我的例子:使用SOAP开发java web服务--Axis开发方案 ,就是使用C#作为服务的调用客户端。

    ps:基于JAX-RPC的web服务开发就是这么简单,很多内部转换的内容都已经自动完成了,我们可以把精力集中于商业逻辑上来,欢迎大家加入Java Web Service的开发行列来。

对这篇文章有什么问题的读者可以留言给我,或者发送问题到我的E-mail:[email protected]

本文地址:http://com.8s8s.com/it/it11433.htm