“Web Services:简单的Java示例”的版本间差异

来自Wikioe
跳到导航 跳到搜索
(建立内容为“category:Web Services == 关于 == 一个完整的Web服务包括以下步骤: # Web服务提供者设计实现Web服务,并将调试正确后的Web服…”的新页面)
 
 
(未显示同一用户的1个中间版本)
第3行: 第3行:
== 关于 ==
== 关于 ==
一个完整的Web服务包括以下步骤:
一个完整的Web服务包括以下步骤:
# Web服务提供者设计实现Web服务,并将调试正确后的Web服务通过Web服务中介者发布,并在UDDI注册中心注册; (发布)
# “Web 服务提供者”设计实现 Web 服务,并将调试正确后的 Web 服务通过“Web 服务中介者”发布,并在 '''UDDI''' 注册中心注册; (发布)
# Web服务请求者向Web服务中介者请求特定的服务,中介者根据请求查询UDDI注册中心,为请求者寻找满足请求的服务; (发现)
# “Web 服务请求者”向“Web 服务中介者”请求特定的服务,中介者根据请求查询 UDDI 注册中心,为请求者寻找满足请求的服务; (发现)
# Web服务中介者向Web服务请求者返回满足条件的Web服务描述信息,该描述信息用WSDL写成,各种支持Web服务的机器都能阅读;(发现)
# “Web 服务中介者”向“Web 服务请求者”返回满足条件的 Web 服务描述信息,该描述信息用 '''WSDL''' 写成,各种支持 Web 服务的机器都能阅读;(发现)
# 利用从Web服务中介者返回的描述信息生成相应的SOAP消息,发送给Web服务提供者,以实现Web服务的调用;(绑定)
# 利用从 Web 服务中介者返回的描述信息生成相应的 '''SOAP''' 消息,发送给“Web 服务提供者”,以实现 Web 服务的调用;(绑定)
Web服务提供者按SOAP消息执行相应的Web服务,并将服务结果返回给Web服务请求者。(绑定)
Web 服务提供者按 SOAP 消息执行相应的 Web 服务,并将服务结果返回给“Web 服务请求者”。(绑定)




创建服务端/客户端项目,项目可以是 Java Web 项目,也可以是普通的 Java 项目:
* 创建服务端/客户端项目,项目可以是 Java Web 项目,也可以是普通的 Java 项目:
: [[File:WebServices:Java:创建项目.png|400px]]
*: [[File:WebServices:Java:创建项目.png|400px]]


=== 服务端 ===
=== 服务端 ===

2021年6月4日 (五) 01:22的最新版本


关于

一个完整的Web服务包括以下步骤:

  1. “Web 服务提供者”设计实现 Web 服务,并将调试正确后的 Web 服务通过“Web 服务中介者”发布,并在 UDDI 注册中心注册; (发布)
  2. “Web 服务请求者”向“Web 服务中介者”请求特定的服务,中介者根据请求查询 UDDI 注册中心,为请求者寻找满足请求的服务; (发现)
  3. “Web 服务中介者”向“Web 服务请求者”返回满足条件的 Web 服务描述信息,该描述信息用 WSDL 写成,各种支持 Web 服务的机器都能阅读;(发现)
  4. 利用从 Web 服务中介者返回的描述信息生成相应的 SOAP 消息,发送给“Web 服务提供者”,以实现 Web 服务的调用;(绑定)
  5. Web 服务提供者按 SOAP 消息执行相应的 Web 服务,并将服务结果返回给“Web 服务请求者”。(绑定)


  • 创建服务端/客户端项目,项目可以是 Java Web 项目,也可以是普通的 Java 项目:
    WebServices:Java:创建项目.png

服务端

  1. 通过 javax.jws.WebService 注解提供服务;
  2. 通过 javax.xml.ws.Endpoint 类的 publish 方法来发布服务,并提供发布的地址以及发布的服务类;

代码:

package com.eijux.wsServer;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

@WebService
public class Function {
    // 可以显示指定服务的“operationName”(client中调用)
    @WebMethod(operationName="sayHello1")
    public String sayHello(String userName)
    {
        return "Hello,"+userName+"!";
    }
            
    @WebMethod(operationName="sayHello2")
    public String sayHello(){
        return "Hello World!";
    }
    
    // 如果不指定“operationName”,则与方法名相同
    @WebMethod
    public String transWords(String words){
        String res = "";
        for(char ch : words.toCharArray()){
            res += ch+",";
        }
        return res;
    }

    public static void main(String[] args) {
        // 使用Endpoint(终端)类发布webservice
        Endpoint.publish("http://localhost:8089/service/function", new Function());
        System.out.println("Publish Success");
    }
}

服务发布成功后,访问发布的地址:

WebServices:Java:发布服务.png

点击链接,打开 WSDL 配置:

WebServices:Java:WSDL 配置.png

客户端

通过工具生成客户端代码:

  1. 命令行工具:
    wsimport -d .class文件的输出目录 -s .java文件的输出目录 -p “生成类所在包名” -keep “wsdl发布地址”
    
    示例:
    wsimport -s D:\Workspaces\JAVA\TheClient\src -p com.eijux.wsClient -keep http://localhost:9095/service/function?wsdl
    
  2. Eclipse工具:
    WebServices:Java:Eclipse工具使用1.png
    WebServices:Java:Eclipse工具使用2.png
    WebServices:Java:Eclipse工具使用3.png
    WebServices:Java:Eclipse工具使用4.png


代码:

package com.eijux.wsClientTest;

import javax.rmi.RemoteException;
import javax.xml.rpc.ServiceExceptipn;
// 如果 Client 与生成的代码不在同一目录,需要引入对应的包
// 需要引入的包在生成代码中
import com.eijux.wsServer.Function;
import com.eijux.wsServer.FunctionService;
import com.eijux.wsServer.FunctionServiceLocator;

public class TestWs {
    public static void main(String[] args){
        try{
            //Function f = new FunctionService().getFunctionPort();
            Function f = new FunctionServiceLocator().getFunctionPort();
            
            System.out.println(f.sayHello1("eijux"));
            System.out.println(f.sayHello2(""));
            System.out.println(f.getValue("zl"));
        }
        catch(ServiceExceptipn e){
            e.printStackTrace();
        }
        catch(RemoteException e){
            e.printStackTrace();
        }
    }
}

FAQ

可能的异常:

  1. 服务端:runtime modeler error: Wrapper class com.eijux.wsServer.jaxws.GetValue is not found. Have you run APT to generate them?
    JDK 版本过低(低于1.6.0_17):调整该服务端项目所引用的 JDK 版本。
  2. 生成命令:directory not found: D:\Workspaces\JAVA\The Client\src
    路径有空格。
  3. 生成命令:[ERROR] failed.noservice=Could not find wsdl:service in the provided WSDL(s):
    生成命令的“wsdl发布地址”末尾缺少“?wsdl”。

参考

  1. cnblogs:WebService入门实例教程
  2. csdn:Java WebService 简单小实例
  3. 简书:极致精简的webservice例子--Java版