基于jdk wsimport工具訪问外部webservice
一、Wsimport简单介绍
Wsimport是jdk自带的。能够依据wsdl文档生成客户点调用代码的工具。
不管server端的webservice是用什么语言写的,都将在client生成java代码。
server端用什么语言写的并不重要。
Wsimport位于JAVA_HOME/bin文件夹下。Wsimport经常使用的參数有:
-d<文件夹> --将生成.class文件。
默认參数
-s<文件夹> --将生成.java文件。
-p<生成的新包名> --将生成类放于指定的包下
(Wsdlurl) –http://server.port/service?wsdl,webservice的wsdl地址,必须的參数
二、新建javaproject,并公布webservice
新建java project,命名为HelloCXF。导入CXF相关的jar包。
在src文件夹中新建com.hellocxf.service包,并新建People类,People类代码为:
package com.hellocxf.service; import javax.jws.WebMethod; import javax.jws.WebService; @WebService public interface People { publicString sayHello(String name); //@WebMethod(exclude=true) publicString makeFriend(String name); }
在src文件夹中新建com.hellocxf.serviceImpl包,并新建Student类,Student代码为:
package com.hellocxf.serviceImpl; import javax.jws.WebMethod; import javax.jws.WebService; import com.hellocxf.service.People; @WebService public class Student implements People { @Override publicString sayHello(String name) { //TODO Auto-generated method stub System.out.println("Hello:"+name); returnname; } @WebMethod(exclude=true) @Override publicString makeFriend(String name) { //TODO Auto-generated method stub System.out.println("makefriend with "+name+" student"); returnname; } }
在src文件夹新建com.hellocxf.servicePublice包。并创建ServicePublish类,用于公布webservice.ServicePublish代码为:
package com.hellocxf.servicePublish; import javax.xml.ws.Endpoint; import com.hellocxf.service.People; import com.hellocxf.serviceImpl.Student; public class ServicePublish { publicstatic void main(String[] args) { //TODO Auto-generated method stub PeoplemService = new Student(); Stringaddress = "http://localhost:8080/People"; Endpoint.publish(address,mService); } }
执行ServicePublish类。公布webservice服务。
三、利用wsimport工具生成client调用服务代码
在D盘新建目录generatedCode
打开cmd命令,切换到该文件夹下
执行wsimport –s . http://localhost:8080/People?
wsdl,在generatedCode目录下生成訪问服务的代码。
把生成的代码中.class文件删除,仅仅保留.java的java类文件。
四、新建clientproject,调用webservice服务
在eclipse中新建javaproject,命名为CXFClient
将第三部生成的.java类文件总体拷贝到src文件夹下,复制完毕之后其文件夹结构例如以下图所看到的:
在src文件夹下新建com.webservice.use包,在包中新建类ServiceUse.用于完毕对webservice的调用,代码为:
package com.webservice.use; import com.hellocxf.serviceimpl.People; importcom.hellocxf.serviceimpl.StudentService; public class ServiceUse { publicstatic void main(String[] args) { //TODO Auto-generated method stub //<wsdl:servicename="StudentService"> StudentServicestudentService = new StudentService(); //<wsdl:portbinding="tns:StudentServiceSoapBinding"name="StudentPort"> //<wsdl:bindingname="StudentServiceSoapBinding" type="ns1:People"> Peoplepeople = studentService.getStudentPort(); StringserviceResult = people.sayHello("yinyuchun"); System.out.println(serviceResult); } }
类ServiceUse代码中创建的service类型和调用的port、方法都是从wsdl获取的。