集册 Web Services 教程 Java Web Services 实例

Java Web Services 实例

欢马劈雪     最近更新时间:2020-08-19 03:09:19

663

一 Spring整合CXF

Web Services只是一套接口规范,实际运用中实现Web Services的方法有很多种,Java本身在jdk1.7之后也对Web Services有了默认的实现(Oracle JAX-WS RI),但是在我们实际开发中一般还是会使用框架来,比如这里所提到的CXF就有着广泛的应用。
CXF单独发布就不说了,直接讲Spring整合CXF,毕竟现在的JavaEE开发是离不开Spring了。

1.1 maven配置

加入maven依赖

<!--cxf-->
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-frontend-jaxws -->
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-frontend-jaxws</artifactId>
    <version>3.1.6</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http -->
<dependency>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-rt-transports-http</artifactId>
    <version>3.1.6</version>
</dependency>

1.2 配置 web.xml

<!--定义一个cxf的servlet-->
<servlet>
    <servlet-name>CXFServlet</servlet-name>
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>CXFServlet</servlet-name>
    <url-pattern>/webservice/*</url-pattern>
</servlet-mapping>

1.3 写一个WS接口及其实现

非常简洁的接口和实现
接口:HelloWorld.java

package com.nowjava.cxf;

import javax.jws.WebService;

@WebService
public interface HelloWorld {
    public String say(String str);
}

实现:HelloWorldImpl.java

package com.nowjava.cxf.impl;

import com.nowjava.cxf.HelloWorld;
import org.springframework.stereotype.Component;
import javax.jws.WebService;

@Component("helloWorld")
@WebService
public class HelloWorldImpl implements HelloWorld {
    public String say(String str) {
        return "Hello"+str;
    }
}

1.4 修改Spring配置文件

在spring主配置文件spring.xml中添加引入spring-cxf.xml

<!-- lang: xml -->
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd">
 
    <context:component-scan base-package="com.erictao"/>
    <!-- 省略其他配置内容 -->
    <import resource="spring-cxf.xml"/>
</beans>

并且创建配置文件spring-cxf.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:jaxws="http://cxf.apache.org/jaxws"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
 
    <!-- 定义webservice的发布接口  -->
    <jaxws:endpoint implementor="#helloWorld" address="/HelloWorld">
 
</beans>

更加具体的配置可以查看官方给出的文档:http://cxf.apache.org/docs/how-do-i-develop-a-service.html。
#helloWorld指的是我们在HelloWorldImpl类中所自定义的名字,即@Component("helloWorld")定义的bean id,/HelloWorld则是我们定义的接口地址。

二 运行发布WS

之后我们运行项目输入该地址:http://127.0.0.1:8080/ssm/webservice/HelloWorld?wsdl如果出现如下界面:

nowjava.com

则说明我们的webservice发布成功了。接下来只需要通过客户端调用这个接口即可获得返回结果了。

附:客户端代码生成

客户端的代码可以直接使用工具生成,可参考下面说明:

环境准备

1、JDK环境 
2、下载apache-cxf发布包,目前最新版本为3.1.7,解压发布包,设置CXF_HOME,并添加%CXF_HOME %/bin到path环境变量。 
3、CMD命令行输入wsdl2java -help,有正常提示说明环境已经正确配置。 
这里写图片描述

命令使用

此命令主要是生成webservice的客户端代码,服务端可以是自行开发的服务,也可以是需要对接的服务接口,最简单的命令如下: 
wsdl2java wsdlurl 
其中wsdlurl为服务发布的访问地址,未写参数默认生成的是客户端的代码,其中用得最多的是-encoding 参数,是指定Java代码的编码格式,例如: 
wsdl2java -encoding wsdlurl

其他详细的参数及说明可以用wsdl2java -help或wsdl2java -h获取,根据实际的需求设置相应的参数即可。

常用接口:IP地址来源搜索 WEB 服务 
1、生成客户端代码 
WSDL地址: 
http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl 
使用wsdl2java工具将客户端代码直接生成在eclipse的工程里,eclipse工程地址为:E:\workspace\webservice,命令如下:

wsdl2java -encoding utf-8 -d E:/workspace/webservice/src http://www.webxml.com.cn/WebServices/IpAddressSearchWebService.asmx?wsdl1

-encoding表示生成的Java文件编码格式为utf8,-d表示代码生成路径为E:/workspace/webservice/src。 
执行完毕,没有报任何错误,说明执行成功 
这里写图片描述

可以看到在eclipse下面已经生成了相应的代码: 
这里写图片描述

2、客户端代码调用服务 
写一个小demo,调用发布的IP查询服务

展开阅读全文