1.利用JDK中JAX-WS规范发布WebService服务(jdk1.6.0_21以后版本)
步骤:
a.新建web项目(Dynamic Web project)
b.新建一个用于发布的服务类Hello.java代码如下,项目结构如下:
代码Hello.java:
package com.sherlon.ws;
import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
/**
* @WebService :将指定的类发布为webservice
* *Endpoint :此类为端点服务类,它的方法publish用于将一个
*已经添加了@WebService注解的对象绑定到一个地址的端口上。
*/
@WebService
public class Hello{
public String sayHi(String name){
return "this messge comes from webservice:"+name;
}
@WebMethod(exclude=true)//当为true时,发布该类时不发布该方法
public String sayHi2(String name){
return "this messge comes from webservice:"+name;
}
public static void main(String[] args) {
/**
*
* Endpoint.publish(param1 param2)
* param1:服务的发布地址 (注意端口不能被其他服务占用)
* param2:服务的实现者(要发布的类)
*
*/
Endpoint.publish("http://localhost:8089/HelloService/services", new Hello());
System.out.println("服务发布成功");
}
}
c.发布完成后测试,浏览器输入发布地址+?wsdl
http://localhost:8089/HelloService/services?wsdl
看到如下WSDL文档则证明发布成功,如下图:
2.利用eclipse自带的插件axis框架创建webservice
步骤:
a.新建web项目(Dynamic Web project)
b.新建一个用于发布的服务类HiService.java代码如下:
package com.sherlon.ws;
public class HiService {
public String sayHi(String name){
return "hi:"+name;
}
}
该类很简单,只是做一个简单的实例,没有用接口。
c.新建一个webservice,如下图,在需要发布的类上右键选择Web Services-->Create Web Service,
出现如下图所示界面,Service implementation:找到要发布的类的路径,注意Configuration下的配置。
点击next-->选择要发布的Methods-->Finish。
发布完成后可以看到项目中lib包下多了几个jar包,
axis.jar
commons-discovery-0.2.jar
commons-logging.jar
jaxrpc.jar
saaj.jar
wsdl4j.jar
还有server-config.wsdd文件,里面包含了要发布的信息,web.xml自动配置了servlet。
还有wsdl包下自动生成了HiService.wsdl文件。如下图所示:
d.发布完成后测试,http://localhost:8089/HelloService2/services
url根据自己项目而定,即http://ip:port/serviceName/services
看到如下WSDL文档则证明发布成功:
3.利用XFire框架发布webservice
步骤:
a.新建web项目(Dynamic Web project)
b.新建要发布的接口及其实现类,IHello.java和HelloImpl.java内容和上面方法2介绍的一样,写一个接口,然后写一个实现类实现该接口就ok了,就不贴图了。项目结构如下图:
c.在WEB-INF下新建META-INFO包(包名不可变),META-INFO下新建xfire包(包名不可变),
xfire下新建services.xml(文件名不可变),内容如下:
HelloXfire
http://localhost:8080/HelloXfire
com.xfire.services.IHello
com.xfire.services.HelloImpl
d.配置web.xml,内容如下:
XFire
Xfires
org.codehaus.xfire.transport.http.XFireConfigurableServlet
0
Xfires
/servlet/XFireServlet/*
Xfires
/services/*
Xfires
*.do
e.导入xfire所有关联的包
下载xfire压缩包,本人为xfire-distribution-1.2.6(附下载链接),解压后目录如下图:
将xfire-all-1.2.6.jar包和lib包下所有文件拷到项目中lib包下,项目搭建完毕,将项目部署到tomcat后启动。
f.测试http://localhost:8080/XFire/services,出现如下图:则发布成功!
可以看出,显示为Generated by XFire,由XFire生成wsdl文档。
4.利用Spring集成XFire框架发布webservice
步骤:
a.新建一个maven工程,选择war(本例通过maven来管理项目)如下图:
finish后发现项目报错,是因为缺少web.xml,右键项目下Deployment Descriptor:spring-xfire,选择Generate Deployment Descriptor Stub,如下图,错误解决,WEB-INFO下会出现web.xml配置文件。
b.导包:
spring-webmvc:3.2.8.RELEASE
xfire-distribution:1.2.6:zip
双击项目下pom.xml,选择底部Dependencies窗口,出现如下图所示界面,
点击add按钮,如下:
在黄标位置输入项目需要的jar包,如果搜不到可以去maven中央仓库(或者阿里云仓库maven.ayiyun.com)搜索对应的包,将坐标粘贴到pom.xml里面保存即可。(连网情况下)
c.完成后,写好服务类和对应的接口,项目结构如下图:
d.配置web.xml,如下:
spring-xfire
contextConfigLocation
/WEB-INF/xfire-servlet.xml
org.springframework.web.context.ContextLoaderListener
XFire
org.codehaus.xfire.spring.XFireSpringServlet
XFire
/services/*
注意:配置contextConfigLocation,配置后spring容器会自动去执行/WEB-INF下的xfire-servlet.xml文件。
e.配置xfire-servlet.xml.
在WEB-INF下新建xfire-servlet.xml此路径是根据contextConfigLocation配置的,配置如下:
注意:需要使用XFire导出器XFireExporter,这里配置一个baseWebService bean,其他服务bean继承此baseWebService即可,不需要重复多次写serviceFactory和xfire。
f.到此项目搭建完毕,将项目部署到服务器上(此处用tomcat)启动tomcat,浏览器输入地址:http://localhost:8080/spring-xfire/services测试,看如下界面则证明发布成功:
以上为webservice发布几种方法,下面介绍webservice搭建客户端的方法。(看到这可能已经有点累了,建议先放松下QAQ)
1.JDK自带的JAX-WS规范创建客户端
步骤:
a.新建一个web工程(Dynamic Web project)作为webservice客户端
b.选中客户端,新建一个Web Service Client,如下图步骤-->next,:
↓:
将wsdl路径复制到Service definition中,如下图:
检查一下configuration有没有问题,-->next,选择输出路径为该项目src下,如下图:
finish完成,刷新项目会发现src下多了如下图的包结构及代码,这些代码就是服务端发布的代码信息。
c.在com.sherlon.xfire包下新建测试类TestClient.java,代码如下:
package com.sherlon.xfire;
public class ClientTest {
public static void main(String[] args) {
try {
HelloWorldServicePortType hello =
new HelloWorldServiceLocator().getHelloWorldServiceHttpPort();
String result = hello.sayHello("myself");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行该java类,会发现控制台输出helloword:myself(如图:此处helloworld是在服务端方法中定义),调用成功!
注:用JAX-WS生成客户端也可用dos命令自动生成。
命令如下:wsimport -s D:\\workspace\\jax-ws-client\\src -p com.sherlon.xfire
-keep http://localhost:8080/spring-xfire/services/HelloWorldService?wsdl
解释命令:
-s:项目src所在路径
-p:生成代码所在包(src下)
-keep:服务端发布的wsdl文件url
回车,会看到如图所示信息则成功,刷新项目会发现src下多了以下包和类
将测试类中HelloWorldServiceLocator()改为HelloWorldService()即可。
2.XFire客户端:
步骤:
a.新建XFire客户端(Dynamic Web project)
b.导包:导入xfire相关联所有jar包,本例用xfire-distribution-1.2.6.zip,
下载并解压改压缩包,将解压后lib下所有文件和xfire-all-1.2.6.jar一起粘贴到项目lib包下,也可以通过maven来管理,比较方便。
c.新建客户端接口,接口名字任意,但是方法需要和服务端完全一致,IHelloWorld.java接口代码如下:
package com.sherlon.xfire;
public interface IHelloWorld {
public String sayHello(String name);
}
d.新建测试类XFrieTest.java,代码如下:
package com.sherlon.xfire;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.binding.ObjectServiceFactory;
public class XFrieTest {
public static void main(String[] args) {
try {
// webservice类的发布路径。HelloWorldService为发布接口或实现类wsdl文件
//
String url = "http://localhost:8080/spring-xfire/services/HelloWorldService";
//创建一个xfire的service
Service service = new ObjectServiceFactory().create(IHelloWorld.class);
//xfire代理工厂实例
XFireProxyFactory factory = new XFireProxyFactory();
//实例化发布的服务类
IHelloWorld hello = (IHelloWorld) factory.create(service, url);
//调用发布的方法
String result = hello.sayHello("sherlon");
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行测试类,控制台输出helloworld:sherlon,测试通过!
3.Axis客户端:
步骤:
a.新建XFire客户端(Dynamic Web project)
b.导包:
axis.jar
commons-discover-0.2.jar
commons-logging.jar
jaxrpc.jar
saaj.jar
wsdl4j.jar
c.新建客户端接口,接口名字任意,但是方法需要和服务端完全一致,IHelloWorld.java接口代码如下:
package com.sherlon.xfire;
public interface IHelloWorld {
public String sayHello(String name);
}
d.新建测试类AxisTest.java:
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;
public class AxisTest {
public static void main(String[] args) {
try {
//webservice类的发布路径。HelloWorldService为发布的接口或者实 现类
String endpoint = "http://localhost:8080/spring-xfire/services/HelloWorldService";
//实例化axis的一个service
Service service = new Service();
//创建call
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(endpoint);
//设置发布的方法名
call.setOperationName("sayHello");
//设置参数的个数,有几个就写几句
all.addParameter("parameter1", org.apache.axis.encoding.XMLType.XSD_DATE, javax.xml.rpc.ParameterMode.IN);
//call.addParameter("parameter2",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;
//设置返回值类型
call.setReturnType(XMLType.XSD_STRING);
//设置是否使用SOAP
call.setUseSOAPAction(true);
//invoke方法里传入object对象,参数放在object里面
String result = (String) call.invoke(new Object[]{"wxl"});
System.out.println(result);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行测试类,控制台输出helloword:wxl,证明测试通过!
DONE!
PS:以上是个人对webservice服务端及客户端创建的一些总结,纯手打,本人也是新手,如有错误请大家及时指正!