使用@WebResult注解

为了演示注解@WebResult如何工作,下面的例子是基于前面例子:ch01.ts.TimeServer SEI修改的另一个新版本。

例:使用了注解的TimeServer服务

package ch01.ts;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;

/**
 * 服务端点接口定义(SEI)
 * @author fuhd
 */
@WebService
@SOAPBinding(style = Style.RPC)
public interface TimeServer {
	@WebMethod 
	@WebResult(partName = "time_response")
	String getTimeAsString();
	
	@WebMethod 
	@WebResult(partName = "time_response")
	long getTimeAsElased();
}

两个服务操作方法中均添加了@WebResult注解。在产生的WSDL文档中,message元素反映了这个变化:

<message name="getTimeAsString"/>
<message name="getTimeAsStringResponse">
    <part name="time_response" type="xsd:string"/>
</message>
<message name="getTimeAsElased"/>
<message name="getTimeAsElasedResponse">
    <part name="time_response" type="xsd:long"/>
</message>

没有添加@WebResult注解之前,WSDL文档中,message元素是这样的:

<message name="getTimeAsString"/>
<message name="getTimeAsStringResponse">
    <part name="return" type="xsd:string"/>
</message>
<message name="getTimeAsElased"/>
<message name="getTimeAsElasedResponse">
    <part name="return" type="xsd:long"/>
</message>

两个message元素对比,我们可以看出,return标签被换成了time_response,也就是@WebResult注解定义的。在从web服务返回的SOAP消息中也同样反映出了这点变化,以调用getTimeAsString服务方法为例:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:getTimeAsStringResponse xmlns:ns2="http://ts.ch01/">
            <time_response>Mon Mar 17 10:41:13 CST 2014</time_response>
        </ns2:getTimeAsStringResponse>
    </S:Body>
</S:Envelope>

没有添加@WebResult注解时,SOAP消息返回是这样的:

<?xml version="1.0" ?>
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
    <S:Body>
        <ns2:getTimeAsStringResponse xmlns:ns2="http://ts.ch01/">
            <return>Mon Mar 17 10:46:30 CST 2014</return>
        </ns2:getTimeAsStringResponse>
    </S:Body>
</S:Envelope>

从SOAP消息对比中,我们也可以看到,return标签也相应地被替换成了time_response标签。假设我们只对getTimeAsString增加@WebResult注解,那么返回的SOAP消息中针对该服务操作使用time_response标签,而针对getTimeAsElapsed服务操作所返回的SOAP消息中仍然使用默认的return标签。

在java中,提供了许多注解来决定生成的WSDL文档以什么样的格式展现。我们后面将通过简单的篇幅来介绍这些注解。除一些特殊目的的外,我们可以很容易地简化对注解的使用。在WSDL和SOAP消息中,无论是用到了time_response标签还是return标签,TimeServer的正确运行都不受影响。

你可能感兴趣的:(java-web服务)