web service开发 java

很多时候我们需要开发web service

下面我就介绍一下

使用到的工具:Tomcat + axis2 + eclipse

我们需要下载两个zip包,可从http://ws.apache.org/axis2/ 下载Axis2的最新版本:

axis2-1.7.3-bin.zip

axis2-1.7.3-war.zip

其中axis2-1.7.3-bin.zip文件中包含了Axis2中所有的jar文件, axis2-1.7.3-war.zip文件用于将WebService发布到Web容器中。

解压axis2-1.7.3-war.zip文件得到axis2.war包,将war包放到apache-tomcat-8.0.36\webapps目录下,启动tomcat

浏览器访问 http://localhost:8080/axis2/,如看到下面页面则表示axis2安装成功

发布web service

一POJO形式发布,不需要任何配置,会将所有的public方法都发布出去

  1. public class HelloService {
  2. public String sayHello(){
  3. return "hello";
  4. }
  5. public String sayHelloToPerson(String name){
  6. if(name==null){
  7. name = "nobody";
  8. }
  9. return "hello,"+name;
  10. }
  11. }

编译后将HelloService.class文件放到<Tomcat安装目录>\webapps\axis2\WEB-INF\pojo目录中

(如果没有pojo目录,则建立该目录)。现在我们已经成功将HelloService类发布成了WebService。

在浏览器地址栏中输入如下的URL:

http://localhost:8080/axis2/services/listServices

在浏览器地址栏中输入如下的两个URL来分别测试sayHelloToPerson和sayHello方法:

1.http://localhost:8080/axis2/services/HelloService/sayHello

2.http://localhost:8080/axis2/services/HelloService/sayHelloToPerson?name=bill

页面显示如下结果:

Xml代码  

  1. <ns:sayHelloToPersonResponse xmlns:ns="http://ws.apache.org/axis2">
  2. <return>hello,bill</return>
  3. </ns:sayHelloToPersonResponse>

在编写、发布和测试WebService时应注意如下几点:

     1. POJO类不能使用package关键字声明包。

2. Axis2在默认情况下可以热发布WebService,也就是说,将WebService的.class文件复制到pojo目录中时,

Tomcat不需要重新启动就可以自动发布WebService。

如果想取消Axis2的热发布功能,可以打开<Tomcat安装目录>\webapps\axis2\WEB-INF\conf\axis2.xml,

找到如下的配置代码:

Xml代码  

  1. <parameter name="hotdeployment">true</parameter>

将true改为false即可。要注意的是,Axis2在默认情况下虽然是热发布,但并不是热更新.

也就是说,一旦成功发布了WebService,再想更新该WebService,就必须重启Tomcat。

这对于开发人员调试WebService非常不方便,因此,在开发WebService时,可以将Axis2设为热更新。

在axis2.xml文件中找到

Xml代码  

  1. <parameter name="hotupdate">false</parameter>

将false改为true即可。

3. 在浏览器中测试WebService时,如果WebService方法有参数,需要使用URL的请求参数来指定该WebService方法

参数的值,请求参数名与方法参数名要一致,例如,要测试sayHelloToPerson方法,请求参数名应为name,如上面的URL所示。

4. 发布WebService的pojo目录只是默认的,如果读者想在其他的目录发布WebService,

可以打开axis2.xml文件,并在<axisconfig>元素中添加如下的子元素:

Xml代码  

  1. <deployer extension=".class" directory="my" class="org.apache.axis2.deployment.POJODeployer"/>

上面的配置允许在<Tomcat安装目录>\webapps\axis2\WEB-INF\my目录中发布WebService。

例如,将本例中的HelloService.class复制到my目录中也可以成功发布

(但要删除pojo目录中的SimpleService.class,否则WebService会重名)。

使用services.xml配置文件发布

用Axis2实现Web Service,虽然可以将POJO类放在axis2\WEB-INF\pojo目录中直接发布成Web Service,

这样做不需要进行任何配置,但这些POJO类不能在任何包中。这似乎有些不方便.

为此,Axis2也允许将带包的POJO类发布成Web Service。先实现一个POJO类,代码如下:

Java代码  

  1. package com.sinosoft.webservice;
  2. public class HelloServiceNew {
  3. public String sayHelloNew(){
  4. return "hello";
  5. }
  6. public String sayHelloToPersonNew(String name){
  7. if(name==null){
  8. name = "nobody";
  9. }
  10. return "hello,"+name;
  11. }
  12. public void updateData(String data){
  13. System.out.println(data+" 已更新。");
  14. }
  15. }

要想将HelloServiceNew类发布成Web Service,需要一个services.xml文件,

这个文件需要放在META-INF目录中,该文件的内容如下:

Xml代码  

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <service name="HelloServiceNew">
  3. <description>
  4. Web Service例子
  5. </description>
  6. <parameter name="ServiceClass">
  7. com.sinosoft.webservice.HelloServiceNew
  8. </parameter>
  9. <messageReceivers>
  10. <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
  11. class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
  12. <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
  13. class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
  14. </messageReceivers>
  15. </service>

其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,

name属性表示WebService名,如下面的URL可以获得这个WebService的WSDL内容:

http://localhost:8080/axis2/services/HelloServiceNew?wsdl

其中name属性名就是上面URL中"?"和"/"之间的部分。

<description>元素表示当前Web Service的描述,<parameter>元素用于设置WebService的参数,

在这里用于设置WebService对应的类名。

在这里最值得注意的是<messageReceivers>元素,该元素用于设置处理WebService方法的处理器。

例如,sayHelloNew方法有一个返回值,因此,需要使用可处理输入输出的RPCMessageReceiver类,

而updateData方法没有返回值,因此,需要使用只能处理输入的RPCInOnlyMessageReceiver类。

使用这种方式发布WebService,必须打包成.aar文件,.aar文件实际上就是改变了扩展名的.jar文件。

现在建立了两个文件:HelloServiceNew.java和services.xml。

将HelloServiceNew.java编译,生成HelloServiceNew.class。

services.xml和HelloServiceNew.class文件的位置如下:

D:\ws\ com\sinosoft\webservice\HelloServiceNew.class

D:\ws\META-INF\services.xml

在windows控制台中进入ws目录,并输入如下的命令生成.aar文件.

jar cvf ws.aar .

实际上,.jar文件也可以发布webservice,但axis2官方文档中建议使用.aar文件发布webservice.

最后将ws.aar文件复制到<Tomcat安装目录>\webapps\axis2\WEB-INF\services目录中,

启动Tomcat后,就可以调用这个WebService了。

另外services.xml文件中也可以直接指定WebService类的方法,如可以用下面的配置代码来发布WebService

Xml代码  

  1. <service name=" HelloServiceNew ">
  2. <description>
  3. Web Service例子
  4. </description>
  5. <parameter name="ServiceClass">
  6. com.sinosoft.webservice.HelloServiceNew
  7. </parameter>
  8. <operation name="sayHello">
  9. <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
  10. </operation>
  11. <operation name="updateData">
  12. <messageReceiver
  13. class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
  14. </operation>
  15. </service>

如果想发布多个WebService,可以使用<serviceGroup>元素

Xml代码  

  1. <serviceGroup>
  2. <service name="myService1">
  3. ...
  4. </service>
  5. <service name="myService2">
  6. ...
  7. </service>
  8. </serviceGroup>

中间省略的代码同上面services.xml文件的配置。

使用打包方式时,需要重新下载jstl的相关jar包jstl-1.2.jar,standard-1.1.2.jar,不然会出错

用java 实现调用Web Service的客户端

这里用到了wsdl2java简化客户端的编写

Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。

wsdl2java.bat命令可以在<Axis2安装目录>/bin目录中找到。

在使用wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是<Axis2安装目录>。

在Windows控制台输出如下的命令行来生成调用WebService的代码:

%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/HelloService?wsdl

-p client -s -o stub

其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。

-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。

在执行完上面的命令后,就会发现在当前目录下多了个stub目录,

在stub/src/client目录可以找到一个HelloServiceStub.java文件,

该文件复杂调用WebService,可以在程序中直接使用这个类,代码如下:

Java代码  

  1. package client;
  2. public class StupTest {
  3. public static void main(String[] args) throws Exception
  4. {
  5. HelloServiceStub stub = new HelloServiceStub();
  6. HelloServiceStub.SayHelloToPerson gg = new HelloServiceStub.SayHelloToPerson();
  7. gg.setName("美女");
  8. System.out.println( stub.sayHello().get_return());
  9. System.out.println(stub.sayHelloToPerson(gg).get_return());
  10. }
  11. }

输出结果如下:

hello

hello,美女

上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。

但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,

类名为方法名,例如,sayHelloToPerson方法的参数都封装在了SayHelloToPerson类中,

要想调用sayHelloToPerson方法,必须先创建SayHelloToPerson类的对象实例。

时间: 2024-12-15 08:17:40

web service开发 java的相关文章

JAX-RS 方式的 RESTful Web Service 开发

JAX-RS 方式的 RESTful Web Service 开发 ——基于 CXF+Spring 的实现 Web Service 目前在风格上有两大类,一个是基于 SOAP 协议,一个是完全遵循 HTTP 协议规范的 RESTful 风格. SOAP 方式的 web service 已经很成熟了,应用也很广,已经成为 Web Service 的工业标准.不过 RESTful Web Service 现在势头越来越猛,特别是其灵活性以及与 Ajax 的完美结合,让人爱不释手,很有必要了解一下.

微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战

微软实战训练营 上海交大(A)实验班.(X)重点班 内部课程资料 链接:http://pan.baidu.com/s/1jGsTjq2 密码:0wmf <微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web Service开发实战>微软实战训练营 上海交大(A)实验班.(X)重点班 .(E)英语口语班http://54peixun.com/MSTrainingCamp/index.html 微软实战训练营(X)重点班第(1)课:SOA必备知识之ASP.NET Web S

Web Service开发详解

第7章 Web Service开发详解 7.1 Web Service基本概念 7.2 Web Service的应用场景 7.3 创建简单的Web Service项目应用 7.4 Web Service属性介绍 7.5 ASP.NET如何调用Web Service 7.6.1 通过webbehavior.htc调用Web Se 7.6.2 通过Microsoft.XMLDOM调用Web S 7.6.3 XMLHTTP POST调用Web Service 7.6.4 SOAP调用Web Servi

Java restful web service 开发入门

可用的框架有不少,我用的是jersey. 直接上代码,其实,如果你会web service 这个restful的就很好理解了,自己跑一遍就OK了 用到的类 User.java 1 package demo.helloworld; 2 3 import javax.xml.bind.annotation.XmlRootElement; 4 5 /** 6 * @author edi_kai 7 * @version 创建时间:2015-8-20 下午03:46:24 8 * 类说明 9 */ 10

二、Web Service开发(.net)

.net平台内建了对Web Service的支持,包括Web Service的构建和使用.与其它开发平台不同,使用.net平台,你不需要其他的工具或者SDK就可以完成Web Service的开发了..net Framework本身就全面支持Web Service,包括服务器端的请求处理器和对客户端发送和接受SOAP消息的支持.下来我们就一步一步的用Microsoft Visual Studio .net 2005(后面简称VS.Net 2005)创建和使用一个简单的Web Service. 2.

JAVA开发Web Service几种框架介绍

在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对Web Service服务的一种实现.)前面几项都为开源项目,而其中又以axis2与cxf所最为常用,Axis与XFire已随着技术不断的更替慢慢落幕,而目前也只有axis2和cxf官方有更新,Axis与XFire都已不再更新. 下面就分别介绍下这几个框架之间的区别,以便大家进行更好的选择:

Java RESTful Web Service相关概念

原文地址:http://1.liangtao.sinaapp.com/?p=647 接上一篇文章REST|RESTful初步认识:http://1.liangtao.sinaapp.com/?p=639之后,在接下来的了解中也遇到了一些问题,不太懂的Java WebService这一套体系结构,导致对一些技术术语是是而非,对于若干技术,若干规范没有一个整体上的认识.这篇文章即是对Java中RESTful WebService架构相关规范,技术的认识. Web Service 从表明上来看,Web

Web Service学习-CXF开发Web Service实例demo(一)

Web Service是什么? Web Service不是框架.更甚至不是一种技术. 而是一种跨平台,跨语言的规范 Web Service解决什么问题: 为了解决不同平台,不同语言所编写的应用之间怎样调用问题.比如.有一个C语言写的程序.它想去调用java语言写的某个方法. 集中解决:1,远程调用 2.跨平台调用 3,跨语言调用 实际应用: 1.同一个公司的新,旧系统的整合.Linux上的java应用,去调用windows平台的C应用 2,不同公司的业务整合.业务整合就带来不同公司的系统整合.不

使用Myeclipse 8.5开发基于JAX-WS的Web service实例

使用Myeclipse 8.5开发基于JAX-WS的Web service实例  本文为Web service 开发入门篇,主要介绍在Myeclipse 8.5环境下开发Web service的服务程序和客户端程序的基本流程.  在Weblogic 10.3.4 中部署Web service服务.   开发环境如下:  JAVA IDE: Myeclipse 8.5 开发Web service服务程序,需要了解以下相关内容, WSDL, SOAP, XML.这些是组成Web service 的基