详解使用w?s?g?e?n?和?w?s?i?m?p?o?r?t?开?发?W?e?b?S?e?r?v?i?c?e

本文旨在描述如何使用jdk自带的wsgen.exe 和wsimport.exe开发WebService。

1.新建一个java工程,项目名:WebServiceDemo。由于本文想通过完全手动建立的方式来演示整个过程,故我们的工程目录就是WebServiceDemo啦!

2.在此目录下新建Business.java 和 BusinessImpl.java两个类,分别如下:

public interface Business {
	public String echo(String message);
}
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

@WebService(name="Business",serviceName="BusinessService",targetNamespace="http://webservice.chapter1.book/client")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class BusinessImpl implements Business {

	public String echo(String message) {
		if("quit".equalsIgnoreCase(message.toString())){
			System.out.println("Server will be shutdown!");
			System.exit(0);
		}
		System.out.println("Message from client: "+message);
		return "Server response: "+message;
	}

}

3. cmd到命令行模式下,将此二文件编译为class文件,然后运行如下命令生成wsdl文件,注意之前应该在WebServiceDemo目录下新建一个叫wsdl的文件夹。

运行完上面的命令,我们会发现在wsdl目录下生成了BusinessService.wsdl文件,用notepad打开会发下就是一个xml格式的文件。

4.接下来我们创建一个Server.java的类,用来发布Service。代码如下;

import javax.xml.ws.Endpoint;

public class Server {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Endpoint.publish("http://localhost:9527/BusinessService", new BusinessImpl());
		System.out.println("Server has been started");
	}

}

编译然后运行,在浏览器中输入URL:http://localhost:9527/BusinessService?wsdl 如果出现一个XML文档,就说明发布成功了。

注意浏览器中显示的就是我们在wsdl目录下生成的BusinessService.wsdl文件内容,这个文件就是我们后面的wsimport.exe命令执行时要用到的。

5.在Server运行的条件下,下面我们通过wsimport来生成客户端执行类。另起一个命令行窗口,执行如下命令:

成功执行后,我们会发现在WebServiceDemo路径下生成了如下的4个文件:

注意目录结构就是我们之前在BusinessImpl.java类中的targetNamespace指定的,也即对应wsdl文件中的路径,只是转换为目录结构时要注意域名倒着写。

targetNamespace="http://webservice.chapter1.book/client"

OK,至此我们完成了用w?s?g?e?n?和?w?s?i?m?p?o?r?t?开?发?W?e?b?S?e?r?v?i?c?e的任务。

6.下面就是通过一个客户端Client.java 类来验证webservice的时候了:

import java.io.BufferedReader;
import java.io.InputStreamReader;

import book.chapter1.webservice.client.Business;
import book.chapter1.webservice.client.BusinessService;

public class Client {

	/**
	 * @param args
	 */
	public static void main(String[] args) throws Exception{
		BusinessService businessService=new BusinessService();
		Business business=businessService.getBusinessPort();
		BufferedReader systemIn=new BufferedReader(new InputStreamReader(System.in));
                while(true){
			String command=systemIn.readLine();
			if(command==null || "quit".equalsIgnoreCase(command.trim())){
				System.out.println("Client quit!");
				try{
					business.echo(command);
				}
				catch(Exception e){
					// IGNORE
				}
				System.exit(0);
			}
			System.out.println(business.echo(command));
		}
	}

}

编译运行,发送一个消息后看到Server端收到并响应。

详解使用w?s?g?e?n?和?w?s?i?m?p?o?r?t?开?发?W?e?b?S?e?r?v?i?c?e,布布扣,bubuko.com

时间: 2024-10-27 11:25:47

详解使用w?s?g?e?n?和?w?s?i?m?p?o?r?t?开?发?W?e?b?S?e?r?v?i?c?e的相关文章

正则表达式中模式修正符作用详解(i、g、m、s、x、e)

正则表达式中常用的模式修正符有i.g.m.s.x.e等.它们之间可以组合搭配使用. 它们的作用如下: //修正符:i 不区分大小写的匹配; //如:"/abc/i"可以与abc或aBC或ABc等匹配; //修正符:g表示全局匹配 //修正符:m 将字符串视为多行,不管是那行都能匹配; 例://模式为:$mode="/abc/m";          //要匹配的字符串为:$str="bcefg5e\nabcdfe"              //

scons用户指南翻译(附gcc/g++参数详解)

scons用户指南 翻译 http://blog.csdn.net/andyelvis/article/category/948141 官网文档 http://www.scons.org/documentation.php ===================================== UNIX系统开发-gcc参数详解 [介绍] gcc and g++分别是gnu的c & c++编译器 gcc/g++在执行编译工作的时候,总共需要4步 1.预处理,生成.i的文件[预处理器cpp] 2

webpack入门详解

webpack入门详解(基于webpack 3.5.4  2017-8-22) webpack常用命令: webpack --display-error-details    //执行打包 webpack -w               // 提供watch方法:实时进行打包更新 webpack -p           // 对打包后的文件进行压缩 webpack -d            // 提供source map,方便调式代码 webpack -dev-server --open 

dos命令弹出对话框---Msg命令详解

标签: dos批处理对话框 2015-11-12 17:20 497人阅读 评论(0) 收藏 举报 脚本(30)  版权声明:本文为博主原创文章,未经博主允许不得转载. dos命令弹出对话框---Msg命令详解 cmd下执行: :::在当前用户的桌面弹出一个对话框, 显示哈哈二字, 并且十秒后自动关闭 ::%usename%是系统环境变量, 表当前用户名 msg  %username% /time:10  哈哈 ::表示向局域网中的192.168.1.100 ip的机子的所有用户(*)发送消息H

Akka第一个案例动手实战main方法实现中ActorSystem等代码详解

学习了Akka第一个案例动手实战main方法实现中ActorSystem等代码详解,创建ActorSystem实例,用acterOf创建MasterActor,用tell的方式给MasterActor发信息,睡眠一段时间给MasterActor发信息,处理完后关闭,资源回收. 案例如下: public static void main(String[] args) throws Exception{ ActorSystem_system =  ActorSystem.create("HelloA

ST MCU_GPIO的八种工作模式详解。

补充: N.P型的区别,就是一个为正电压启动(NMOS),一个为负电压启动(PMOS) GPIO的八种工作模式详解 浮空输入_IN_FLOATING带上拉输入_IPU带下拉输入_IPD模拟输入_AIN开漏输出_OUT_OD推挽输出_OUT_PP开漏复用输出_AF_OD推挽复用输出_AF_PP4输入 + 2 输出 + 2 复用输出,一共是8种模式,以下是八种模式的工作原理: GPIO浮空输入_IN_FLOATING模式工作原理以上截图就是浮空输入模式的原理图,图中阴影的部分在浮空输入模式下是处于不

sed   (参数) 's###g' 详解

sed   (参数) 's###g' 详解

gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解

摘自http://blog.csdn.net/elfprincexu/article/details/45043971 gcc/g++等编译器 编译原理: 预处理,编译,汇编,链接各步骤详解 C和C++编译器是集成的,编译一般分为四个步骤: 预处理(preprocessing)  ----------------- cpp/ gcc -E  编译(compilation) ------------------ cc1 / gcc -S 汇编(assembly)  ----------------

android Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)

在Android群里,经常会有人问我,Android Log是怎么用的,今天我就把从网上以及SDK里东拼西凑过来,让大家先一睹为快,希望对大家入门Android Log有一定的帮助. android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() .根据首字母对应VERBOSE,DEBUG,INFO, WARN,ERROR. 1.Log.v 的调试颜色为黑色的,任何消息都会输出,这里的v代表verbose啰嗦的意思,平时