WebService

一、XML Schema

schema 规范中:

① 所有标签和属性都需要有 schema 文件来定义;

② 所有的 schema 文件都必须有一个 namespace,由 targetNamespace 属性值指定,相当于该 schema 文件的 id;

③ 通过 xmlns 属性来为 xml 文件引入一个 schema 约束,xmlns 的值即为被引入约束的 namespace;

④ 如果引入的 schema 不是 w3c 组织定义的,则必须指定该 schema 文件的位置(以便 xml 解析器读取);

⑤ schema 文件的位置由 schemaLocation 属性指定,属性值格式为 [该 schema 的 namespace][空格][物理文件位置];

⑥ 如果引入了N个约束,需要给 n-1 个取别名。 

schema 文件的格式为 xsd。

一份 schema 文件的 实例:

<?xml version="1.0" encoding="UTF-8" ?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.ldj.com/bookSchema"
elementFormDefault="qualified">
<element name="书架">
  <complexType>
    <sequence maxOccurs="unbounded">
      <element name="书">
        <complexType>
          <sequence>
            <element name="书名" type="string"/>
            <element name="作者" type="string"/>
            <element name="售价" type="string"/>
          </sequence>
        </complexType>
      </element>
    </sequence>
  </complexType>
</element>
</schema>

以及使用该约束的实例:

<?xml version="1.0" encoding="UTF-8"?>
<书架 xmlns="http://www.ldj.com/bookSchema" xmlns:std="http://www.w3.org/2001/XMLSchema-instance" std:schemaLocation="http://www.ldj.com/bookSchema book.xsd">
  <书>
    <书名>大话西游</书名>
    <作者>刘振宇</作者>
    <售价>23.0</售价>
  </书> 
</书架>

 

二、Web Service中的几个重要术语

1. WSDL:web service definition language

① 对应一种类型的文件.wsdl。

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

③ 一个 web service 对应一个唯一的 wsdl 文档。


2. SOAP:simple object access protocal

① 是一种简单的、基于 HTTP 和 XML 的协议,用于在 WEB 上交换结构化的数据。

② soap 消息包括:请求消息和响应消息。

③ http + xml 片断。


3. SEI:WebService EndPoint Interface

即是 WebService 服务器端用来处理请求的接口

@Webservice

@WebMethod


4. CXF:Celtix + XFire

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


三、开发 WebService

WebService 的开发包括两种方式:直接使用 JDK 开发(需要 jdk1.6 及以上版本)、使用 CXF 框架开发。生产环境中一般使用框架进行 WebService 的开发。不论使用哪种方式,都需要进行 WebService 服务端和客户端的开发。

3.1 使用 JDK 开发 WebService

(1)开发服务器端

WebService 是围绕 SEI 进行工作的,所以需要编写相关业务的接口和实现类:

// in file HelloWS.java
package com.ldj.myws.helloworld;
​
​import javax.jws.WebMethod;
import javax.jws.WebService;
​
@WebService
public interface HelloWS {
  @WebMethod
  String sayHello(String name);
}
​
// in file HelloWSImpl.java
package com.ldj.myws.helloworld;
​
import javax.jws.WebService;
​
@WebService
public class HelloWSImpl implements HelloWS {
  public String sayHello(String name) {
    System.out.println("HelloWSImple.sayHello.."+name);
    return "hello " + name;
  }
}

注意,需要对接口使用 @WebService 修饰,并且对接口中定义的方法使用 @WebMethod 修饰,如上面第7、9行代码所示。另外还需对实现类也使用 @WebService 修饰,如第18行代码所示。

定义好 SEI 及其实现类后,需要对 WebService 进行发布:

package com.ldj.myws.helloworld;
​
import javax.xml.ws.Endpoint;
/*
* 发布Web Service
*/
public class ServerTest {
  public static void main(String[] args) {
    String address = "http://192.168.2.229/hellows";
    Endpoint.publish(address, new HelloWSImpl());
    System.out.println("发布 HelloWS WebService 成功");
  }
}

以上就完成了 HelloWS 的服务端开发,接下来进行对应的客户端开发。


(2)开发客户端

客户端使用某个 WebService 时必须首先知道该服务对应的 wsdl 文件。为了获取该文件,可以在 WebService 服务的 URL 后跟 ?wsdl 参数进行请求,如:http://192.168.2.229/hellows?wsdl。通过浏览器访问上面的 URL,即可获取到 helloWS 服务的 WSDL:

 

也可以通过 Eclipse 自带的 Web Service Explorer 来查看 wsdl,该工具会解析 wsdl 以对其进行可视化:

 

注意:在查看 wsdl 前,需要启动 WebService 的服务端,即运行 ServerTest 中的 main 方法。以上是使用第三方工具对 HelloWS 服务进行访问,下面开始编写代码,使用代码的方式来访问。

首先使用 jdk 的 wsimort.exe 工具生成客户端代码:

①.进入客户端项目源码根目录(即 src 目录),在此目录下运行 jdk 中的 wsimport -keep url (url 为wsdl文件的路径)。如“wsimport -keep http://192.168.2.229/hellows?wsdl”,该工具会自动生成如下的包和类:

 

②.定义客户端的测试类,添加访问 WebService 的代码:

package com.ldj.myws.client;
​
import com.ldj.myws.helloworld.HelloWSImpl;
import com.ldj.myws.helloworld.HelloWSImplService;​
​
public class ClientTest {
  public static void main(String[] args) {
    HelloWSImplService factory = new HelloWSImplService();
    HelloWSImpl helloWS = factory.getHelloWSImplPort();

    // helloWS 其实是一个代理类 com.sun.proxy.$Proxy32
    System.out.println(helloWS.getClass());

    String ret = helloWS.sayHello("laideju");
    System.out.println(ret);
  }
}

以上就完成了最简单的使用代码访问 WebService 的功能。

3.2 监听请求: 使用Eclipse的TCP/IP工具(端口转发)

 面试问题:

1.webservice相当于HTTP+?+?
   ? : xml
   ? : schema
2.wsdl是什么?
   webservice定义语言, 对应.wsdl文档, 一个webservice会对应一个唯一的wsdl文档, 定义了客户端与服务端发送请求和响应的数据格式和过程
3.如何发布一个webservice?
   定义SEI @webservice @webMethod
   定义SEI的实现
   发布:Endpoint.publish(url, SEIImplObject)
4.如何请求一个webservice?
   1.根据wsdl文档生成客户端代码  jdk/cxf
   2.根据生成的代码调用webService


 

原文地址:https://www.cnblogs.com/itfky/p/13728118.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1.使用ajax调用varxhr;functioninvoke(){if(window.ActiveXObject){xhr=newActiveXObject("Microsoft.XMLHTTP");}else{xhr=newXMLHttpRequest();}//指定请求地址varurl="http://127.0.0.1:7777/hello?wsdl";//
               好不容易把WebService服务器端搭建起来,我们还需要客户端程序也同样跑起来才能够进行和服务器端程序的通信: 在这篇文章里面,我会先自己写代码去实现调用WebService服务器端程序,接下来,通过IDEA配置的方式来调用WebService服务端: 首先,我写了一个W
1新建一个工程项目用来做服务端增加一个MyService1类文件packagecom.zns.ws;importjavax.jws.WebMethod;importjavax.jws.WebService;importjavax.xml.ws.Endpoint;@WebServicepublicclassMyService1{publicstaticvoidmain(String[]args){
packagecom.transsion.util;importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.URL;importjava.net.URLConnection;importcom.alibaba.druid.util.Base64;importcom.tra
再生产wsdl文件时重写描述文件1usingSystem;2usingSystem.Collections.Generic;3usingSystem.Linq;4usingSystem.Web;5usingSystem.Web.Services.Description;67namespaceStrongSoftManage.Web.App8{9publicclassSoapExtens:SoapExtensi
一般情况下,使用eclipse自带的jax-ws生成webservice会自动生成2个类:ContractConnector.java packagecom.wonders.webservice.contract;importjava.text.DecimalFormat;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Date;i
一、WebService概述1.1什么是WebService 基于Web的服务:服务器端整出一些资源让客户端应用访问(获取数据) 一个跨语言、跨平台的规范(抽象)所谓跨编程语言和跨操作平台,就是说服务端程序采用java编写,客户端程序则可以采用其他编程语言编写,反之亦然!跨操作系统平台则是指服务
一、什么是CXF?    ApacheCXF=Celtix+Xfire,开始叫ApacheCeltiXfire,后来更名为ApacheCXF了,以下简称为CXF。ApacheCXF是一个开源的webServices框架,CXF帮助您构建和开发webServices,它支持多种协议,比如:SOAP1.1,1,2 XML/HTTP、RESTful或者CORBA。  
工具IDEA一、构建项目1、选择SpringInitializr2、填写项目信息3、勾选webService4、勾选Thymeleaf5、项目建立完成,启动类自动生成二、写个Controller启动服务。浏览器访问/hello接口。 
1.环境win764位,vs20102.新建一个asp.netweb应用程序(同上一篇)3.添加一个web引用,引用上一篇创建的服务。注意不是服务引用。如下图 
WebService之WSDL文件讲解   恩,我想说的是,是不是经常有人在开发的时候,特别是和第三方有接口的时候,走的是SOAP协议,然后用户给你一个WSDL文件,说按照上面的进行适配,嘿嘿,这个时候,要是你以前没有开发过,肯定会傻眼,那如果你想学习的话,就认真的看下面的讲解咯:一、WSDL概述  
在websrvice发布文件的webconfig中加入<httpRuntimemaxRequestLength="102400"/> <webServices>     <protocols>       <addname="HttpPost"/>       <addname="HttpGet"/>     </protocols>   
 代码比较简单,按照如下来操作即可,只是jar包有很多问题,比如找不到classnotFondspring、以及找不到xfile.xml、以及xfile.xml中的一个参数问题,以及2.0 spring。jar和spring1.6.2冲突问题,总之这个小demo报了一堆错误,其实都是jar的问题,为了让大家减少这方面的错误,所以我提供
 一、soapUI简介SOAP:   WebService通过Http协议发送请求和接收结果时,发送的请求内容和结果内容都采用XML格式封装,并增加了一些特定的HTTP消息头,以说明HTTP消息头的内容格式,这些特定的HTTP消息头和XML内容格式就是SOAP协议。SOAP提供了标准的RPC方法来调用WebService。 
参考,感谢https://blog.csdn.net/hj7jay/article/details/727224381.环境:win764位,jdk1.8.0_201 EclipseJavaEEIDEforWebDevelopers.Version:Mars.1Release(4.5.1)2.创建一个普通的java项目,名字是TheService在src目录下创建一个com.hyan.service包,在此包下创建
CXF实现RestfulWebService基础示例一、写在前面IDE:IDEA14JDK:1.7CXF:2.6.2示例来源:%CXF_HOME%\samples\jax_rs\basic发布方式:JAXRSServerFactoryBean的create()方法调用方式:URL的openStream()方法、HttpClient的executeMethod()方法二、服务端(Java项目)1.准备Jar包
封装helper类:classWebServiceHelper{///<summary>///1.get请求http方法///</summary>///<paramname="url">基础url</param>///<paramname="method">请求方法</param>///<paramnam
.net客户端调用java或.netwebservice进行soapheader验证最近项目中有业务需要跨平台调用web服务,客户端和服务器之间采用非对称加密来保证数据的安全性,webservice的安全验证基于soapheader。借此机会,顺便整理一下调用.netwebservice和javawebservice的验证方式,记录下来。
Node.jshttps://www.cnblogs.com/goldlong/p/8027997.htmlQQ音乐apihttps://juejin.im/post/5a35228e51882506a463b172#heading-11?tdsourcetag=s_pcqq_aiomsgGit把本地仓库上传到GitHbubhttps://blog.csdn.net/zamamiro/article/details/70172900git删除本地仓库https://blog.cs
转载自:孤傲苍狼 WebService学习总结(三)——使用JDK开发WebService一、WebService的开发手段使用Java开发WebService时可以使用以下两种开发手段1、 使用JDK开发(1.6及以上版本)-->详见:本文2、使用CXF框架开发-->详见:其他文章二、使用JDK开发WebServi