使用jdk发布第一个webservice服务并调用
如何发布一个web服务? 发布第一个webservice服务 调用webservice服务 wsimport命令 |
一、发布一个webservice步骤: jdk最低版本要求:jdk1.6.0_21 1、将一个类或者接口标记注解@WebService 2、使用EndPoint类,发布服务(开启新的线程) |
注意:一个合格的webservice方法 ①不能被static修饰 ②不能被final修饰 否则会报错: The web service defined by the class cn.zengfansheng.webservice.publish.Hello does not contain any valid WebMethods. |
二、案例:sayHello ①服务端 1、将一个类Hello定义增加注解 @WebService 2、使用 Endpoint.publish(address, new Hello());发布服务 ②客户端 1、通过服务端发布的address,加上?wsdl,查看发布的webservice http://localhost:8080/sayhello?wsdl 2、找到发布的webservice的名称和里面发布的方法 <service name="HelloService">
<port name="HelloPort" binding="tns:HelloPortBinding">
<soap:address location="http://localhost:8080/sayhello"/>
</port>
</service>3、使用wsimport工具生成java文件,然后将其拷贝到我们的项目中去 wsimport -s . http://localhost:8080/sayhello?wsdl 注意:生成的java文件的包名不能改动,否则会报错,当然我们可以使用wsimport -p 参数来自定义包名 4、new对象及调用发布服务的方法 HelloService service = new HelloService();
Hello hello = service.getHelloPort();
String s = hello.sayHello("hacket");
System.out.println(s); |
三、代码: 1、服务端: package cn.zengfansheng.webservice.publish;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* @WebService 将 Java 类标记为实现 Web Service,或者将 Java 接口标记为定义 Web Service 接口
*/
@WebService
public class Hello {
public static void main(String[] args) {
/**
* 参数1:绑定服务的发布地址
*
* 参数2:提供服务的实例
*/
String address = "http://localhost:8080/sayhello";
Endpoint.publish(address, new Hello());
// Endpoint.publish会重新开启一个线程,所以下面会输出
System.out.println("server ready...");
}
public String sayHello(String name) {
System.out.println("发布服务~~");
return "Hello," + name;
}
} |
2、客户端: package cn.zengfansheng.publish;
import cn.zengfansheng.webservice.publish.Hello;
import cn.zengfansheng.webservice.publish.HelloService;
public class MyApp {
/**
* @param args
*/
public static void main(String[] args) {
HelloService service = new HelloService();
Hello hello = service.getHelloPort();
String s = hello.sayHello("hacket");
System.out.println(s);
}
} |