webservice的学习

webservice是什么?

为什么要用webservice

什么时候用webservice

webservice的几个重要的术语

对应一种类型的文件.wsdl

定义了webservice的服务器端与客户端应用交互传递请求和响应数据的格式和方式

一个webservice对应一个唯一的wsdl文档

一种简单的、基于http和xml的协议,用于在web上交换结构化的数据

soap消息:请求消息和响应消息

http+xml片段

webservice服务器端用来处理请求的接口

一个apache的用于开发webservice服务器端和客户端的框架

用jdk开发webservice

webservice编码:@WebService(SEI的实现类);@WebMethod(SEI中的所有方法)

发布webservice

Endpoint(终端发布webservice)

示例代码

**
 * SEI接口
 */
@WebService
public interface WebSEI {

    @WebMethod
    public String sayHello(String name);
}


/**
 * SEI的实现类
 */
@WebService
public class WebSEIImpl implements WebSEI {
    @Override
    public String sayHello(String name) {
        System.out.println("server say hello " + name);
        return "Hello " + name;
    }
}

/**
 * 发布webservice
 */
public class WebEndpoint {
    public static void main(String[] args) {
        /**
         * 参数说明:1.发布地址,2.接口实例
         * 发布地址中IP是主机地址,其余可以自定义
         */
        Endpoint.publish("http://192.168.0.103:8087/myservie/hello", new WebSEIImpl());
        System.out.println("发布成功!");
    }
}

上面的main方法启动之后,可以在浏览器输入http://192.168.0.103:8087/myservie/hello?wsdl进行访问和查看wsdl文档。

文件格式大概如下:


	
		
			
  
    
  
    
      
      
	
		
			
			
	

    
        
    

上面这段是定义webservice的wsdl文档中引入的约束,其中schemaLocation="http://192.168.0.103:8087/myservie/hello?xsd=1"/>是约束内容的地址,可以用浏览器进行访问查看,当然这需要一定schema约束相关的知识,可以事先了解下。


    



    

上面的是定义webservice所有的消息结构;

标签通过element属性指定标签里schema中的约束中的片段。


    
        
        
    

上面的标签是用来定义服务器端的SEI;

标签用来指定一个webservice中的处理请求的方法;

指定客户端应用传过来的数据,会引用上面定义的;

指定服务器端返回给客户端的数据,会引用上面定义的;


    
    
    
        
            
        
        
            
        
    

用于定义SEI的实现类,type属性引用上面的;

用来定义方法与上面中的差不多,这里name属性是服务接口的方法名;

表示传输数据格式是文档(xml);

表示数据是文本数据;


    
        
    

是代表一个webservice容器,name属性指定webservice客户端的容器类

代表一个服务器端SEI的一个实现,bingding属性引用上面的标签,name属性是指定webservice客户端真正的所需要的服务类;

代表当前webservice的请求地址

查看对应的wsdl文档(一般浏览器 ....?wsdl)

请求webservice并查看请求和响应消息(一般浏览器)

创建客户端应用编码方式访问

借助jdk的wsimort.exe工具生成客户端代码:进入项目src目录下,打开cmd窗口,输入wsimport -keep url(url是wsdl文件的路径或者是wsdl文档)

生成的代码类如下:

webservice的学习

借助生成的代码编写请求代码

public class ClientTest {
    public static void main(String[] args) {
        WebSEIImplService factory = new WebSEIImplService();
        WebSEIImpl webSEI = factory.getWebSEIImplPort();
        System.out.println(webSEI.sayHello("jack"));
    }
}

用cxf开发webservice

jdk不支持map与复杂的object类型,cxf支持所有类型

cxf提供很多拦截器,后期业务拓展性高


    org.apache.cxf
    cxf-core
    3.4.4


    org.apache.cxf
    cxf-rt-frontend-jaxws
    3.4.4


    org.apache.cxf
    cxf-rt-transports-http-jetty
    3.4.4

  JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
//暴露地址
factoryBean.setAddress("http://192.168.0.103:8087/myservie/hello");
//SEI接口
factoryBean.setServiceClass(WebSEI2.class);
//SEI实现类
factoryBean.setServiceBean(new WebSEI2Impl());
factoryBean.create();
System.out.println("发布成功!");

首先可以在https://cxf.apache.org/download.html下载cxf压缩包,并且配置环境变量;

然后进入项目src目录下,打开cmd窗口,输入wsdl2java url(url是wsdl文件的路径或者是wsdl文档)生成客户端所需要的代码

或者maven的pom文件添加


    org.apache.cxf
    cxf-codegen-plugin
    3.5.0
    
        
            generate-sources
            generate-sources
            
                generated/cxf
                
                    
                        http://192.168.0.103:8087/myservie/hello?wsdl
                    
                
            
            
                wsdl2java
            
        
    

然后运行

mvn clean generate-sources

这将生成 wsdl 对应的客户端代码,代码会存放于 /generated/cxf 目录.

又或者直接写客户端代码:

{
    JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance();

    Client client = clientFactory.createClient("http://192.168.0.103:8087/myservie/hello?wsdl");

    Object[] result = client.invoke("sayHappy", "KEVIN");

    System.out.println(result[0]);


}

所需依赖:


    org.apache.cxf
    cxf-core
    3.4.4


    org.apache.cxf
    cxf-rt-frontend-jaxws
    3.4.4


    org.apache.cxf
    cxf-rt-transports-http-jetty
    3.4.4
展开阅读全文

页面更新:2024-03-14

标签:服务器端   客户端   属性   接口   定义   消息   代码   地址   文档   数据

1 2 3 4 5

上滑加载更多 ↓
推荐阅读:
友情链接:
更多:

本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

© CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
闽公网安备35020302034844号

Top