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协议进行参数传递,然后采用客户端代理类来调用接口,得到返回的数据。

时间: 2024-10-12 16:46:17

webService服务端和客户端开发 简单实例的相关文章

thrift服务端到客户端开发简单示例

(1)首先我们在服务器端写个helloworld.thrift文件,如下所示: service HelloWorld{ string ping(1: string name), string getpng(), } (2)在服务器端编译helloworld.thrift编译helloworld.thrift文件,会产生服务器端和客户端相应语言的接口源码./usr/local/thrift/bin/thrift -r --gen py helloworld.thrift /usr/local/th

spring + cxf 的webservice服务端和客户端功能

原文:spring + cxf 的webservice服务端和客户端功能 源代码下载地址:http://www.zuidaima.com/share/1550463730928640.htm spring + cxf 的webservice服务端和客户端功能. 提供页面调用ws和java代码调用两种方式. 引用jar包请下载:http://pan.baidu.com/s/1jGog2WI

myeclipse-简历webservice服务端和客户端

一.建立webservice服务端: 1.新建一个web service project,名称为webservice_server截图如下,点击finish. 2.选择工程,点击右键,选择new->other,选择myelipse中的webservice->Web Service,点击next, 此处的hello可在server.xml中匹配可见,点击finish,然后修改其生成的方法. 3.将该工程部署至Tomcat中,并启动该工程,在浏览器中输入http://localhost:8080/

XFire创建WebService服务端和客户端

感谢这篇博客http://clq9761.iteye.com/blog/1261963的分享. 可能是环境搭建的原因,按照资料有些地方没有成功,于是自己改了一部分,写了下面的demo 1.服务端 1.1.新建web工程,复制需要的jar包到lib文件夹 1.2.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/

java axis调用WebService 服务端,客户端

服务端: 1.Calculator package ws; public class Calculator { public int add(int a, int b) { return (a + b); } public int subtract(int a, int b) { return (a - b); } public int multiply(int a, int b) { return (a * b); } public int divide(int a, int b) { ret

C# 编写WCF简单的服务端与客户端

http://www.wxzzz.com/1860.html Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .net Remoting,WebService,Socket的机制,并融合有HTTP和FTP的相关技术.是Windows平台上开发分布式应用最佳的实践方式. 今天带如何一步一步实现WCF服务端与客户端的开发及基础讲解. 一.在Visual

mvn构建JAX-WS项目含服务端和客户端代码实现

java中WebService框架有很多,像Axis,XFire,CXF等,除了上述框架外,JDK中自带JAX-WS框架.相比而言,JWS是轻量级的,使用非常简便,可与Spring集成使用. 下面就详述如何通过mvn构建WebService服务端及客户端. 1.引包. 在mvn项目的pom文件中加入依赖包 <dependency> <groupId>com.sun.xml.ws</groupId> <artifactId>jaxws-rt</artif

WebService 服务端客户端 实例(一)

Delphi中WebService包含的组件解释(有7个)     (1) THTTPRIO-------:使用Http消息来调用远程使用SOAP的接口对象     (2) THTTPReqResp---:给服务器发送一个SOAP消息, THTTPReqResp在可调用接口上执行一个方法请求.       (3) TOPToSoapDomConvert ----:TOPToSoapDomConvert处理Soap方法请求的组合与分发     (4) TSoapConnection:TSoapCo

使用Apache CXF开发WebServices服务端、客户端

在前一篇的博客中,我使用Xfire1.x来开发了WebServies的服务端. 但是如果你访问Apache的官网,可以看到xfire已经被合并了. 最新的框架叫做CXF. Apache CXF = Celtix + XFire. CXF 继承了 Celtix 和 XFire 两大开源项目的精华, 提供了对 JAX-WS 全面的支持,并且提供了多种 Binding .DataBinding.Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code Fi