问题?自定义WebService和客户端调用《二》,客户端调用有几种方式
一、JDK创建WebService服务和使用
Oracle前身sun公司,早就意识到WebService的强大,和它的未来前景,所以在JDK中早就封装了这样的创建WebService服务。
查看DJK-API文档:
1.新建Java或web工程,建一个类(这个类作为服务端):
<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">package com.itcast.ws;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService //表示这个类,代表的是启动服务,ServiceName名字可以改,默认不写的话,名字为类名加Service
public class HelloService {
public String sayhello(String name){//能够访问的借口方法,必须是public方法
System.out.println("Hello: "+name);
return "Hello: "+name;
}
public String sayhello1(){
return "成功调用第二个服务器方法";
}
public static void main(String[] args) {
/*
* 调用静态的方法Endpoint.publish创建一个服务
* 1.address:URI,指定要使用的地址和传输/协议,也就是服务地址
* 2.implementor:实现者,也就是服务端
*/
<pre name="code" class="java"><span style="white-space:pre"> </span>//使用自建端口号之前,cmd中使用netstat -a 检查一下端口是否被占用</span></span>
Endpoint.publish("http://localhost:9090/hello", new HelloService());System.out.println("启动服务:new HelloService");}}
/**如果改成private方法的话就会出现以下错误,我们做这个webservcie服务就是为了,*公布数据给别人用的,给成私有的,就达不到目的了,自然就会出错。Static、finally也不行
*Exception in thread "main"com.sun.xml.internal.ws.model.RuntimeModelerException: The web *service definedby the class com.itcast.ws.HelloService does not contain any valid WebMethods.
*/
运行:如果出现错:Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException:解决办法将jdk升级到1.7版本,MyEclispe的preference下java install(一般情况下,MyEclispe用的而是自身带的JDK,而不是安装得JDK,需要配置一下)
否则就运行成功:
或者网页调用:http://localhost:9090/hello或http://localhost:9090/hello?wsdl 看看wsdl服务描述文档
2.新建客户端,并且调用该服务,在调用过程中,该服务必须一直开启
用wsimport -s . http://localhost:9090/hello?wsdl来生成本地代码,在上一文章中已经说过怎么做了。
把生成的文件夹拷入到客户端项目src下,并且新建一个测试调用类:
<span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">package com.itcast.test;
import org.junit.Test;
import com.itcast.ws.HelloService;
import com.itcast.ws.HelloServiceService;
public class test1 {
@Test
public void testService(){
HelloServiceService helloServiceService = new HelloServiceService();
HelloService service = helloServiceService.getHelloServicePort();
String name = service.sayhello("李*****&#