`
eggh
  • 浏览: 15759 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

使用JDK 6 编写 Web service

阅读更多

 

服务器端的Java类若要成为一个实现了Web Service的bean,它需要遵循下边这些原则:这个类必须是public类、不能是final的或者abstract、必须有一个公共的默认构造函数、绝对不能有finalize()方法。若要成为一个实现了Web Service的Bean的方法必须遵循这些原则:
这个方法必须是public,它的参数、返回值、和异常在每个JAX RPC规范中都描述了Java转化成XML/WSDL映射文件的规则,参数和返回值可以是原始类型、数组等等。
下面是服务器端的类HelloWorld.java:
package test.jws.service;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
@WebService(targetNamespace = "http://www.jwstest.org")
@SOAPBinding(style = SOAPBinding.Style.RPC)
publicclass HelloWorld {
    @WebMethod(action="toSayHello",operationName="toSayHello",exclude=false)
    @WebResult(name="returnWord")//自定义该方法返回值在WSDL中相关的描述
    public String sayHello(@WebParam(name="userName")String userName) {
        return"Hello:" + userName;
    }
    @WebMethod
    publicint getExp(int i, int j) {
        return i / j;
    }
}
 
这是服务器端普通的业务类,通过@WebService、@WebMethod等注释描述来生成WSDL文件。
STEP 2,执行wsgen命令
本例中到HelloWorld类所在的目录中新建一个命名为wsdl的文件夹,运行:wsgen -cp ./bin -r ./wsdl -s ./src -d ./bin -wsdl test.jws.service.HelloWorld。执行后会在wsdl文件夹中生成HelloWorld的wsdl描述文件,src文件夹中生成依赖类,如异常说明类,bin中生成依赖类的class文件
STEP 3发布Web Service Bean
启动服务类StartService.java:
package test.jws.service;
import javax.xml.ws.Endpoint;
publicclass StartService {
    publicstaticvoid main(String[] args) {
        Endpoint.publish("http://localhost:8080/webservice/hws", new HelloWorld());
    }
}
     此类很简单,能过Endpoint类的publish()方法发布实例发布地址为:
http://localhost:8080/webservice/hws,必需明确指明http协议,主机IP 地址及端口号,在IE上输入 http://localhost:8080/webservice/hws?wsdl返回以下内容说明发布成功

<?xml version="1.0" encoding="UTF-8" ?>
<definitions xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://www.jwstest.org"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
targetNamespace="http://www.jwstest.org"
name="HelloWorldService">
<types />
<message name="toSayHello">
<part name="userName" type="xsd:string" />
</message>
<message name="toSayHelloResponse">
<part name="returnWord" type="xsd:string" />
</message>
<message name="getExp">
<part name="arg0" type="xsd:int" />
<part name="arg1" type="xsd:int" />
</message>
<message name="getExpResponse">
<part name="return" type="xsd:int" />
</message>
<portType name="HelloWorld">
<operation name="toSayHello" parameterOrder="userName">
<input message="tns:toSayHello" />
<output message="tns:toSayHelloResponse" />
</operation>
<operation name="getExp" parameterOrder="arg0 arg1">
<input message="tns:getExp" />
<output message="tns:getExpResponse" />
</operation>
</portType>
<binding name="HelloWorldPortBinding" type="tns:HelloWorld">
<soap:binding style="rpc"
transport="http://schemas.xmlsoap.org/soap/http" />
<operation name="toSayHello">
<soap:operation soapAction="toSayHello" />
<input>
<soap:body use="literal"
namespace="http://www.jwstest.org" />
</input>
<output>
<soap:body use="literal"
namespace="http://www.jwstest.org" />
</output>
</operation>
<operation name="getExp">
<soap:operation soapAction="" />
<input>
<soap:body use="literal"
namespace="http://www.jwstest.org" />
</input>
<output>
<soap:body use="literal"
namespace="http://www.jwstest.org" />
</output>
</operation>
</binding>
<service name="HelloWorldService">
<port name="HelloWorldPort"
binding="tns:HelloWorldPortBinding">
<soap:address
location="http://localhost:8080/webservice/hws" />
</port>
</service>
</definitions>
 

STEP 4生成客户端执行类
在cmd命令中执行 wsimport -d ./bin -s ./src - p test.jws.client.ref
http://10.168.189.182:8080/webservice/hws?wsdl 后在在src目录下生成客户端调用的两个类:
       test.jws.client.ref.HelloWorld.java 根据wsdl描述生成的客户端执行类
test.jws.client.ref.HelloWorldServices.java 通过此类负责解悉wsdl初始化客户端HelloWorld实例
在bin目录下生成对应的类文件。
       注意:执行wsimport命令时STEP 3的服务必需启动,否则无法生成
STEP 4客户端调用
客户端调用过程ClientRun.java:
package test.jws.client;
import test.jws.client.ref.*;
publicclass ClientRun {
    /**
    *@paramargs
    */
    publicstaticvoid main(String[] args) {
        HelloWorldService hws = new HelloWorldService();
        HelloWorld hw = hws.getHelloWorldPort();
        System.out.println(hw.getExp(9, 3));
        System.out.println(hw.toSayHello("zhuoshiyao"));
    }
}
 

启动STEP 3中的服务,运行ClientRun后,制控台输出:
3
Hello:zhuoshiyao
注意:经测试,用Endpoint.publish("http://localhost:8080/webservice/hws", new HelloWorld())方式在Tomcat6中发布,不会存在端口号与路径冲突。

JKD6 中定义的Web Service注释
1.        @WebService 标注要暴露为Web Services的类或接口 ,用于申修饰类或接口,包含属性
targetNamespace 定义命名空间,默认为”http://”+”包名倒排”
name Web Service 的名称,默认为类名,例如:
<definitions targetNamespace="http://service.jws.test/"
name="HelloWorldService">
portName Web Service 的端口名称
serviceName Web Service 的服务名称,例如
                    <service name="HelloWorldService">
<port name="HelloWorldPort"
binding="tns:HelloWorldPortBinding">
      ...
                  </port>
            </service>
2.        @SOAPBinding 定义Web Service 在SOAP中的消息协议,用于申修饰类或接口,包含属性
style 定义消息的编码类型
user 定义消息的格式化类型
3.        @WebMethod 定义Web Service运作的方法,包含属性
action 操作的活动
operationName与此方法匹配的 wsdl:operation 的名称
exclude 标注此方法是否被暴露,默认为false
4.        @WebResult 定义返回值,返回值类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性
name返回值的名称
partName表示此返回值的 wsdl:part 的名称
targetNamespace返回值的 XML 名称空间
header如果为 true,则结果是从消息头而不是消息正文获取的
5.        @WebParam 定义方法的参数,参数类型不能为接口类或抽象类,而且必须有个不带参的构造函数,包含属性
name参数名称
partName表示此参数的 wsdl:part 的名称
targetNamespace参数的 XML 名称空间
header如果为 true,则结果是从消息头而不是消息正文获取的
mode参数的流向(IN、OUT 或 INOUT 之一)
wsgenwsimport命令说明
wsgen命令的主要功能是用来生成合适的JAX-WS。它读取Web Service的终端类文件,在我们的例子中就是test.jws.service.HelloWorld,同时生成所有用于发布Web Service所依赖的源代码文件和经过编译过的二进制类文件,通常Web Service Bean中用到的异常类会另外生成一个描述Bean。它还能生成WSDL和符合规范的HelloWorld类Web Service。wsgen从资源文件生成一个完整的操作列表并验证是合法的。如果Web Service Bean中的主法有申明抛出异常,这一步是必需的,否则服务器无法绑定该对像。
命令参数说明:
-cp 定义classpath
-r 生成 bean的wsdl文件的存放目录
-s 生成发布Web Service的源代码文件的存放目录(如果方法有抛出异常,则会生成该异常的描述类源文件)
-d 生成发布Web Service的编译过的二进制类文件的存放目录(该异常的描述类的class文件)
       wsimport命令的主要功能是根据wsdl文件生成客户端存根及框架,负责与Web Service 服务器通信,并在将其封装成实例,客户端可以直接使用,就像使用本地实例一样。
命令参数说明:
-d 生成客户端执行类的class文件的存放目录
-s 生成客户端执行类的源文件的存放目录
-p 定义生成类的包名






分享到:
评论

相关推荐

    使用XFire编写web service的上传文件的例子

    【使用XFire编写web service的上传文件例子详解】 在IT领域,Web Service是一种基于标准的、平台无关的方式,用于应用程序之间的交互。XFire是Apache CXF的前身,它是一个轻量级的Java框架,用于构建和消费Web服务...

    web服务开发 使用jdk6注解 注解分析

    总的来说,JDK 1.6 中的注解大大简化了 Web 服务的开发,使得开发者无需编写大量配置文件即可实现服务的创建和部署。通过 `@WebService`、`@SOAPBinding`、`@WebResult`、`@Oneway`、`@WebMethod` 和 `@WebParam` 等...

    jdk5 下 CXF 开发 WEB Service client 所需jar 包

    CXF允许开发者通过Java语言来编写Web服务,同时也支持多种编程模型,如JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for RESTful Web Services)。 2. **JDK 5支持** 虽然JDK 6及更高版本通常被...

    如何使用Eclipse开发Web Service

    创建Web Service的第一步是编写Java代码。在Eclipse中,你需要新建一个"动态Web应用程序",然后创建一个类,并在其中定义你的服务方法。例如,你可以创建一个名为`MagicThermometer`的类,包含一个温度转换的函数`...

    Web Service远程调用技术

    在实际开发中,使用 JDK 开发 Web Service 需要创建 Java 工程,创建相应的包(服务端),然后创建接口和实现类,并使用@WebService 注解标注接口和实现类。使用 Axis2 框架开发 Web Service 需要使用 Axis2 的工具...

    Web Service学习小结——基于JDK自带JAX-WS实现的web service

    - **SEI(Service Endpoint Interface)**: 这是定义Web服务接口的地方,包含了服务提供的操作方法。 - **实现类**: 对SEI接口的具体实现,处理业务逻辑。 - **WSDL生成**: JAX-WS可以自动生成WSDL文件,描述服务...

    使用XFire+Spring构建Web Service

    通过使用SOAP(简单对象访问协议)和WSDL(Web服务描述语言),Web Service可以被发现、绑定和调用,实现了跨平台和跨语言的通信。 在XFire与Spring集成的例子中,我们首先了解了这个框架组合提供的主要功能和特点...

    Eclipse下基于Axis2的Web Service平台搭建与使用

    - 编写Service端代码,定义Web Service接口和实现。 - 配置并发布Web Service到Axis2服务器。 - 创建动态网站工程,使用Web Services API调用服务。 - 在Servlets和JSP页面中集成Web Service调用,实现前后端...

    WebService(一):JDK WEB服务API实现

    【WebService(一):JDK WEB服务API实现】 在IT行业中,WebService是一种基于开放标准的互联网应用程序接口(API)设计模式,它允许不同系统之间进行数据交换和互操作。本篇将详细介绍如何使用JDK内置的API来创建...

    web service入门学习笔记

    在本文中,我们将深入探讨Web Service的基本概念,以及如何在Java环境中搭建和使用Web Service。 一、Web Service的本质 Web Service的核心是使用XML(Extensible Markup Language)作为数据交换格式,SOAP...

    Axis2快速构建Web Service ppt

    【Web Service简介】 Web Service是一种基于开放标准的、自包含且自描述的软件组件,它部署在Web上,可以通过WSDL(Web Service Description Language)、SOAP(Simple Object Access Protocol)和UDDI(Universal ...

    用axis2开发web service

    以下是关于使用Axis2开发Web Service的详细步骤和知识点: 1. **实验环境搭建**: - 首先确保安装了JDK 1.6,因为 Axis2需要Java运行环境。 - 接下来,安装Eclipse 3.5集成开发环境,它提供了方便的开发工具。 -...

    JAVA程序调用Web Service示例过程演示

    这个步骤通常涉及使用IDE的工具来自动生成客户端代码,这些代码将根据提供的WSDL文件来调用Web Service。在NetBeans中,你可以通过右击项目,选择“New”&gt;“Other”&gt;“Web Services”&gt;“Web Service Client”,然后...

    eclipse + tomcat web service配置

    - 可以使用Axis的Web界面测试新创建的Web服务,也可以编写客户端代码进行调用。 通过以上步骤,你就能在Eclipse中配置好Tomcat服务器,利用Axis创建和发布Web服务。记得随时更新相关库和软件以获取最新的特性和...

    AXIS Web Service入门及应用

    在本文中,我们将深入探讨AXIS Web Service的安装、入门以及其在实际应用中的使用。 一、AXIS Web Service的安装 1. 下载:首先,你需要从Apache官方网站下载最新的AXIS版本。确保选择与你的JDK版本兼容的版本。 2...

    MyEclipse 搭建 ParlayX Web Service 短信平台测试环境

    4. **编写服务代理**:根据ParlayX Web Service的WSDL文件,使用MyEclipse的工具自动生成服务代理代码。这可以通过右键点击项目 -&gt; “Web Service” -&gt; “Create Service Client”来完成。 5. **实现业务逻辑**:在...

    webservice基于JDK演示service与client以及所需jar

    在这个主题中,我们将深入探讨如何使用Java Development Kit(JDK)来创建和消费一个Web服务,以及涉及到的关键技术如wsimport工具。 **一、Web服务基础** Web服务主要通过SOAP(Simple Object Access Protocol)...

    WEB SERVICE INTERDUCE

    #### 四、编写Web Service 本节将详细介绍如何使用Java编写一个简单的Web Service。 ##### 1. 创建Service类 首先,创建一个名为`HelloWorldService`的类,该类将实现`javax.xml.rpc.Service`接口。此类应包含所有...

Global site tag (gtag.js) - Google Analytics