加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

WebService:WSDL、@Webservice、@WebMethod、@WebResult、@WebP

发布时间:2020-12-16 22:27:42 所属栏目:安全 来源:网络整理
导读:l? wsdl – WebService Description Language(WS描述语言) l? 它主要定义了三个方面的问题: ???? What?即服务是什么? ???? (portType,types,message) ???? How?如何调用服务? ???? 通过binding元素说明调用服务的方式:soap,soap12,post,get. ???? Wh

l? wsdl – WebService Description Language(WS描述语言)

l? 它主要定义了三个方面的问题:

???? What?即服务是什么?

???? (portType,types,message)

???? How?如何调用服务?

???? 通过binding元素说明调用服务的方式:soap,soap12,post,get.

???? Where?在哪儿调用服务?

???? Service元素,soap:address.

?


l? WSDL文件的内容,一般由服务默认生成,但为了更好的向开发人员提供使用说明书,一般应做一些简单的修改。至少不应该暴露我们的包结构。而targetNamespace默认情况下为倒置的包名,这已经暴露了我们的包结构。

l? 通过在类文件上添加以下注解,可以修改wsdl生成的各元素,而不是直接去修改wsdl文件,直接去修改wsdl文件是无效的。

l? WebService的注解包括:

???? @WebService-定义服务?? --类上

???? @WebMethod-定义方法?? - 方法

???? @WebResult-定义返回值– 返回值

???? @WebParam-定义参数– 参数

l? 通过WebService的注解,可以更加形像的描述Web服务。从而生成WSDL文档。

l? 当修改了WebService注解之后,同时会影响客户端生成的代码。

l? 调用的方法名和参数名也发生了变化。

l? 即使是没有修改源代码,只修改了注解,客户端的代码也必须要重新生成(注意是生成而不是下载)。否则调用将会失败。

l? 生成本地调用代码,依然使用wsimport工具。

?

?

/**

?* 一个加了很多注解的代码

?*/

@WebService(name="myName",//对应portTypename="myName"

portName="myPort",? //对应服务中的portname="myPort"

serviceName="myService",//对应servicename="myService"

targetNamespace="http://leaf.com/mynamespace")//可以随意书写类似于java中的package

public classHelloWorld{

private staticSimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-ddHH:mm:ss");

@WebMethod(action="myAction",//定义一个soapAction="myAction"用于找到这个方法以执行

??operationName="myOperationName")//定义可以调用的方法,会生成相应类的具体方法,operation name=".."

public@WebResult(name="mySayHelloResult")String//定义返回值的名称

sayHello(){

return"HelloWorld";

}

@WebMethod(action="mySayHiAction",operationName="mySayHiOperationName")

public@WebResult(name="mySayHiResult")StringsayHi(@WebParam(name="myParaName",

//将参数放到头信息中,用于保护参数,默认在body中

?????????????????????????????????????????????????????header=true,

?mode=Mode.IN)

String name){

String str = "你好:"+name+",当前时间是:"+sdf.format(newDate());

return str;

}

public staticvoid main(String[] args) {

Endpoint.publish("http://127.0.0.1:6666/helloworld",newHelloWorld());

}

}

3:将上面的程序对外发布以后,我们通过MyEclipse的WebServiceExplorer来访问

你会发现和以前不一样的提示信息,但其实,仍然还是调用的那同一个方法。

4:去观察SOAP请求和返回文档的修改。在MyEclipseWebService Explorer的返回信息窗口中点Soure即可以看到。观察变化加以分析。

5:再次使用wsimport –s .http://127.0.0.1:6666/helloworld?wsdl生成java代码然后调用,看看还是哪些类名吗?

以下是调用代码(可以用面目全非来形容,但完成的还是同样的工作。)

packagecom.leaf.mynamespace;

public classMain {

public staticvoid main(String[] args) {

//通过分析wsdl可知从myService中调用getMyPort返回myName

MyName myName = newMyService().getMyPort();

//通过myName的mySayHiOperationName来调用sayHi方法

String str =myName.mySayHiOperationName("王健");

System.err.println(str);

}

}


?

@Webservice

l? @WebService注解,作用在具体类上。而不是接口。

l? 一个类只有添加了此注解才可以通过Endpoint发布为一个web服务。

l? 一个添加了此注解的类,必须要至少包含一个实例方法。静态方法和final方法不能被发布为服务方法。

WebService注解包含以下参数:

@WebMethod

l? 此注解用在方法上,用于修改对外暴露的方法。


@WebResult用于定制返回值到WSDL的映射:

@WebParam用于定义WSDL中的参数映射:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读