webService服务端和客户端开发 简单实例

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了webService服务端和客户端开发 简单实例相关的知识,希望对你有一定的参考价值。

这几天一直在看webService相关的知识。

webService是一个跨平台访问的第三方插件,方便易用,多平台使用。

开发中我们可能自己是服务端,提供webService接口给别人访问我们的系统;也有可能我们调用别人的webService接口去访问别人的系统(比如查询天气预报)。

下面是服务端和客户端的开发,实际开发中我们只是其中一方。


服务端开发:

①创建一个服务类,运行main方法发布即可,服务端就开发完成了。


package com.lijianbo.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

/**
 * WebService
 * 将 Java 类标记为实现 Web Service,或者将 Java 接口标记为定义 Web Service 接口
 * 服务类这一个,写好后运行main方法发布服务即可,服务端就开发完成了。
 * 
 */
@WebService(serviceName="MyService",targetNamespace="http://www.hello.com")
public class HelloService {
    
    @WebMethod(operationName="AliassayHello")
    @WebResult(name="myReturn")
    public String sayHello(@WebParam(name="name") String name){
        return  "服务器,hello: " + name;
    }
    
    public String sayGoodbye(String name){
        return  "服务器,goodbye: " + name;
    }
    
    @WebMethod(exclude=true)//当前方法不被发布出去
    public String sayHello2(String name){
        return "hello" + name;
    }

    public static void main(String[] args) {
        /**
         * 参数1:服务的发布地址
         * 参数2:服务的实现者
         *  Endpoint  会重新启动一个线程
         */
        Endpoint.publish("http://172.18.100.52:456/hello", new HelloService());
        System.out.println("****[ Server ready...WebService发布成功。]");
    }

}


②访问浏览器,网址为:

http://172.18.100.52:456/hello?wsdl

看到如下结果,那么就说明成功了。

This XML file does not appear to have any style information associated with it. The document tree is shown below.
<!--
 Published by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.2.4-b01. 
-->
<!--
 Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.2.4-b01. 
-->
<definitions xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:wsp="http://www.w3.org/ns/ws-policy"xmlns:wsp1_2="http://schemas.xmlsoap.org/ws/2004/09/policy" xmlns:wsam="http://www.w3.org/2007/05/addressing/metadata" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://www.hello.com"xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://www.hello.com" name="MyService">
<types>
<xsd:schema>
<xsd:import namespace="http://www.hello.com" schemaLocation="http://172.18.100.52:456/hello?xsd=1"/>
</xsd:schema>
</types>
<message name="AliassayHello">
<part name="parameters" element="tns:AliassayHello"/>
</message>
<message name="AliassayHelloResponse">
<part name="parameters" element="tns:AliassayHelloResponse"/>
</message>
<message name="sayGoodbye">
<part name="parameters" element="tns:sayGoodbye"/>
</message>
<message name="sayGoodbyeResponse">
<part name="parameters" element="tns:sayGoodbyeResponse"/>
</message>
<portType name="HelloService">
<operation name="AliassayHello">
<input wsam:Action="http://www.hello.com/HelloService/AliassayHelloRequest" message="tns:AliassayHello"/>
<output wsam:Action="http://www.hello.com/HelloService/AliassayHelloResponse" message="tns:AliassayHelloResponse"/>
</operation>
<operation name="sayGoodbye">
<input wsam:Action="http://www.hello.com/HelloService/sayGoodbyeRequest" message="tns:sayGoodbye"/>
<output wsam:Action="http://www.hello.com/HelloService/sayGoodbyeResponse" message="tns:sayGoodbyeResponse"/>
</operation>
</portType>
<binding name="HelloServicePortBinding" type="tns:HelloService">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
<operation name="AliassayHello">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
<operation name="sayGoodbye">
<soap:operation soapAction=""/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MyService">
<port name="HelloServicePort" binding="tns:HelloServicePortBinding">
<soap:address location="http://172.18.100.52:456/hello"/>
</port>
</service>
</definitions>


客户端开发:

①cmd 进入 命令行。

输入:

wsimport -d c: -keep -verbose http://172.18.100.52:456/hello?wsdl

它有几个很重要的参数,

-d 表示输出的目录,目录必须事先存在,否则导出失败。

 -keep表示导出webservice的class文件时是否也导出源代码Java文件。

-verbose表示详细信息。

看我们的导出命令。我们直接导在C盘中。

显示:

C:\>wsimport -d c: -keep -verbose http://172.18.100.52:456/hello?wsdl
parsing WSDL...



Generating code...

com\hello\AliassayHello.java
com\hello\AliassayHelloResponse.java
com\hello\HelloService.java
com\hello\MyService.java
com\hello\ObjectFactory.java
com\hello\SayGoodbye.java
com\hello\SayGoodbyeResponse.java
com\hello\package-info.java

这样客户端的代码就生成了。我们是生成在C盘下的,拷贝生成的代码到项目。


②运行测试类,调用webService接口

package com.lijianbo.client;

import java.rmi.RemoteException;
import javax.xml.rpc.ServiceException;
import com.hello.HelloService;
import com.hello.MyService;

public class TestHello {
	
	 /**
     * 通过wsimport 解析wsdl生成客户端代码调用WebService服务
     * 
     * 运行测试类就能成功调用服务器的接口,得到返回数据。
     * 
     */
	
    public static void main(String[] args) throws ServiceException, RemoteException {
        /**
         * <service name="MyService">
         * 获得服务名称
         */
        MyService mywebService = new MyService();
        
        /**
         * <port name="HelloServicePort" binding="tns:HelloServicePortBinding">
         */
       HelloService hs = mywebService.getHelloServicePort();
        System.out.println("hs:"+hs);
        /**
         * 调用方法
         */
        System.out.println(hs.sayGoodbye("sjk============="));
        System.out.println(hs.aliassayHello("sjk================"));
    }

}


运行结果为:

hs:JAX-WS RI 2.2.4-b01: Stub for http://172.18.100.52:456/hello
服务器,goodbye: sjk=============
服务器,hello: sjk================


上面可以看出,这里成功访问到了服务器的接口,返回了数据。说明调用webService成功了。


webService基本的知识点就是这样了,当时实际中服务端代码是发布在服务器的,而不是本机。

客户端代码也可以采用调用生成好的jar包(服务端生成)来使用。

实际开发中,客户端往往还要根据SOAP文档来拼接参数,通过SOAP协议进行参数传递,然后采用客户端代理类来调用接口,得到返回的数据。


本文出自 “JianBo” 博客,转载请与作者联系!

以上是关于webService服务端和客户端开发 简单实例的主要内容,如果未能解决你的问题,请参考以下文章

webservice的服务端和客户端

PHP调用JAVA的WebService简单实例

webservice - 使用JAX-WS注解的方式快速搭建服务端和客户端

c++如何发布webservice

soap webService通过拦截器修改请求报文和响应报文

如何使用CXF调用webservice接口