`
2277259257
  • 浏览: 515061 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

WebService---总结

 
阅读更多

WebSerive免费视频教程http://edu.51cto.com/course/course_id-1373.html

                                 http://www.icoolxue.com/album/show/225

WebService文档WSDL结构(发布WebService服务后wsdl文档自动生成)



 



 



  

 

 

JDK和CXF的区别:

JDK有些局限,CXF是对JDK原生WebService的包装和扩展

JDK不支持Map数据结构,CXF支持

 

一、WebService基于JDK(1.6以上)运行的开发

1、WebService-Server端:

     1)创建java工程

     2)编写接口和实现类的业务代码(接口和接口实现类用JDK的注解@WebService标注,接口方法用@WebMethod)

     3)发布WebService-Server:Endpoint(终端,发布WebService)

          在main方法中:

          String address="http://192.168.10.16:8989/day_ws/hellows";

          Endpoint.publish(address,new 实现类)

          运行main方法(启动)

2、WebService-Client端(远程调用wsdl文件生成):

      1)创建java工程

      2)终端进入准备存放代码的目录

      3)用JDK包工具wsimport远程调用WebService服务端wsdl文件生成客户端代码

         "wsimport -keep http://192.168.10.16:8989/day_ws/hellows?wsdl"

          在main方法中:

           创建起始类实例(起始类在wsdl文件中“<wsdl:service name="ChinaStockWebService">”),调用对应的方法

3、WebService-Client端(通过本地wsdl文件生成):

      1)创建java工程

      2)终端进入准备存放代码的目录

      3)浏览器中“http://192.168.10.16:8989/day_ws/hellows?wsdl”保存为本地文件

      4)用JDK包工具wsimport调用本地保存的wsdl文件生成客户端代码

         "wsimport -keep E:\...."

          在main方法中:

           创建起始类实例(起始类在wsdl文件中“<wsdl:service name="ChinaStockWebService">”),调用对应的方法

 

二、WebService基于CXF框架开发

1、WebService-CXF-Server端:

     1)创建java工程

     2)在基于JDK运行的java工程上导入CXF框架(集成了各种架包,Jetty)即导入CXF的架包

     3)编写接口和实现类的业务代码(接口和接口实现类用JDK的注解@WebService标注,接口方法用@WebMethod)

     4)发布WebService-Server:Endpoint(终端,发布WebService)

          在main方法中:

          String address="http://192.168.10.16:8989/day_ws/hellows";

          Endpoint.publish(address,new 实现类)

          运行main方法(启动)

       注意:该方法和基于JDK的几乎没什么区别但导入架包后项目运行在了jetty(和tomcat类似是个servlet/jsp容器)中

2、WebService-CXF-Client端

     1)将cxf框架bin/wsdl2java.bat工具放入操作系统path路径中

     2)创建java工程

     3)终端进入准备存放代码的目录

     4)执行wsdl2java命令生成代码

          “wsdl2java xxx?wsdl”(可以是本地或网络上的wsdl文件)

     5)新建main方法类,根据wsdl文档查看WebService的起始类<wsdl:service name="ChinaStockWebService">,在main方法中创建调用服务端的起始类实例

 



 

AbstractPhaseInterceptor(自定义拦截器从此继承)

LoggingInInterceptor(系统日志入拦截器类)

LoggingOutInterceptor(系统日志出拦截器类)

 

 三、CXF基于编码形式引入拦截器发布、访问(WebService服务端,WebService客户端

/*
 * 自定义拦截器--客户端
 */
public class UserDefinedInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
    private String name;
    private String password;

    public UserDefinedInterceptor(String name, String password) {
        super(Phase.PRE_PROTOCOL);//准备协议化时拦截
        this.name = name;
        this.password = password;
    }

    /*
     * <Envelope>
     *      <head>
     *          <atguigu>
     *              <name>xfzhang</name>
     *              <password>123456</password>
     *          </atguigu>
     *      </head>
     *      <Body>
     *          <sayHello>
     *              <arg0>BOB</arg0>
     *          </sayHello>
     *      </Body>
     * </Envelope>
     */
    public void handleMessage(SoapMessage msg) throws Fault  {

        List<Header> header msg.getHeaders();
        /*
         * <atguigu>
         *      <name>xfzhang</name>
         *      <password>123456</password>
         * </atguigu>
         */
        
        Document document =DOMHelper.createDocument();
        Element rootEle=document.createElement("atguigu");
        Element nameEle=document.createElement("name");
        nameEle.setTextContent(name);
        rootEle.appendChild(nameEle);
        Element passwordEle=document.createElement("password");
        passwordEle.setTextContent(password);
        rootEle.appendChild(passwordEle);
        
        headers.add(new Header(new QName("atguigu"),rootEle));
        
        System.out.println("client handleMessage()...");
    }
}
 
/*
 * 自定义拦截器--服务器端
 */
public class CheckUserDefinedInterceptor extends AbstractPhaseInterceptor<SoapMessage> {
    public CheckUserDefinedInterceptor() {
        super(Phase.PRE_PROTOCOL);//准备协议化时拦截
    }

    /*
     * <Envelope>
     *      <head>
     *          <atguigu>
     *              <name>xfzhang</name>
     *              <password>123456</password>
     *          </atguigu>
     *      </head>
     *      <Body>
     *          <sayHello>
     *              <arg0>BOB</arg0>
     *          </sayHello>
     *      </Body>
     * </Envelope>
     */
    public void handleMessage(SoapMessage msg) throws Fault  {
        Header header=msg.getHeader(new QName("atguigu"));
        if(header!=null){
            Element atguiguEle=(Element)header.getObject();
            String name=atguiguEle.getElementsByTagName("name").item(0).getTextContent();
            String password=atguiguEle.getElementsByTagName("password").item(0).getTextContent();
            if("xfzhang".equals(name)&&"123456".equals(password)){
                System.out.println("server 通过拦截器...");
                return ;
            }
        }
        System.out.println("server 没有通过拦截器...");
        throw new Fault(new RuntimeException("请求需要一个正确的用户名和密码"));
    }
}
 

 

/*
 * 服务器端
 */
public static void main(String[] args) {
        String address = "http://192.168.10.165:8888/day01_ws_server/datatypews";
        Endpoint endpoint = Endpoint.publish(address, new HelloWSImpl());

        EndpointImpl endpointImpl = (EndpointImpl) endpoint;
        
        //服务器端日志入拦截器
        List<Interceptor<? extends Message>> inInterceptors=endpointImpl.getInInterceptors();
        inInterceptors.add(new LoggingInInterceptor());
        //接收客户端数据(根据数据格式通过拦截器解析数据)
        inInterceptors.add(new CheckUserDefinedInterceptor());
        
        //服务器端日志出拦截器
        List<Interceptor<? extends Message>> outInterceptors=endpointImpl.getOutInterceptors();
        outInterceptors.add(new LoggingOutInterceptor());
        
        System.out.println("发布WebService成功");
    }

 

    /**
     * 客户端
     */
    public static void main(String[] args) {
        HelloWSImplService factory=new HelloWSImplService();
        HelloWS hellWS=factory.getHelloWSImplPort();
        
        //发送请求的客户端对象
        Client client ClientProxy.getClient(hellWS);
        
        //客户端日志出拦截器
        List<Interceptor<? extends Message>> outInterceptors=client.getOutInterceptors();
        outInterceptors.add(new LoggingOutInterceptor());
        //向服务器端发送数据(根据数据格式通过拦截器封装数据)
        outInterceptors.add(new UserDefinedInterceptor("xfzhang","123456"));
        
        //客户端日志入拦截器
        List<Interceptor<? extends Message>> inInterceptors=client.getInInterceptors();
        inInterceptors.add(new LoggingInInterceptor());
        
        Strign result=hellWS.sayHello("BOB");
        System.out.println("client"+result);
    }

 

四、CXF基于Spring配置形式引入拦截器发布、访问(WebService服务端,WebService客户端

 

 

 

五、CXF基于Spring注解形式引入拦截器发布、访问(WebService服务端,WebService客户端

 

六、Ajax、JQuery访问(WebService服务端,浏览器客户端

1、服务端不变

2、客户端是以浏览器形式访问

   1)请求数据以Webservice的wsdl定义的格式组装

   2)Ajax、JQuery正常方式访问

注意:JS访问有跨域问题,java编码客户端不存在,所以可以利用这一特性,将“JS访问-->WebService服务”变通为“JS访问-->后端应用(HttpUrlConnection)-->WebService服务

 

七、HttpClient访问(WebService服务端,HttpUrlConnection客户端

 

public class HttpURLConnectionServlet extends HttpServlet {
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException,
                                                                            IOException {
        String name = req.getParameter("name");
        System.out.println("doPost" + name);

        String data = "<soap:Envelope xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'><soap:Body><ns2:sayHello xmlns:ns2='http://ws.day01_ws.atguigu.com/'><arg0>'+name+'</arg0></ns2:sayHello></soap:Body></soap:Envelope";
        URL url = new URL("http://192.168.10.165:8888/day01_ws/datatypews");

        HttpURLConnection connection = (HttpURLConnection) url.openConnection();

        connection.setRequestMethod("POST");
        connection.setDoOutput(true);
        connection.setDoInput(true);
        connection.setRequestProperty("Content-Type", "text/xml;charset=utf-8");

        OutputStream os = connection.getOutputStream();
        os.write(data.getBytes("utf-8"));

        int respCode = connection.getResponseCode();
        if (respCode == 200) {
            InputStream is = connection.getInputStream();
            System.out.println("return" + is.available());

            resp.setContentType("text/xml;charset=utf-8");
            ServletOutputStream outputStream = resp.getOutputStream();

            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = is.read(buffer)) > 0) {
                outputStream.write(buffer, 0, len);
            }
            outputStream.flush();
        }

    }
}

 

CXF WebService 开发文档-目录索引http://www.cnblogs.com/hoojo/archive/2011/03/30/1999587.html

java 实现WebService 以及不同的调用方式http://www.cnblogs.com/siqi/archive/2013/12/15/3475222.html 

 

 

 

 

 

 

 

 

 

 

 

 

  • 大小: 86.3 KB
  • 大小: 136 KB
  • 大小: 63.3 KB
  • 大小: 62.9 KB
  • 大小: 101.7 KB
  • 大小: 20.4 KB
  • 大小: 84.8 KB
分享到:
评论

相关推荐

    webservice--javademo

    总结,"webservice--javademo"项目是一个利用JAX-WS技术在MyEclipse环境中创建和测试的Web服务示例。通过学习这个项目,你可以掌握如何在Java环境中构建、部署和测试Web服务,为跨平台的数据交换提供坚实的基础。

    [JAVA]-Axis-Webservice-Demo

    总结: Java Axis Web服务示例(`[JAVA]-Axis-Webservice-Demo`)提供了发布和调用Web服务的实际操作步骤。通过学习和实践这个示例,开发者可以更好地掌握使用Axis创建Web服务的技术,理解Web服务的基本原理,以及...

    webservice -Restful的Demo

    **总结** 通过这个"webservice - Restful的Demo",我们可以学习到RESTful如何使WebService变得更加简单、直观且高效。了解并掌握RESTful设计原则,能帮助我们构建更加优雅、易于维护的API,提升系统的可扩展性和互...

    WebService -AXIS工程

    总结,【WebService - AXIS工程】是Java世界中构建和使用Web服务的重要工具,它通过源码生成和服务部署简化了Web服务的开发,同时通过客户端代理类方便了服务的调用。了解并熟练掌握AXIS,对于开发分布式系统和实现...

    wsdl.rar_WEBservice-Sqlserver_java webservice_webservice sgip_w

    总结来说,这个压缩包包含了一个完整的Web Service开发示例,使用Java和WSDL,涉及到SQL Server数据库的交互以及可能的短信服务功能。开发者可以从中学习到如何创建、部署和使用Web Service,以及如何处理和存储图像...

    webservice-axis1

    在标题“webservice-axis1”中,我们关注的是与Axis1相关的Web服务开发。在描述中提到的"需要的jar包",这是构建和运行基于Axis1的Web服务所必需的库文件。以下是压缩包中包含的三个关键jar文件: 1. **axis.jar**...

    axis2-WebService-开发指南.docx

    以下是对 Axis2 WebService 开发指南的知识点总结: 1. 环境准备: Axis2 的开发需要下载相关的 jar 包和 Eclipse 插件工具,可以从 Apache Axis 官方网站下载。同时,需要安装 Eclipse 插件,以便使用 Axis2 的...

    【webservice----xfire 快速入门代码实训】----<下载不扣分,回帖加1分,欢迎下载,童叟无欺>

    总结,XFire作为一个强大的Web服务框架,为开发者提供了简洁、高效的工具来构建Web服务。通过本次实训,你将掌握如何在Eclipse环境中使用XFire快速开发Web服务,从而开启你在Web服务领域的探索之旅。

    webservice-java_soap.pdf

    ### 总结 通过上述内容,我们可以看到在Java SOAP WebService中处理复杂数据类型并不复杂,Apache SOAP框架提供了强大的内置支持。开发者只需要关注业务逻辑的实现,而无需过多关注底层的数据传输细节。此外,...

    CXF-WebService-开发指南、技术文档.docx

    【CXF WebService 开发指南】 CXF(Commons eXtensible ...总结来说,CXF为开发者提供了全面的Web服务开发工具和框架,支持多种协议和标准,且易于集成和扩展。通过学习和掌握CXF,可以高效地构建健壮的Web服务应用。

    java-webservice-axis2简单开发实例.doc

    总结,使用Java和Apache Axis2开发Web服务涉及准备依赖、构建项目、编写服务实现、配置服务、部署和测试等步骤。这个过程既直观又简单,使得开发者能够快速地构建和发布Web服务。理解并熟练掌握这些步骤对于Java Web...

    webservice-xfire 开发用的JAR包

    标题中的"webservice-xfire 开发用的JAR包"指的是用于开发Web服务的Xfire库的JAR文件集合。这些JAR文件包含了Xfire框架的所有必要组件,例如: 1. **xfire-core.jar**:这是Xfire的核心库,包含了处理SOAP消息、...

    ASPNET-webservice-and-webapp:基于ASP.NET的Web服务和使用此服务的Web应用程序

    总结起来,"ASPNET-webservice-and-webapp"项目将涵盖如何使用ASP.NET和C#创建Web服务,如何构建与之交互的Web应用程序,以及涉及到的.NET Framework、Web API、MVC模式、数据交换格式、部署和安全等相关知识点。...

    Laravel开发-laravel-webservice

    总结,Laravel开发-laravel-webservice项目利用httpful库为Laravel添加了强大的Web服务功能,使得开发者可以更高效地构建和维护API。通过深入学习和实践这个项目,你将能更好地掌握Laravel框架下的Web服务开发,提升...

    用dll承载webService-2.rar

    在实现类中,我们可以使用.NET框架提供的各种服务类,如System.Web.Services.WebService,来构建Web服务的基础结构。 3. **编译DLL**: 使用Visual Studio或其他.NET开发工具,将实现类编译为DLL文件。确保配置项目...

    WebService-开发

    总结来说,Java WebService的开发涉及了Web Service的基本概念、开发工具的使用、服务的创建、部署、测试,以及服务的管理和查找机制。对于Java开发者来说,掌握这些知识和技术对于开发和集成分布式系统至关重要。

    webservice

    首先定义了一个名为`HelloWorld`的接口,使用了`@WebService`注解来声明这是一个Web服务接口。接口中的方法如`sayHi()`和`sayHiToUser()`分别接收一个字符串参数和一个`User`对象,返回相应的问候语。`@WebParam`...

Global site tag (gtag.js) - Google Analytics