使用RI发布WS

jdk中已经内置了webservice发布,不过要用tomcat等web服务器发布webservice,还需要第三方webservice框架。Axis2和CXF、

是目前最流行的webservice框架。这两个框架各自有优点。不过属于重量级框架。

  JAXWS-RI是JAX webservice参考实现。相对于Axis2和CXF,JAXWS-RI是一个轻量级的框架。虽然是个轻量级框架。JAXWS-RI也提供了在web

服务器中发布webservice的功能,官方网址:https://jax-ws.java.net/.

    今天就用JAXWS-RI在tomcat发布webservice

 

服务端:

(1)新建一个maven web项目,在pom.xml添加。依赖包

<dependency>
<groupId>com.sun.xml.ws</groupId>
<artifactId>jaxws-rt</artifactId>
<version>2.2.10</version>
</dependency>

(2)创建服务接口

package demo.ws.soap_jaxws;

import javax.jws.WebService;

/**编写ws接口及实现
 * 
 * 
 * */
@WebService
public interface HelloService {
String say(String names);
}

 

(3)创建接口实现类

package demo.ws.soap_jaxws;

import javax.jws.WebService;

@WebService(
    serviceName="HelloService",
    portName="HelloServicePort",
    endpointInterface="demo.ws.soap_jaxws.HelloService"
        )

public class HelloServiceImpl implements HelloService {
    /**
     * 接口和实现类上都加上webservice注解,可在实现类的注解中添加一些关于ws信息,可选的,
     */
    public String say(String names) {
        
        return "hello"+names;
    }

}

(3)WEB-INF目录下添加sun-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?>
<endpoints xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" version="2.0">
<!-- 服务路径http://站点路径/service/hello?wsdl-->
<endpoint name="HelloService" implementation="demo.ws.soap_jaxws.HelloServiceImpl" url-pattern="/service/hello"/>
</endpoints>

(4)web.xml如果是3.0以上的就不用配置了。

(5)maven项目打包

(6)把打出来的war包放入tomcat的。webapps目录,并启动tomcat

(7)浏览器直接输入:http://localhost:8081/helloSoapDemo/service/hello   其中 helloSoapDemo是我的项目路径。service/hello是我们发布的路径、

 

 这就完成了RI 在tomcat上发布服务了、

那么如何调用刚刚发布的wsdl文件的。

客户端调用WebService的方式:
    1.通过wximport生成代码
    2.通过客户端编程方式
    3.通过ajax调用方式
    4.通过 URL Connection 方式调用

客户端:

《1》在JDK的bin文件夹中,提供了一个根据WSDL生成java类的工具 wsimport.exe.

用法 wsimport[options]

其中,【options】包括:

-b <path>                 指定 jaxws/jaxb 绑定文件或附加模式
                            (每个 <path> 都必须具有自己的 -b)
  -B<jaxboption>            将此选项传递给 JAXB 模式编译器
  -catalog <file>           指定用于解析外部实体引用的目录文件
                            支持 TR9401, XCatalog 和 OASIS XML 目录格式。
  -d <directory>            指定放置生成的输出文件的位置
  -encoding <encoding>      指定源文件所使用的字符编码
  -extension                允许供应商扩展 - 不按规范
                            指定功能。使用扩展可能会
                            导致应用程序不可移植或
                            无法与其他实现进行互操作
  -help                     显示帮助
  -httpproxy:<host>:<port>  指定 HTTP 代理服务器 (端口默认为 8080)
  -keep                     保留生成的文件
  -p <pkg>                  指定目标程序包
  -quiet                    隐藏 wsimport 输出
  -s <directory>            指定放置生成的源文件的位置
  -target <version>         按给定的 JAXWS 规范版本生成代码
                            默认为 2.2, 接受的值为 2.0, 2.1 2.2
                            例如, 2.0 将为 JAXWS 2.0 规范生成兼容的代码
  -verbose                  有关编译器在执行什么操作的输出消息
  -version                  输出版本信息
  -wsdllocation <location>  @WebServiceClient.wsdlLocation 值
  -clientjar <jarfile>      创建生成的 Artifact 的 jar 文件以及
                            调用 Web 服务所需的 WSDL 元数据。
  -generateJWS              生成存根 JWS 实现文件
  -implDestDir <directory>  指定生成 JWS 实现文件的位置
  -implServiceName <name>   生成的 JWS 实现的服务名的本地部分
  -implPortName <name>      生成的 JWS 实现的端口名的本地部分
 
扩展:
  -XadditionalHeaders              映射标头不绑定到请求或响应消息不绑定到
                                   Java 方法参数
  -Xauthfile                       用于传送以下格式的授权信息的文件:
                                   https://username:password@example.org/stock?wsdl
  -Xdebug                          输出调试信息
  -Xno-addressing-databinding      允许 W3C EndpointReferenceType 到 Java 的绑定
 
  -Xnocompile                      不编译生成的 Java 文件
  -XdisableAuthenticator           禁用由 JAX-WS RI 使用的验证程序,
                                   将忽略 -Xauthfile 选项 (如果设置)
  -XdisableSSLHostnameVerification 在提取 wsdl 时禁用 SSL 主机名
                                   验证
 

 


 

通过jdk自带的wximport,我们把刚刚生成的 wsdl生成本地的 F盘下的temp中。

 

 



 

posted @ 2017-11-08 10:04  技术专家  阅读(414)  评论(0)    收藏  举报