WebService学习(三)wsdl配置详解以及使用注解修改wsdl配置

前面分析了一下关于ws的基本知识,我们知道,wsdl是ws中很重要的文档,我们可以通过解析该wsdl文档获取ws的相关信息,其实,如果不了解该文档结构的话,问题也不大,只要会解析即可进行开发。但是如果想要生成一个符合自己项目的,或者比较人性化的一个wsdl的话,或者从可读性角度来说,就需要在编写ws代码时进行一些相应的配置了,比如说ws名称,参数等等,那么就需要对wsdl文档有一定的了解。这篇文章主要从两个角度来展开:一是解释一下wsdl中的相关配置,二是如何在ws程序中通过注解指定这些配置。

1. wsdl配置详解

要生成wsdl,首先得有一个ws,我们还是使用前面文章中提到的那个简单的ws,如下:

<span style="color:#000000"><code class="language-java"><span style="color:#9b859d">@WebService</span> <span style="color:#880000">//默认静态方法是不能发不成ws服务的</span>
<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">MyWebService</span> {

    <span style="color:#000088">public</span> String <span style="color:#009900">sayHello</span>(String name) {
        <span style="color:#000088">return</span> name + <span style="color:#009900">" 你好!"</span>;
    }

    <span style="color:#000088">public</span> <span style="color:#000088">static</span> <span style="color:#000088">void</span> <span style="color:#009900">main</span>(String[] args) {
        String address = <span style="color:#009900">"http://192.168.10.1:6666/ws"</span>;
        Endpoint.publish(address, <span style="color:#000088">new</span> MyWebService());
        System.out.println(<span style="color:#009900">"访问WSDL的地址为:"</span> + address + <span style="color:#009900">"?WSDL"</span>);
    }
}</code></span>

  运行一下,即可开启ws服务,请求http://192.168.10.1:6666/ws?WSDL即可看到wsdl页面,接下来分析一下该wsdl文件中与上面程序中的对应关系,看下图(为了清晰的展示,图我就不缩小了): 
这里写图片描述
  我们可以看到,生成的ws服务名称是在原来的类后面有加了个Service而已,服务类型名是在原来的类后面加了个Port,包括参数默认为arg0,返回值为return 等等,这些都能从wsdl文件中看的出来,通过这个wsdl生成的java代码中的类名自然也就是默认的了,如果我们想要修改这些默认的配置,则需要在编写ws的时候通过注解来设置一下。

2. 使用注解修改wsdl配置

我们修改一下上面的ws,使用注解来配置我们自己需要的名称,如下

<span style="color:#000000"><code class="language-java"><span style="color:#880000">/*
 *  自定义ws服务, jdk1.6版本仅仅支持 soap1.1格式,jdk1.7及以上版本支持 soap1.2格式
 *  发布ws服务只需要@WebService注解即可, 如果想要更好的可维护性,则可以通过注解来实现
 * */</span>
<span style="color:#9b859d">@WebService</span> <span style="color:#880000">// 默认静态的方式是不能发布ws服务的</span>
(
        name=<span style="color:#009900">"MyWebService1"</span>,  <span style="color:#880000">// 服务实现类的名称</span>
        serviceName=<span style="color:#009900">"MyWebServiceService1"</span>,  <span style="color:#880000">// 默认在发布的服务实现者的名称后面添加Service</span>
        portName=<span style="color:#009900">"MyWebServicePort1"</span>,   <span style="color:#880000">// 服务类型的名称: 默认在 发布的服务实现者(MyWebService) 后面添加 port</span>
        targetNamespace=<span style="color:#009900">"ws.client.test"</span>    <span style="color:#880000">// 发布ws服务的命名空间,此空间默认为当前服务包路径的 "倒写"此名称也是 wsimport 命令生成 java类时默认的包路径 -p</span>
)
<span style="color:#000088">public</span> <span style="color:#000088">class</span> <span style="color:#4f4f4f">MyWebService</span> {

    <span style="color:#9b859d">@WebMethod</span>(exclude=<span style="color:#000088">true</span>)  <span style="color:#880000">// 默认public方法可以发布为ws服务, 如果要排除则配置  exclude=true</span>
    <span style="color:#000088">public</span> String <span style="color:#009900">sayHello</span>(String name){
        System.out.println(<span style="color:#009900">"name:"</span> + name);
        <span style="color:#000088">return</span> name + <span style="color:#009900">",你好!"</span>;
    }

    <span style="color:#880000">//可以指定wsdl中的方法名,参数名和返回值</span>
    <span style="color:#9b859d">@WebMethod</span>(operationName=<span style="color:#009900">"sayHello"</span>)
    <span style="color:#000088">public</span> @<span style="color:#009900">WebResult</span>(name=<span style="color:#009900">"result"</span>) String sayHello2(<span style="color:#9b859d">@WebParam</span>(name=<span style="color:#009900">"name"</span>) String name,<span style="color:#9b859d">@WebParam</span>(name=<span style="color:#009900">"age"</span>) <span style="color:#000088">int</span> age){
        System.out.println(<span style="color:#009900">"name:"</span> + name);
        <span style="color:#000088">return</span> name + <span style="color:#009900">",你好!,年龄为:"</span> + age;
    }

    <span style="color:#000088">public</span> <span style="color:#000088">static</span> <span style="color:#000088">void</span> <span style="color:#009900">main</span>(String[] args) {
        <span style="color:#880000">// 一个端口可以发布多个ws服务</span>
        String address=<span style="color:#009900">"http://192.168.1.105/ws"</span>;
        <span style="color:#880000">// 创建一个服务端点, banding服务的实现类</span>
        Endpoint.publish(address, <span style="color:#000088">new</span> MyWebService());
        System.out.println(<span style="color:#009900">"访问wsdl的地址为:"</span> + address + <span style="color:#009900">"?WSDL"</span>);
    }
}
</code></span>

通过上面这些注解,我将ws服务相关的信息给重新配置了,运行一下,来对比注解看一下生成的wsdl: 
这里写图片描述

这里写图片描述
  可以看出,生成的wsdl中的配置完全按照我们自己指定的来,这样通过解析该wsdl文件得到的java代码中的类以及方法也是按照自定义的来,这就能满足实际中具体的要求了。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值