JAX-WS服务端及客户端

一、概述

  Java API for XML Web Services (JAX-WS)是Java程序设计语言一个用来创建Web服务的API。

  在服务器端,用户只需要通过Java语言定义远程调用所需要实现的接口SEI(service endpoint interface),并提供相关的实现,通过调用JAX-WS的服务发布接口就可以将其发布为WebService接口。

  在客户端,用户可以通过JAX-WS的API创建一个代理(用本地对象来替代远程的服务)来实现对于远程服务器端的调用。

二、使用jdk的JAX-WS发布服务

1.写服务端的接口

1 package com.webservice.jaxws;
2
3 public interface Hello {
4     public String sayHello(String name);
5 }

2.写服务端的实现(使用注解@WebService)这个必须在实现类写,不然报错(class com.webservice.jaxws.HelloImpl has neither @WebService nor @WebServiceProvider annotation)

 1 package com.webservice.jaxws;
 2
 3 import javax.jws.WebService;
 4 @WebService
 5 public class HelloImpl implements Hello{
 6
 7     @Override
 8     public String sayHello(String name) {
 9         return "hi, "+name;
10     }
11
12 }

3.使用jdk中Endpoint发布服务

package com.webservice.jaxws;

import javax.xml.ws.Endpoint;

public class HelloServerPub {
    public static void main(String[] args) {
        Hello hello = new HelloImpl();
        Endpoint.publish("http://localhost:8080/hello", hello);
        System.out.println("发布成功!");
    }
}

4.在浏览器地址栏输入服务发布的地址查看wsdl及schema文件

 1 <?xml version="1.0" encoding="UTF-8"?><!-- 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://jaxws.webservice.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://jaxws.webservice.com/" name="HelloImplService">
 2 <types>
 3 <xsd:schema>
 4 <xsd:import namespace="http://jaxws.webservice.com/" schemaLocation="http://localhost:8080/hello?xsd=1"></xsd:import>
 5 </xsd:schema>
 6 </types>
 7 <message name="sayHello">
 8 <part name="parameters" element="tns:sayHello"></part>
 9 </message>
10 <message name="sayHelloResponse">
11 <part name="parameters" element="tns:sayHelloResponse"></part>
12 </message>
13 <portType name="HelloImpl">
14 <operation name="sayHello">
15 <input wsam:Action="http://jaxws.webservice.com/HelloImpl/sayHelloRequest" message="tns:sayHello"></input>
16 <output wsam:Action="http://jaxws.webservice.com/HelloImpl/sayHelloResponse" message="tns:sayHelloResponse"></output>
17 </operation>
18 </portType>
19 <binding name="HelloImplPortBinding" type="tns:HelloImpl">
20 <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"></soap:binding>
21 <operation name="sayHello">
22 <soap:operation soapAction=""></soap:operation>
23 <input>
24 <soap:body use="literal"></soap:body>
25 </input>
26 <output>
27 <soap:body use="literal"></soap:body>
28 </output>
29 </operation>
30 </binding>
31 <service name="HelloImplService">
32 <port name="HelloImplPort" binding="tns:HelloImplPortBinding">
33 <soap:address location="http://localhost:8080/hello"></soap:address>
34 </port>
35 </service>
36 </definitions>

 1 <?xml version="1.0" encoding="UTF-8"?><!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI‘s version is JAX-WS RI 2.2.4-b01. --><xs:schema xmlns:tns="http://jaxws.webservice.com/" xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0" targetNamespace="http://jaxws.webservice.com/">
 2
 3 <xs:element name="sayHello" type="tns:sayHello"></xs:element>
 4
 5 <xs:element name="sayHelloResponse" type="tns:sayHelloResponse"></xs:element>
 6
 7 <xs:complexType name="sayHello">
 8 <xs:sequence>
 9 <xs:element name="arg0" type="xs:string" minOccurs="0"></xs:element>
10 </xs:sequence>
11 </xs:complexType>
12
13 <xs:complexType name="sayHelloResponse">
14 <xs:sequence>
15 <xs:element name="return" type="xs:string" minOccurs="0"></xs:element>
16 </xs:sequence>
17 </xs:complexType>
18 </xs:schema>

三、客户端

1.根据wsdl生成客户端(打开命令行窗口,切换到src目录,执行"wsimport -keep http://localhost:8080/hello?wsdl"生成客户端代码,如下图所示:)

2、 借助生成的代码编写调用WebService对外提供的方法

  wsimport工具帮我们生成了好几个java类,但我们只需要关心HelloImplService类和HelloImpl接口的使用即可

 1 package com.webservice;
 2
 3 import com.webservice.jaxws.HelloImpl;
 4 import com.webservice.jaxws.HelloImplService;
 5
 6 public class ClientTest {
 7     public static void main(String[] args) {
 8         //创建一个用于产生HelloImpl实例的工厂,HelloImplService类是wsimport工具生成的
 9         HelloImplService service = new HelloImplService();
10         //通过工厂生成HelloImpl一个实例
11         HelloImpl hello = service.getHelloImplPort();
12         //调用HelloImpl接口的方法
13         String value = hello.sayHello("Tom");
14         System.out.println(value);
15     }
16 }

打印的结果:hi, Tom

时间: 2024-08-13 14:14:10

JAX-WS服务端及客户端的相关文章

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

这几天一直在看webService相关的知识. webService是一个跨平台访问的第三方插件,方便易用,多平台使用. 开发中我们可能自己是服务端,提供webService接口给别人访问我们的系统:也有可能我们调用别人的webService接口去访问别人的系统(比如查询天气预报). 下面是服务端和客户端的开发,实际开发中我们只是其中一方. 服务端开发: ①创建一个服务类,运行main方法发布即可,服务端就开发完成了. package com.lijianbo.service; import j

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

在eclipse中使用jax-ws构建webservices服务端和客户端

服务端: package com.yinfu.service; import javax.jws.WebService; import javax.xml.ws.Endpoint; @WebService public class TestWebsService { public String sayHello(String username) { return "Hello: " + username; } public static void main(String[] args)

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

WebSocket 实现服务端给客户端推送消息

目录 代码发布 应用场景 ajax 操作 队列 递归 如何实现服务端主动给客户端推送消息的效果 长轮询(兼容性好) websocker(主流浏览器都支持) 代码验证(了解) 代码发布 服务端主动给客户端推送消息 截至目前为止,我们所写的 web 项目基本都是基于 HTTP 协议的 HTTP 协议有四大特性:无链接 基于 HTTP 协议实现服务端主动给客户端推送消息好像有点麻烦--- 我们都经历过,浏览器打开一个网站不动,网站过一会儿自动弹出消息 再比如网页版本的微信和 qq,我们所有人创建一个群

关于ntp(时间同步协议)服务端和客户端的配置说明

本文主要写了一些在Linux(CentOS)服务器上配置ntp的经验,事件缘由来源于配置Zabbix监控ntp服务时的测试配置. NTP时间同步协议的服务端(ntpd服务)和客户端(ntpdate服)不能同时运行,即在运行ntpd服务后不能运行ntpdate服务,否则ntpdate服务会提示启动失败,而且日志中也会提示"the NTP socket is in use, exiting",如下图所示. 但客户端运行时,服务端可以运行,但服务端运行时,客户端不能运行,要运行客户端服务,就

socket服务端和客户端

#!/usr/bin/env python#encoding: utf-8import socketdef handle_request(client): buf = client.recv(1024) client.send("HTTP/1.1 200 OK\r\n\r\n") client.send("Hello, World") def main(): sock = socket.socket(socket.AF_INET, socket.SOCK_STREA

用Java实现HTTP Multipart的服务端和客户端

今天简单介绍一下如何用Java支持HTTP Multipart的request和response. 整个项目的代码可以在https://github.com/mcai4gl2/multi下载. 在这个程序里,我们的业务场景很简单.在服务端有一个随机数生成器,可以生成随机的Integer和Guid,客户端通过服务,可以请求一个或多个随机数.同时,客户端可以向服务端发送一个或多个随机数,这些随机数会被加入到一个队列中,被其他的客户端通过请求获得.以下是我们的随机数Bean的定义: [java] vi

C# Socket服务端和客户端互相send和receive

服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Text; 4 using System.Net.Sockets; 5 using System.Net; 6 using System.Threading; 7  8 namespace Controller 9 {10     public static class SocketServer11     {12         private stat

CnetOS 6.6 rsync 的服务端和客户端配置

CentOS 6.6 rsync 的服务端和客户端配置 基本信息 系统版本 主机名 IP地址 角色 CentOS  6.6 backup 10.0.0.10 rsync服务端 CentOS  6.6 lamp01 10.0.0.8 rsync客户端 CentOS  6.6 lnmp02 10.0.0.9 rsync客户端 服务端配置 创建rsync配置文件,并写入配置内容(默认rsync文件是不存在的,需要创建) [[email protected] ~]# touch/etc/rsyncd.c