1、创建基于JWS的Web Service,命名为JWSofHeYS,其中星号部分用姓名的拼音取代(姓写全拼,名写首字母,如JWSofSongW)。该服务有一个方法string JWSHelloHeYS(string),其中星号部分用姓名取代(编码规则同上),该方法接收学号string作为输入,输出个人的基本信息string,如学院,班级,姓名,籍贯。
项目结构:
创建了SHIYAN1JWSWEB项目,里面有两个模块,模块SHIYAN1JSWWEB_SER表示服务端,在com.heys包下创建了一个接口和两个类,JWSofHeYS 接口定义了一个Web服务的接口,JWSofHeYSImpl 类实现了 JWSofHeYS 接口,JWSofHeYSPublisher 类负责发布 Web 服务。
模块SHIYAN1JWSWEB_CLI表示客户端,com.heys包下创建了一个客户端测试类,其余类都是由客户端代理产生的代码。
实现代码及截图:
JWSofHeYS: @WebService public interface JWSofHeYS { @WebMethod String JWSHelloHeYS(String studentId); } JWSofHeYSImpl : @WebService public class JWSofHeYSImpl implements JWSofHeYS { @Override @WebMethod @WebResult(name = "personalInfo") public String JWSHelloHeYS(@WebParam(name = "studentId") String studentId) { // 根据学号查询个人信息, String personalInfo = "学院:计算机学院,班级:21软件工程(4)班,姓名:何育思,籍贯:广东梅州"; return personalInfo; } } JWSofHeYSPublisher: public class JWSofHeYSPublisher { public static void main(String[] args) { String address = "http://localhost:8080/JWSofHeYS"; Endpoint.publish(address, new JWSofHeYSImpl()); System.out.println("JWSofHeYS Web Service 已发布!"); } } | 截图显示 JWSofHeYS接口: 定义了一个Web服务的接口 @WebMethod 注解表示其中的方法将会作为Web服务的操作。在这里,只有一个方法 JWSHelloHeYS,它接收一个学号 studentId 作为参数,并返回一个字符串类型的个人信息。 JWSofHeYSImpl 类: 这个类实现了 JWSofHeYS 接口。 同样使用了 @WebService 注解,表示这个类是一个Web服务的实现。 @WebMethod 注解表示该方法将作为Web服务的操作。 @WebResult 和 @WebParam 注解用于定义返回结果的名称和方法参数的名称。 JWSofHeYSPublisher 类: 这个类负责发布 Web 服务。 Endpoint.publish(address, new JWSofHeYSImpl()) 语句将 JWSofHeYSImpl 类发布到指定地址,使其成为可访问的Web服务。 通过调用 main 方法,服务将在 http://localhost:8080/JWSofHeYS 上发布,并在控制台输出 "JWSofHeYS Web Service 已发布!" 的消息。 |
2、服务的部署和配置
截图:
![]() |
对截图内容的文字说明:
创建了一个字符串变量 address,存储了 Web 服务的地址,这里是 http://localhost:8080/JWSofHeYS。这个地址指定了服务的访问路径。 然后,通过 Endpoint.publish(address, new JWSofHeYSImpl()) 这行代码,它使用 JAX-WS 的 Endpoint 类的 publish 方法将 JWSofHeYSImpl 类发布为一个 Web 服务。这意味着任何发送到指定地址的请求都将被路由到 JWSofHeYSImpl 类中定义的方法。 这段代码实际上是将一个 Java 类转换为一个可通过 Web 访问的服务,使得其他应用程序能够通过 HTTP 请求调用其中定义的方法。 |
3、在浏览器中查看该Web服务的描述文档
截图:
![]() |
结合自己编写的web服务,说明该服务的WSDL文档中各元素与服务之间的对应关系。
<definitions> 元素: targetNamespace="http://heys.com/":指定了服务的目标命名空间。 name="JWSofHeYSImplService":指定了服务的名称。 <types> 元素:包含了服务所使用的数据类型的定义。在这个文档中,通过 <xsd:schema> 元素导入了一个命名空间为 http://heys.com/ 的 XML 模式文档(XSD),用于描述服务使用的数据结构。 <message> 元素:定义了服务所使用的消息。name="JWSHelloHeYS" 和 name="JWSHelloHeYSResponse" 分别表示请求和响应的消息。 <part> 元素指定了消息的参数,其中 element="tns:JWSHelloHeYS" 和 element="tns:JWSHelloHeYSResponse" 分别引用了请求和响应的元素。 <portType> 元素:定义了服务的端口类型,即服务中所支持的操作集合。 name="JWSofHeYSImpl" 指定了端口类型的名称。 operation 元素定义了端口类型中的操作,这里只有一个名为 JWSHelloHeYS 的操作,它包含了输入和输出消息的定义。 <binding> 元素:将端口类型绑定到具体的通信协议和消息格式。 name="JWSofHeYSImplPortBinding" 指定了绑定的名称。 <soap:binding> 元素指定了 SOAP 协议的绑定信息,其中 transport="http://schemas.xmlsoap.org/soap/http" 指定了 HTTP 传输协议。 <operation> 元素描述了操作的绑定信息,包括输入和输出消息的格式。 <service> 元素:描述了服务的实例。 name="JWSofHeYSImplService" 指定了服务的名称。 <port> 元素定义了服务的端口,包括绑定信息和访问地址。 总的来说,这个 WSDL 文档定义了一个名为 JWSofHeYSImplService 的 Web 服务,它包含了一个操作 JWSHelloHeYS,该操作接受一个请求消息 JWSHelloHeYS,并返回一个响应消息 JWSHelloHeYSResponse。这个服务使用 SOAP 协议进行通信,通过 HTTP 传输。 |
4、产生客户端代理
截图:
|
对截图内容的文字说明:
这段命令行操作 wsimport 是用来根据指定的 WSDL 文件生成 Java 代码,并将生成的 Java 类文件保存到指定的目录中。这里新创建了一个客户端项目,用于客户端测试,生成的客户端代理在项目中的位置如上图所示。 命令行解释: wsimport:该命令用于生成基于 Web Services 的 Java 客户端代码。 -d D:\daima\SHIYAN1JWSWEB\SHIYAN1JWSWEB_CLI\src\main\java:指定生成的 Java 类文件存放的目录。 -p com.heys:指定生成的 Java 类的包名。 -keep:生成的 Java 源文件和编译后的类文件保留在指定的目录中。 -verbose:显示详细的日志输出。 |
5、创建客户端
截图:
JWSHeYSClient客户端测试类: 测试结果: |