分享
 
 
 

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

王朝other·作者佚名  2006-05-27
窄屏简体版  字體: |||超大  

前两天写了两篇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:gdanthrowwy@126.com

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有