eclipse下开发简单的Web Service
service部分
在eclipse下新建一个动态web项目
在项目中新建一个service类
编写SayHello类的代码
package org.sunny.service; //包不要引用错了 import javax.jws.WebService; import javax.xml.ws.Endpoint; //注解@WebService不能少 @WebService public class SayHello { //该方法为客户端调用的方法,方法名任意 public String say(String name){ return "Hello " + name + " , this is SayHelloService !" ; } public static void main(String[] args) { //第一个参数是访问时的url,9091是任意一个不占用的端口 Endpoint.publish("http://localhost:9091/Service/SayHello", new SayHello()); System.out.println("service success !"); } }
进行测试:对任意空白处右键
或者
运行后将会调用类中的main方法
运行结果出现如下配置则表示发布成功
访问网页:http://localhost:9091/Service/SayHello?wsdl
注意:‘?wsdl’是必须要添加的。
出现如下页面表示发布成功
client部分
新建客户端类
当然,你也可以新建一个web项目来编写客户端代码,本次client可service放在同一个项目下
打开命令行:win+R打开运行,输入cmd
输入以下命令
wsimport -s E:\SunnyWen\Data\Java_web\WebServiceDemo\src -p org.sunny.client.config -keep http://localhost:9091/Service/SayHello?wsdl
-s 后面的是你项目src所在的路径
-p 后面的是你通过该命令生成的类所在的包
-keep 表示导出webservice的class文件时是否也导出源代码java文件.
-verbose表示详细信息。
-d 表示输出的目录,目录必须事先存在,否则导出失败。
在JDK的bin文件夹中,有一个wsimport.exe,这个工具依据wsdl文件生成相应的类文件,用这些类文件,就可以像调用本地的类一样调用WebService提供的方法。该工具可以用于非Java的服务器,如:用C#编写的WebService,通过wsimport则生成Java的客户端实现。
其他命令参数请参照:http://download-llnw.oracle.com/javase/6/docs/technotes/tools/share/wsimport.html
对client类进行代码编写
package org.sunny.client; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.ws.Service; //包别导错了 import javax.xml.ws.WebServiceClient; //导入两个命令生成的类 import org.sunny.client.config.SayHello; import org.sunny.client.config.SayHelloService; //注解@WebServiceClient需要加入 @WebServiceClient public class ClientToSay { public static void main(String[] args) { // 方法一 /*try { // 服务WSDL Document的地址 URL url = new URL("http://localhost:9091/Service/SayHello?wsdl"); // 1.Qnameqname是qualified name 的简写 // 2.构成:由名字空间(namespace)前缀(prefix)以及冒号(:),还有一个元素名称构成 // 由package-info.java文件可知namespace为http://service.sunny.org/, QName qname = new QName("http://service.sunny.org/", "SayHelloService"); Service service = Service.create(url, qname); SayHello sayHello = service.getPort(SayHello.class); String result = sayHello.say("Sunny01"); System.out.println(result); } catch (Exception e) { e.printStackTrace(); }*/ // 方法二 //通过SayHelloService的getSayHelloPort()方法的奥SayHello接口 SayHello sayHello = new SayHelloService().getSayHelloPort(); //调用SayHello接口的say方法 String result = sayHello.say("Sunny02"); //输出返回内容 System.out.println(result); } }
运行为java application程序,输出结果