WebService服务demo

demo环境

操作系统:windows 10 x64

JDK:jdk1.8.0_172

开发工具:intellij idea 2018.3.3 x64

项目容器:Tomcat 7.0.90

服务端

这里分别提供两种服务发布方式

1:普通java工程

2:Web工程

普通java工程

新建测试接口

     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package pojoService;

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

/**
 * @Filename: HelloWorldService
 * @Author: Zhang Wei
 * @Date: 2019/2/12 14:16
 * @Description: 服务接口
 * @History:
 */
@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface HelloWorldService {

    @WebMethod
    @WebResult(name = "resultStr")
    String sayHelloWorldFrom(@WebParam(name = "from") String from);

}

编写实现类

     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
package pojoService;

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

/**
 * @Filename: HelloWorldImpl
 * @Author: Zhang Wei
 * @Date: 2019/2/12 10:11
 * @Description: 服务实现类
 */
@WebService(endpointInterface = "pojoService.HelloWorldService")
@SOAPBinding(style = SOAPBinding.Style.RPC)
public class HelloWorldImpl implements HelloWorldService {

    @Override
    public String sayHelloWorldFrom(String from) {
        String result = "Hello, world, from " + from;
        System.out.println(result);
        return result;
    }
}
发布WebService服务

     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package pojoService;

import javax.xml.ws.Endpoint;

/**
 * @Filename: HelloWorldServer
 * @Author: Zhang Wei
 * @Date: 2019/2/12 14:22
 * @Description: 普通java工程发布服务(启动后不能停止,否则服务一起停止)
 * @History:
 */
public class HelloWorldServer {

    public static void main(String[] args) {
        //发布服务
        Endpoint.publish("http://localhost:8086/services/HelloWorld?wsdl", new HelloWorldImpl());
    }

}

Web工程

新建WebService工程

打开idea工具,在顶部导航栏中找到“File” —> “New” —>“Project”,在打开的窗口左侧工程类型里选择Spring,在右侧的 详细工程栏里选择“Java EE”下的WebServices工程,选择完成后再下方勾选“Generate sample server code”,Version一栏里选择“Apache Axis”,点击“next”,在“Project name”栏中输入工程名,点击“finish”创建完成。

因为我们勾选了“Generate sample server code”,所以生成的工程会自带一个demo


     
     
     
     
1
2
3
4
5
6
7
public class HelloWorld {
  public String sayHelloWorldFrom(String from) {
    String result = "Hello, world, from " + from;
    System.out.println(result);
    return result;
  }
}

可以在工程目录“web”—>“WEB_INF”下看到两个文件

server-config.wsdd:WebService服务配置文件

web.xml:web工程配置文件

打开“server-config.wsdd”文件里面有这样的一份配置信息


     
     
     
     
1
2
3
4
5
6
 name="HelloWorld" provider="java:RPC" style="document" use="literal">
     name="className" value="example.HelloWorld"/>
     name="allowedMethods" value="*"/>
     name="scope" value="Application"/>
    http://example

这里就是对外发布的服务配置信息

启动工程(发布服务)

把新建的WebService工程打包放入Tomcat容器中启动

访问地址查看是否生成了wsdl

默认地址:http://localhost:8080/WebServiceSampleDemo_war_exploded/services/HelloWorldTo?wsdl

80端口和services之间的“WebServiceSampleDemo_war_exploded”是自动生成的名称,可以手动在idea的tomcat配置里更改,下面是删掉这部分内容的地址

http://localhost:8080/services/HelloWorldTo?wsdl

打开浏览器输入以上地址查看是否能显示wsdl文件内容

如果正常显示以下内容则表示WebService服务已经发布成功


     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:impl="http://example"
                  xmlns:intf="http://example" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema"
                  targetNamespace="http://example">
  
  
     xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" targetNamespace="http://example">
       name="from" type="xsd:string"/>
       name="sayHelloWorldFromReturn" type="xsd:string"/>
    
  
   name="sayHelloWorldFromResponse">
     element="impl:sayHelloWorldFromReturn" name="sayHelloWorldFromReturn"/>
  
   name="sayHelloWorldFromRequest">
     element="impl:from" name="from"/>
  
   name="HelloWorldTo">
     name="sayHelloWorldFrom" parameterOrder="from">
       message="impl:sayHelloWorldFromRequest" name="sayHelloWorldFromRequest"/>
       message="impl:sayHelloWorldFromResponse" name="sayHelloWorldFromResponse"/>
    
  
   name="HelloWorldToSoapBinding" type="impl:HelloWorldTo">
     style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
     name="sayHelloWorldFrom">
       soapAction=""/>
       name="sayHelloWorldFromRequest">
         use="literal"/>
      
       name="sayHelloWorldFromResponse">
         use="literal"/>
      
    
  
   name="HelloWorldToService">
     binding="impl:HelloWorldToSoapBinding" name="HelloWorldTo">
       location="http://localhost:8080/WebServiceSampleDemo_war_exploded/services/HelloWorldTo"/>
    
  

客户端

1.使用jdk自带的工具wsimport生成客户端

使用浏览器打开wsdl地址,选择另存为把wsdl文件下载下来,这里以下载到桌面为例

然后打开cmd命令提示符窗口进入桌面目录,输入以下命令

C:UsersZhang WeiDesktop>wsimport HelloWorld.xml -p com.jidd.ws -s D:WebServiceTest -d D:WebServiceTestsrc

-p:指定目标程序包

-s:指定生成的源文件位置

-d:指定生成的class文件位置

HelloWorld.xml:下载好的wsdl文件

注意:-s、-d指定的文件位置需手动创建好,命令不会自动创建目录

使用wsimport读取本地wsdl文件生成的源文件中,wsdl文件的指向地址也是本地路径,可手动更改为URL地址

修改HelloWorldService.java文件

修改头部注解


     
     
     
     
1
2
3
4
5
/**
* 读取本地路径修改为网络路径
*/
//@WebServiceClient(name = "HelloWorldService", targetNamespace = "http://example", wsdlLocation = "file:/C:/Users/Zhang%20Wei/Desktop/HelloWorld.xml")
@WebServiceClient(name = "HelloWorldService", targetNamespace = "http://example", wsdlLocation = "http://localhost:8080/services/HelloWorld?wsdl")

修改静态块


     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
static {
        URL url = null;
        WebServiceException e = null;
        try {
            //读取本地路径修改为网络路径
            //url = new URL("file:/C:/Users/Zhang%20Wei/Desktop/HelloWorld.xml");
            url = new URL("http://localhost:8080/services/HelloWorld?wsdl");
        } catch (MalformedURLException ex) {
            e = new WebServiceException(ex);
        }
        HELLOWORLDSERVICE_WSDL_LOCATION = url;
        HELLOWORLDSERVICE_EXCEPTION = e;
}

出现如下过程则解析完毕

C:UsersZhang WeiDesktop>wsimport HelloWorld.xml -p com.jidd.ws -s D:WebServiceTest -d D:WebServiceTestsrc
正在解析 WSDL...

正在生成代码...

正在编译代码...
C:UsersZhang WeiDesktop>

2.使用开发工具提供的快捷方式生成

在需要生成文件的文件夹上右键选择“WebServices”—> “Generate Java Code From Wsdl”

在弹出的窗口“Web service esdl url”栏中填入服务端的wsdl地址,然后确定会生成一系列文件

我在service中选择生成文件,目录如下

  • service

    HelloWorld.wsdl HelloWorld_PortType HelloWorldService HelloWorldServiceLocator HelloWorldSoapBindingStub

测试类

普通java工程


     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import service.HelloWorldImplServiceLocator;
import service.HelloWorldService;

public class HelloWorldClient {

    public static void main(String[] argv) {
        helloMain();
    }

    public static void helloMain() {
        try {
            HelloWorldImplServiceLocator locator = new HelloWorldImplServiceLocator();
            HelloWorldService service = locator.getHelloWorldImplPort();
            //调用服务
            String result = service.sayHelloWorldFrom("csssss");
            //打印返回结果
            System.out.println(result);
        } catch (javax.xml.rpc.ServiceException ex) {
            ex.printStackTrace();
        } catch (java.rmi.RemoteException ex) {
            ex.printStackTrace();
        }
    }
}

Web工程


     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import service.HelloWorldServiceLocator;
import service.HelloWorld_PortType;

public class HelloWorldClient {

    public static void main(String[] argv) {
        helloMain();
    }

    public static void helloMain() {
        try {
            HelloWorldServiceLocator locator = new HelloWorldServiceLocator();
            HelloWorld_PortType service = locator.getHelloWorld();
            //调用服务
            String result = service.sayHelloWorldFrom("csssss");
            //打印返回结果
            System.out.println(result);
        } catch (javax.xml.rpc.ServiceException ex) {
            ex.printStackTrace();
        } catch (java.rmi.RemoteException ex) {
            ex.printStackTrace();
        }
    }
}

使用“wsimport”命令编译的web工程测试类


     
     
     
     
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import service.HelloWorld;
import service.HelloWorldService;

/**
 * @Filename: HelloWorldClient
 * @Author: Zhang Wei
 * @Date: 2019/2/12 14:00
 * @Description:
 * @History:
 */
public class HelloWorldClient {

    public static void main(String[] argv) {
        helloMain();
    }

    public static void helloMain() {
        HelloWorldService helloWorldService = new HelloWorldService();
        HelloWorld helloWorld = helloWorldService.getHelloWorld();
        String str = helloWorld.sayHelloWorldFrom("测试");
        System.out.println(str);
    }
}


你可能感兴趣的:(WebService服务demo)