jax-ws创建和访问webservice

目前webservice在各个行业中的应用都十分的火。市面上目前流行的关于webservice的框架也有很多,今天我们不套用外部的框架,而是通过纯java来一步一步实现webservice的服务端的创建和客户端的访问。

一、创建webservice的服务器端

整体步骤如下:
1、创建服务的接口
2、创建服务的实现类
3、发布服务
4、验证服务是否发布成功

二、创建webservice的客户端

整体步骤如下:
1、通过java.net.URL定义连接webservice服务端的URL地址
2、通过javax.xml.namespace.QName设置命名空间和本地服务名称
3、通过javax.xml.ws.Service创建一个从客户端到服务器端的连接
4、通过javax.xml.ws.Service的getPort获取接口类
5、通过接口访问相应的方法


三、案例演示

(一)、创建webservice的服务器端

1、创建接口类

通过java的注解@WebService标明此接口是一个WebService接口


package com.sample.server;

import javax.jws.WebMethod;
import javax.jws.WebService;

import com.sample.bean.Student;

@WebService
public interface MyService {

@WebMethod
public String getStuName(String id);

public Student getStuInfo(String id);
}





2、创建接口的实现类

这里需要注意,一定要设置endpointInterface。它的值为接口的全称,一定要带上包名。


package com.sample.server;

import java.util.Date;

import javax.jws.WebService;

import com.sample.bean.Student;
@WebService(endpointInterface="com.sample.server.MyService")
public class MyServiceImpl implements MyService {

@Override
public String getStuName(String id) {
if("1".equals(id)) {
System.out.println("getStuName");
return "张三" ;
}
return "";
}

@Override
public Student getStuInfo(String id) {
Student student = new Student();
if("1".equals(id)) {
System.out.println("getStuInfo");
student.setId("1");
student.setName("张三");
student.setPassword("123456");
student.setAge(12);
student.setMakedate(new Date());
}
return student;
}

}



3、发布服务

可以在这里创建一个Server类。通过Endpoint的publish方法发布服务,代码中的http://localhost:8082/stu为此服务的发布地址,new MyServiceImpl()表示服务的实现类。运行main方法即可发布成功,如果发现有错误跑出,查看一下端口号是否可用。


package com.sample.server;

import javax.xml.ws.Endpoint;


public class Server {

public static void main(String[] args) {
Endpoint.publish("http://localhost:8082/stu", new MyServiceImpl());
}
}



4、验证服务是否发布成功

在浏览器中输入http://localhost:8082/stu,如果出现以下内容表示服务已经发布成功


Web Services
No JAX-WS context information available.


在浏览器中输入http://localhost:8082/stu?wsdl就可以查看生成的wsdl文件,我的内容如下:


-
-
-
-
-



-


-


-


-


-
-



-




-

-

-


-



-

-


-




-
-






(二)、创建客户端

[color=red]1、创建客户端类MyClient

这里解释一下QName的两个参数:
第一个参数值是上面生成的wsdl文件中targetNamespace的值,我的为"http://server.sample.com/"。这个值实际上就是包名的反转。


第二个参数为:

name="MyServiceImplService">[/color]


运行此方法可以在控制台打印出getStuName,表示访问成功。


package com.sample.client;

import java.net.MalformedURLException;
import java.net.URL;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import com.sample.server.MyService;


public class MyClient {

public static void main(String[] args) throws MalformedURLException {
String address = "http://localhost:8082/stu?wsdl";
URL url = new URL(address);
QName qname = new QName("http://server.sample.com/", "MyServiceImplService");
Service service = Service.create(url,qname);
MyService tMyservice = service.getPort(MyService.class);
tMyservice.getStuName("1");
}
}


(三)、遗留问题

上面这种访问方式,我们会发现在客户端中要依赖MyService这个类,而实际工作中,我们根本无法获取到MyService,服务商也不可能为我们提供这个接口,所以,我们将在下一节中通过wsimport来解决这个问题。

你可能感兴趣的:(xml)