`

(一) java-ws实现webservice

 
阅读更多

JAX-WS是JAX-RPC的后继新技术,日渐流行。于是我也来试试。看了IBM上的一些文章,对比JAX-WS和JAX-RPC的,JAX-WS带来不少好处。通过使用 Java™ API for XML Web Services (JAX-WS) 技术设计和开发 Web 服务,可以带来很多好处,能简化 Web 服务的开发和部署,并能加速 Web 服务的开发。

JAX-WS 简介

为何使用 JAX-WS?

JAX-WS 是用于简化使用 Java 构造 Web 服务和 Web 服务客户机的工作的技术。该技术提供了完整的 Web 服务堆栈,可减少开发和部署 Web 服务的任务。JAX-WS 支持 WS-I Basic Profile 1.1,后者可确保使用 JAX-WS 堆栈开发的 Web 服务能够供采用 WS-I Basic Profile 标准使用任意语言开发的任意客户机使用。JAX-WS 还包括了 Java Architecture for XML Binding (JAXB) 和 SOAP with Attachments API for Java (SAAJ)。

JAXB 提供了一种非常方便的方法来将 XML 模式映射到 Java 代码的表示形式,从而支持数据绑定功能。JAXB 消除了将 SOAP 消息中的 XML 模式消息转换为 Java 代码的工作,因而不必全面了解 XML 和 SOAP 解析。JAXB 规范定义 Java 和 XML 模式之间的绑定。SAAJ 提供了标准的方法来处理 SOAP 消息中包含的 XML 附件。

而且,JAX-WS 提供了用于将传统 Java 对象(Plain Old Java Object,POJO)类转换为 Web 服务的 Annotation 库,从而加速了 Web 服务的开发工作。另外,它还指定了从采用 Web 服务描述语言(Web Services Description Language,WSDL)定义的服务到实现该服务的 Java 类之间的详细映射。采用 WSDL 定义的任意复杂类型都通过遵循 JAXB 规范定义的映射来映射为 Java 类。JAX-WS 之前与 Java Platform, Enterprise Edition (Java EE) 5 绑定。而 JAX-WS 2.0 规范是作为 Java Community Process (JCP) 的 JSR 224 开发的。

      学习了IBM的教程《设计与开发 JAX-WS 2.0 Web 服务》,这个教程主要是讲订单处理。还是比较简单,做完后为了加深印象,就自己做了一个最简单的HelloService,采用的是代码优先。使用的JDK为1.6版本的。

      首先,写一个类HelloService,这个类发布为服务。

package com.zzz.jaxws.service;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

/**
* @description 
* @version 创建时间:Apr 3, 2009 9:26:15 AM

*/
@WebService(serviceName="HelloService",
     portName="HelloServicePort",
     targetNamespace="
http://jaxws.zzz/jaxws/hello")
@SOAPBinding(style=SOAPBinding.Style.DOCUMENT,use=SOAPBinding.Use.LITERAL,
     parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
public class HelloService {
@WebMethod
public String sayHello(String s){
   System.out.println("hello,"+s);
   return s;
}
}

这个类里用到了Annotation,使用@WebService,定义了服务名,端口名和名称空间。使用@SOAPBinding定义了WSDL的绑定样式,这里采用的是document/literal-wrapped。使用@WebMethod定义了发布的服务。看起来,和普通的Java类没什么区别。

        完成了服务类的编写,需要发布服务了。这里是专门写一个发布类来发布服务,我们这里使用JDK1.6中自带的web服务器,把服务发布到它里面。

      

生成 JAX-WS 构件

运行 wsgen 工具,以生成订单处理 Web 服务的 JAX-WS 可移植构件。此工具将读取 Web SEI 类,并生成 Web 服务部署和调用所需的所有构件。wsgen 工具生成需要发布的 Web 服务的 WSDL 文件和 XSD 模式。

为了生成 JAX-WS 构件,首先需要编译服务和 Bean 源文件:

  1. 打开命令提示符,并进入到 c:\JAXWS-Tutorial目录(我把代码都拷贝到了c:\JAXWS-Tutorial下)。
  2. 运行以下命令,以编译 Java 文件,并将类文件放入其各自文件夹中: 

    javac com\zzz\jaxws\service\*.java

  3. 运行以下命令,以生成 JAX-WS 构件: 

    wsgen -cp . com.zzz.jaxws.service.HelloService -wsdl

       运行此命令后,应该在 JAXWS-Tutorial 文件夹中看到生成的 HelloService.wsdl和 HelloService_schema1.xsd,而且会看到在 com\zzz\jaxws\service\jaxws 文件夹中创建了 JAX-WS 构件。

        编写发布类HelloServicePublisher。

package com.zzz.jaxws.service.publisher;

import javax.xml.ws.Endpoint;

import com.zzz.jaxws.service.HelloService;

/**
* @description 发布HelloService.java为服务
* @version 创建时间:Apr 3, 2009 9:37:30 AM

*/
public class HelloServicePublisher {

public void publish(){
   Endpoint.publish("
http://localhost:8080/services/HelloService",
     new HelloService());
}
public static void main(String[] args){
   HelloServicePublisher publish = new HelloServicePublisher();
   publish.publish();
}
}

这个服务的发布类很简单,就是使用Endpoint.publish()发布。publish() 接受两个参数:Web 服务的位置和 JAX-WS Web 服务实现类。

  1. 从 c:\JAXWS-Tutorial 文件夹运行以下命令,以编译 HelloServicePublisher

    javac com\zzz\jaxws\service\publisher\HelloServicePublisher.java

  2. 然后运行以下命令:

    java com.zzz.jaxws.service.publisher.HelloServicePublisher
  3. 打开浏览器,并导航到http://localhost:8080/services/HelloService?wsdl,可以看见生成的WSDL。

        到这里服务发布完了,需要编写客户端来调用了。JAX-WS 提供了名为 wsimport 的工具,用于从 WSDL 生成 JAX-WS 可移植构件。生成的可移植构件通常包括以下内容:

  • SEI
  • 服务(需要实现的服务实现类)
  • 从模式类型生成的 JAXB 生成类
  • 从 wsdl:fault 映射的异常类(如果有)

客户机使用生成的构件调用 Web 服务。Web 服务客户机并不需要处理任何 SOAP 格式(如创建或解析 SOAP 消息)。这将由 JAX-WS 运行时予以处理,此运行时将使用生成的构件代码(JAXB 生成类)。Web 服务将处理 Java 代码(JAXB 生成类),从而减少了开发 Web 服务客户机和对 Web 服务调用操作的工作。

       使用wsimport命令生成客户端使用的构件:

wsimport -keep -p com.zzz.jaxws.service.client http://localhost:8080/services/HelloService?wsdl

-keep 选项指示保留生成的文件,-p 选项指定需要在其中生成构件的包名称。http://localhost:8080/services/HelloService?wsdl指定 WSDL 文件的位置。

package com.zzz.jaxws.service.client;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;

/**
* @description 
* @version 创建时间:Apr 3, 2009 9:49:41 AM

*/
public class HelloServiceClient {

private final QName qName=new QName(
    "
http://jaxws.zzz/jaxws/hello","sayHello");

public static URL getWSDLURL(String urlStr){
   URL url = null;
   try {
    url = new URL(urlStr);
   } catch (MalformedURLException e) {
    e.printStackTrace();
   }
   return url;
}

public void process(URL url){
   HelloService_Service service = new HelloService_Service(url,qName);
   HelloService port = service.getHelloServicePort();
   String response = port.sayHello("world");
   System.out.println("result:"+response);
}

/**
* @param args
*/
public static void main(String[] args) {
   if(args.length!=1){
    System.out.println("Please enter parameter.");
    return;
   }
   URL url = getWSDLURL(args[0]);
   HelloServiceClient client = new HelloServiceClient();
   client.process(url);
}

}

生成HelloService_Service的实例,

  • 对服务调用 getHelloServicePort(),以检索到服务的代理(也称为端口)。端口实现服务所定义的接口。
  • 调用端口的 sayHello方法,并同时传入一个字符参数。

    要运行 Web 服务客户机,请首先从 JAXWS-Tutorial 文件夹运行以下命令来编译 Web 服务客户机:

    javac com\zzz\jaxws\service\client\HelloServiceClient .java

    通过使用以下命令提供订单处理 Web 服务的 WSDL URL 来运行 Web 服务客户机:

    java com.zzz.jaxws.service.client.HelloServiceClient http://localhost:8080/services/HelloService?wsdl

    这时,后在后台看见: hello,world

    到这里,已经成功地创建和发布了 Web 服务,并通过 Web 服务客户机成功地执行了此服务。

分享到:
评论

相关推荐

    jax-ws实现webservice调用

    **Java API for XML Web Services (JAX-WS)** 是一种由Java SE和Java EE平台支持的用于构建Web服务的标准API。它使得开发人员能够轻松地创建、部署和使用基于SOAP(简单对象访问协议)的Web服务。在本教程中,我们将...

    基于JDK自带的Web服务JAX-WS实现WebService的简单示例

    Java 基于第三方插件实现WebService实在麻烦,尤其是要添加几十M的Jar包,有时还会导致项目冲突。还好,自从JDK 1.6开始,Java自身已经支持WebSeervice的开发即JAX-WS,附件是一个简单的示例,供入门参考。注意,JDK...

    JAX-WS实现WebService服务文档及示例代码

    **JAX-WS实现WebService服务文档及示例代码** **一、JAX-WS简介** JAX-WS(Java API for XML Web Services)是Java平台上的一个标准接口,用于构建和部署Web服务。它简化了Web服务的开发,提供了一种基于注解的方式...

    JAX-WS 实现WebService发布

    JAX-WS允许开发者使用Java语言来定义和实现Web服务,并通过SOAP(Simple Object Access Protocol)进行通信。在本文中,我们将深入探讨如何使用JAX-WS来发布一个Web服务。 首先,我们需要了解Web服务的基本概念。...

    jax-ws发布webservice

    Java API for XML Web Services(JAX-WS)是Java平台上的一个标准,用于构建和部署Web服务。它简化了Web服务的开发,使得Java开发者能够更方便地创建、调用和部署SOAP(Simple Object Access Protocol)服务。在这个...

    MyEclipse基于JAX-WS开发Webservice+WebserviceClient客户端调用.zip

    在这个压缩包中,"MyEclipse6.5上基于JAX-WS开发Webservice+WebserviceClient客户端调用.doc"很可能是一份详细的步骤指南,涵盖了如何在MyEclipse 6.5版本中使用JAX-WS创建Web服务,以及如何生成和使用客户端代码来...

    jax-ws webservice demo

    基于jax-ws 实现的web service client和server端的demo程序。 注:如果使用的是 myeclipse 时 server 部署到tomcat 启动的时候会报错 解决办法:找到myeclipse安装目录下的 plugins 目录里 查找 webservices-rt.jar,...

    jax-ws创建webservice

    Java API for XML Web Services(jax-ws)是Java平台标准版(Java SE)和企业版(Java EE)的一部分,它为开发者提供了一种创建和消费Web服务的标准方式。jax-ws允许开发人员通过简单的编程模型来实现基于SOAP的Web...

    MyEclipse6_5上基于JAX-WS开发Webservice(中文示例)

    JAX-WS(Java API for XML Web Services)是Java平台上用于构建和消费Web服务的标准API,它取代了早期的JAX-RPC。本篇将详细介绍如何在MyEclipse6_5集成开发环境中使用JAX-WS来开发Web服务。 首先,让我们了解...

    如何基于JAX-WS开发一个WebService实例

    JAX-WS提供了一种简单的方式来创建SOAP(Simple Object Access Protocol)Web服务,它集成了Java SE和Java EE平台,使得开发者可以方便地实现服务接口和服务实现,然后通过工具自动生成WSDL(Web Service ...

    上传一个基于Jax-ws的WebService

    1. **JAX-WS基础**:JAX-WS提供了一种面向对象的方式来创建Web服务,通过注解(如@WebService、@WebMethod等)将Java类声明为服务端点。服务端点接口(SEI)定义了客户端可以调用的操作。 2. **WSDL**:WSDL文件是...

    jax-ws-webservice开发

    - **创建服务类**:首先需要创建一个包含WebService方法的Java类。在这个例子中,我们创建了一个名为`YogfinwoWebserviceWS`的服务类,代码如下所示: ```java package com.yogfinwo.ws; import javax.jws....

    使用JAX-WS开发WebService入门教程.pdf

    这是因为JAX-WS自Java SE 6开始作为标准API被集成到了JDK中,但在Java SE 1.5中也可以通过额外添加相关的JAR包来实现。 2. **开发工具**:本教程推荐使用MyEclipse作为开发工具,因为MyEclipse内置了对JAX-WS的...

    jax-ws webservice简单demo

    在"jax-ws webservice完整demo"中,你可以通过查看源码了解每个组件的具体实现,并学习如何将它们组合在一起,形成一个完整的Web服务。此外,通过运行提供的测试代码,你可以验证Web服务是否正常工作。这个例子是一...

    java WebService Jax-WS创建

    【Java WebService Jax-WS 创建】是Java中创建Web服务的一种常见方式,主要用于构建基于SOAP(Simple Object Access Protocol)的Web服务。JAX-WS(Java API for XML Web Services)是Java EE 5及更高版本中提供的...

    javax-ws java自带webservice实现方式

    在Java中,`javax.ws` 包提供了一种内置的方式来实现Web服务,使得开发者可以方便地创建和消费Web服务。本篇文章将深入探讨Java自带的Web服务实现方式,主要涉及`javax.ws`的相关知识点。 ### 1. Web服务基础 Web...

    JAX-WS开发webservice示例详解

    Java API for XML Web Services (JAX-WS) 是Java平台上的一个标准,用于开发基于SOAP协议的Web服务。它简化了Web服务的创建、部署和消费,使得开发者可以使用面向对象的方式来处理Web服务。本篇文章将深入探讨如何...

    MyEclipse6.5上基于JAX-WS开发Webservice

    JAX-WS 是一种用于构建和部署 Web 服务的 Java API,它在 Java EE 5 及以上版本中被引入,用于替代早期的 JAX-RPC。JAX-WS 提供了更加简洁和面向对象的 API,使得开发者可以更容易地创建符合 W3C 标准的 SOAP...

    jax-ws WebService客户端与服务端工程.rar

    - **@WebService**:这是JAX-WS的一个注解,用于标记一个Java类作为Web服务的实现。这个类中的方法将暴露为Web服务的操作。 - **@SOAPBinding**:用于指定SOAP绑定样式,如RPC/encoded、RPC/literal或Document/...

Global site tag (gtag.js) - Google Analytics