1、WebService入门(webService笔记)

一、概述

  • 1、WebService集中解决的问题
    远程调用、跨平台调用、跨语言调用。

  • 2、在实际中的用途

    • (1)同一个公司新、旧系统的整合。
    • (2)不同公司的业务整合。
    • (3)内容聚合:如天气预报、股票行情等的应用需要调用大量不同平台、不同语言编写的应用的方法。
  • 3、CXF
    CXF(XFire+Celtrix)号称是SOA框架。SOA框架是一种面向服务的架构,是由IBM提出的,希望以“组装电脑”的方式来开发软件。主要包括两种服务:一是各种提供服务的组件(WebService);另一种是企业服务总线(Enterprise Service Bus, ESB),当然我们主要讲WebService部分,即XFire部分。

二、使用

2.1、入门

每个WebService组件需要两个部分:接口和实现类。将CXFE:\API\CXF3\apache-cxf-3.1.5\bin目录加入到环境变量PATH中,然后在命令行使用wsdl2java验证是否成功。

2.1.1准备

  • 需要的依赖包(使用CXF3.1.5版本)
  • Servlet规范包:geronimo-servlet_3.0_spec-1.0.jar
    注意:这个规范包在Tomcat中也存在,但是这里我们是开发一个独立的应用,不用tomcat
  • Jetty Web服务器相关包
jetty-continuation-9.2.11.v20150529.jar
jetty-http-9.2.11.v20150529.jar
jetty-io-9.2.11.v20150529.jar
jetty-security-9.2.11.v20150529.jar
jetty-server-9.2.11.v20150529.jar
jetty-util-9.2.11.v20150529.jar
  • 其他包:
asm-5.0.4.jar
commons-logging-1.2.jar(在此版本CXF中未找见)
neethi-3.0.3.jar
wsdl4j-1.6.3.jar
xmlschema-core-2.2.1.jar
核心包:cxf-core-3.1.5.jar

2.1.2 使用 CXF 开发 WebService 服务器端(工程WS_Server01

  • (1)开发一个WebService业务接口。该接口要用@WebService修饰。
    HelloWorld.java
package org.fkjava.cxf.ws;
import javax.jws.WebService;

@WebService
public interface HelloWorld {
    String sayHi(String name);
}
  • (2)开发一个WebService的实现类,实现类需要用@WebService修饰。
    HelloWorldWs.java
package org.fkjava.cxf.ws.impl;
import java.util.Date;
import javax.jws.WebService;
import org.fkjava.cxf.ws.HelloWorld;

@WebService(endpointInterface = "org.fkjava.cxf.ws.HelloWorld", serviceName = "HelloWorldWs")
public class HelloWorldWs implements HelloWorld {

    @Override
    public String sayHi(String name) {

        return name + "您好!" + "现在的时间是: " + new Date();
    }
}
  • (3)发布WebService
    MyService.java
package org.fkjava.cxf.ws.service;
import javax.xml.ws.Endpoint;
import org.fkjava.cxf.ws.HelloWorld;
import org.fkjava.cxf.ws.impl.HelloWorldWs;

public class MyService {
    public static void main(String[] args) {

        HelloWorld hw = new HelloWorldWs();

        //调用此方法发布WebService
        Endpoint.publish("http://localhost:8080/myService", hw);
        System.out.println("Hello World!");
    }
}
  • (4)验证服务是否发布成功
    使用地址http://localhost:8080/myService?wsdl访问,如果出现以下信息,则表明成功。如若不成功,有可能是端口号被占用了,可以更改端口号再试。
    1、WebService入门(webService笔记)_第1张图片
    1

2.1.3使用 CXF 开发 WebService 客户端(工程WS_Client01

  • (1)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的java代码,而WSDL就是Web Service Definition Language。任何语言实现WebService,都需要提供WSDL文档。
    首先我们在MyEclipse中新建一个新的java工程WS_Client01,然后我们使用cmd打开DOS窗口,进入到客户端的src目录中,使用dir命令发现没有代码,我们使用wsdl2java http://localhost:8080/myService?wsdl根据服务端的WSDL文档生成相应的java代码。之后我们再使用dir可以看到src下多出一个org目录。

    1、WebService入门(webService笔记)_第2张图片
    2

    在工程WS_Client01中我们也可以发现多出来几个包:
    1、WebService入门(webService笔记)_第3张图片
    2

    注意:这里我们在执行命令的时候服务端要开启。

  • (2)找到wsdl2java所生成类中,一个继承了Service的类,即HelloWorldWs类。该类的实例可当成工厂来使用。

  • (3)调用Service子类的实例的getXxxPort()无参方法,返回远程WebService的代理。

MyClient.java

package org.fkjava.cxf.ws.client;
import org.fkjava.cxf.ws.HelloWorld;
import org.fkjava.cxf.ws.impl.HelloWorldWs;

public class MyClient {

    public static void main(String[] args) {
        
        HelloWorldWs factory = new HelloWorldWs();
        HelloWorld hw = factory.getHelloWorldWsPort();
        System.out.println(hw.sayHi("张三"));
    }
}

说明:这个程序中使用的HelloWorldWs.javaHelloWorld.java与服务端的类不是一样的,这两个类都是客户端(本工程)的类。这里的HelloWorldWs.java可以当作工厂来使用。然后我们就可以调用服务端的相关方法了。运行如果打印出张三您好!现在的时间是: Fri Jun 24 21:25:20 CST 2016则表明成功。

你可能感兴趣的:(1、WebService入门(webService笔记))