WebService服务端和客户端的几种常见创建方式

一、WebService发布方式:

1.利用JDK中JAX-WS规范发布WebService服务(jdk1.6.0_21以后版本)

步骤:

a.新建web项目(Dynamic Web project)

b.新建一个用于发布的服务类Hello.java代码如下,项目结构如下:

WebService服务端和客户端的几种常见创建方式_第1张图片

代码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文档则证明发布成功,如下图:

WebService服务端和客户端的几种常见创建方式_第2张图片

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,

WebService服务端和客户端的几种常见创建方式_第3张图片

 

出现如下图所示界面,Service implementation:找到要发布的类的路径,注意Configuration下的配置。

WebService服务端和客户端的几种常见创建方式_第4张图片

点击next-->选择要发布的Methods-->Finish。

WebService服务端和客户端的几种常见创建方式_第5张图片

发布完成后可以看到项目中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文件。如下图所示:

WebService服务端和客户端的几种常见创建方式_第6张图片

 

d.发布完成后测试,http://localhost:8089/HelloService2/services

url根据自己项目而定,即http://ip:port/serviceName/services

看到如下WSDL文档则证明发布成功:

WebService服务端和客户端的几种常见创建方式_第7张图片

 3.利用XFire框架发布webservice

步骤:

a.新建web项目(Dynamic Web project)

b.新建要发布的接口及其实现类,IHello.javaHelloImpl.java内容和上面方法2介绍的一样,写一个接口,然后写一个实现类实现该接口就ok了,就不贴图了。项目结构如下图:

WebService服务端和客户端的几种常见创建方式_第8张图片

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(附下载链接),解压后目录如下图:

WebService服务端和客户端的几种常见创建方式_第9张图片

xfire-all-1.2.6.jar包和lib包下所有文件拷到项目中lib包下,项目搭建完毕,将项目部署到tomcat后启动。

f.测试http://localhost:8080/XFire/services,出现如下图:则发布成功!

WebService服务端和客户端的几种常见创建方式_第10张图片

可以看出,显示为Generated by XFire,由XFire生成wsdl文档。

4.利用Spring集成XFire框架发布webservice

步骤:

a.新建一个maven工程,选择war(本例通过maven来管理项目)如下图:

WebService服务端和客户端的几种常见创建方式_第11张图片

finish后发现项目报错,是因为缺少web.xml,右键项目下Deployment Descriptor:spring-xfire,选择Generate Deployment Descriptor Stub,如下图,错误解决,WEB-INFO下会出现web.xml配置文件。

WebService服务端和客户端的几种常见创建方式_第12张图片

b.导包:

spring-webmvc:3.2.8.RELEASE

xfire-distribution:1.2.6:zip

双击项目下pom.xml,选择底部Dependencies窗口,出现如下图所示界面,

 WebService服务端和客户端的几种常见创建方式_第13张图片

点击add按钮,如下:

WebService服务端和客户端的几种常见创建方式_第14张图片

在黄标位置输入项目需要的jar包,如果搜不到可以去maven中央仓库(或者阿里云仓库maven.ayiyun.com)搜索对应的包,将坐标粘贴到pom.xml里面保存即可。(连网情况下)

c.完成后,写好服务类和对应的接口,项目结构如下图:

WebService服务端和客户端的几种常见创建方式_第15张图片

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即可,不需要重复多次写serviceFactoryxfire。

f.到此项目搭建完毕,将项目部署到服务器上(此处用tomcat)启动tomcat,浏览器输入地址:http://localhost:8080/spring-xfire/services测试,看如下界面则证明发布成功:

WebService服务端和客户端的几种常见创建方式_第16张图片

以上为webservice发布几种方法,下面介绍webservice搭建客户端的方法。(看到这可能已经有点累了,建议先放松下QAQ

 

二、webservice客户端创建方式

1.JDK自带的JAX-WS规范创建客户端

步骤:

a.新建一个web工程(Dynamic Web project)作为webservice客户端

b.选中客户端,新建一个Web Service Client,如下图步骤-->next,:

WebService服务端和客户端的几种常见创建方式_第17张图片

↓:

WebService服务端和客户端的几种常见创建方式_第18张图片

将wsdl路径复制到Service definition中,如下图:

WebService服务端和客户端的几种常见创建方式_第19张图片

检查一下configuration有没有问题,-->next,选择输出路径为该项目src下,如下图:

WebService服务端和客户端的几种常见创建方式_第20张图片

finish完成,刷新项目会发现src下多了如下图的包结构及代码,这些代码就是服务端发布的代码信息。

WebService服务端和客户端的几种常见创建方式_第21张图片

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是在服务端方法中定义),调用成功!

WebService服务端和客户端的几种常见创建方式_第22张图片

注:用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服务端及客户端创建的一些总结,纯手打,本人也是新手,如有错误请大家及时指正!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(java)