使用Java发布WebService的简单实例

来源:互联网 发布:野孩子 知乎 编辑:程序博客网 时间:2024/05/16 13:39

本文转载于http://m.blog.csdn.net/article/details?id=40163757


1,在Java项目中发布一个WebService服务:

如何发布?

——JDK1.6JAX-WS规范定义了如何发布一个WebService服务;

(1)jdk1.6.0_21以后的版本发布;

(2)Web服务相关的类,都位于Javax.jws.*包中

        @WebService——此注解用在类上指定将此类发布成一个WebService

        EndPoint——此类为端点服务类,其中publish()方法用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上,用于发布

2,例子:

(1)发布WebService服务


HelloWebService.java:

<span style="font-family:KaiTi_GB2312;font-size:18px;">package cn.tgb.ws;importjavax.jws.WebMethod;importjavax.jws.WebService;importjavax.xml.ws.Endpoint;/** *  @WebService - 它是一个注解,用在类上指定将此类发布成一个ws.    Endpoint – 此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。  * @author xuemin * */@WebServicepublic classHelloWebService { publicString HelloWord(String name){return"Hello: "+name;} /** *添加exclude=true后,HelloWord2()方法不会被发布 * @param name * @return */@WebMethod(exclude=true)publicString HelloWord2(String name){return"Hello: "+name;}publicstatic void main(String[] args) {/** *参数1:服务的发布地址 *参数2:服务的实现者 */Endpoint.publish("http://192.168.24.138:456/helloWord",new HelloWebService()); } }</span>

注:

@WebService 它是一个注解,用在类上指定将此类发布成一个ws.

    Endpoint –此类为端点服务类,它的方法publish用于将一个已经添加了@WebService注解对象绑定到一个地址的端口上。

 

运行以上程序进行发布。

 

(2)查看wsdl

地址:http://192.168.24.138:456/helloWord?wsdl

只要在客户端浏览器能看到此WSDL文档,说明服务发布成功


以上服务发布成功;

总结:

如何发布一个Web服务:

a,在类上添加@WebService注解

(注:此注解是jdk1.6提供的,位于javax.jws.WebService包中)

b,通过EndPoint(端点服务)发布一个WebService

(注:EndPointjdk提供的一个专门用于发布服务的类,该类的publish方法接收两个参数,一个是本地的服务地址,二是提供服务的类。位于 javax.xml.ws.Endpoint包中)

c,注:

类上添加注解@WebService,类中所有非静态方法都会被发布;

静态方法和final方法不能被发布;

方法上加@WebMentod(exclude=true)后,此方法不被发布;

(3)客户端访问发布的服务

根据WSDL文档来在客户端编写代码,访问发布的服务;

但是,WSDL文档看不懂怎么办?代码该如何编写?

——你看不懂,JDK看得懂,wsimportJDK自带的,可以根据WSDL文档生成客户端调用代码的工具。无论服务器端WebService使用什么语言编写的,豆浆在客户端生成Java代码。所以服务器用什么语言编写的并不重要。

wsimport.exe命令参数熟知:

    -d:生成class文件。默认参数。

    -s:生成Java文件

   -p:自定义包结构

 

解析地址生成源码到E盘:


 

执行以上命令后,即可在E盘下生成如下包及类


 

注:还可以自定义包结构:

自定义包结构的命令:


 


 

将生成的包及.java文件复制到客户端:如下图


 

创建访问服务的类:MyClient.java:


 

MyClient.java:

<span style="font-family:KaiTi_GB2312;font-size:18px;">package cn.tgb.ws; public classMyClient {   publicstatic void main(String[] args) {     HelloWebServiceServicehwss = new HelloWebServiceService();      HelloWebServicehws = hwss.getHelloWebServicePort();      Stringresult=hws.helloWord("hanxuemin");     System.out.println(result);  } }</span>

 

(4)运行结果:


最后写上自己的实践总结:
1.EndPoint.publish时使用http://192.168.0.106:8088/sayHe绑定到 SayHelloService。默认设置下,同一ip下的同一端口不能布置两个WebService
2.在使用CMD执行wsimport时遇到了两个问题,A.wsimport命令未被识别,检查发现以为jdk1.8会自动配置环境变量,而wsimport是放在jdk1.8的bin目录下,配上环境变量即可。B.proxy连接被拒绝。(这是我在公司的电脑上试的,因为保密原因要访问外网的部分网站必须使用代理),关闭代理之后即可。这个解决方案的提出者也提醒,EndPoint.publish时,需指定本机的ip地址而避免使用localhost
3.在第二次准备自己写一个简单的WebService时,在改Service中添加了两个返回值相同的方法,在调用client测试的时候发现报错XMLben重复,参考了这个文档,加上自己的验证确实是返回值类型重复加上没有取别名造成的。解决方案有多种。http://blog.csdn.net/u012116457/article/details/51983718

给自己加油!keep learning

0 0