- 浏览: 407346 次
- 性别:
- 来自: 哈尔滨
最新评论
-
springdata_springmvc:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (二)——JAX-WS例子 -
springdata-jpa:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (三)——几个概念 -
springmvc-freemarker:
如何在java Web项目中开发WebService接口,地址 ...
JAVA6开发WebService (一) -
yuanfen2014:
[color=red][/color] 学习了
jdom解析xml -
di1984HIT:
我很喜欢你对设计模式的理解。
JAVA设计模式学习笔记5——模版方法模式(Template Method Pattern)
要了解WebService,光能写代码不行啊,这说说WebService最基本的概念。
首先WebService要知道几个最基本的概念:
1、XML以及XML Schema
XML 是Web Service表示数据的基本格式。XML是一套通用的数据表示格式,与平台无关,这就使不同语言构建的系统之间相互传递数据成为可能。
XML Schema-XSD 拥有一套标准的、可扩展的数据类型系统,Web Service即是用XSD来作为数据类型系统的。由于不同语言之间数据类型也不尽相同,因此,数据传输过程中,必须将其转化为一种通用的数据类型,即XSD的数据类型。
2、SOAP
SOAP(Simple Object Access Protocol),简单对象访问协议,它是基于XML格式的消息交换协议。SOAP定义了一个envelope对象,使用envelope来包装要传递的消息,而消息本身可以采用自身特定的词汇,使用namespace来区分彼此。简单的说,在WebService中传递的东西是一封信,SOAP就是信的通用格式,他定义了一封信应该有信封,信封里装着信的内容,信封(envlope)的格式是固定的,而信的内容(要传递的数据)你可以自己定义。
3、WSDL
WSDL(Web Service Description Language),Web Service描述语言,使用XML语言对Web Service及其函数、参数、返回值、数据类型等信息进行描述。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。
4、UDDI
UDDI(Universal Description Discovery and Integration),统一描述、发现和集成协议。UDDI 是一种目录服务,企业可以使用它对 Web services 进行注册和搜索。UDDI是一个分布式的互联网服务注册机制,他实现了一组可公开访问的接 口,通过这些接口,网络服务可以向服务信息库注册其服务信息、服务需求者可以找到分散在世界各地的网络服务。UDDI 并不像 WSDL 和 SOAP 一样深入人心,因为很多时候,使用者知道 Web 服务的位置(通常位于公司的企业内部网中)。
5、远程过程调用(RPC)与消息传递
Web service本身实际是在实现应用程序间的通信,实现通信的方式有两种:远程过程调用(RPC)和消息传递(DOCUMENT)。使用RPC的时候,客户端的概念是调用服务器上的远程过程,通常方式为实例化一个远程对象并调用其方法和属性。消息传递的概念是,客户端向服务器发送消息,然后等待服务器的回应。消息传递系统强调的是消息的发送和回应,而不是远程对象的界面。他们最大不同就是RPC不能通过Schema 来校验,而Document 类型是可以的。因此document 类型webservice成为主流 ,Document也是JAX-WS默认的实现方式。
有一种说法是,Web Service = SOAP + WSDL + HTTP。其中,SOAP协议是web service的主体,它通过HTTP或者SMTP等应用层协议进行通讯,自身使用XML文件来描述程序的函数方法和参数信息,从而完成不同主机的异构系统间的服务处理。这里的WSDL(Web Services Description Language)web 服务描述语言也是一个XML文档,它通过HTTP向公众发布,公告客户端程序关于某个具体的 Web service服务的URL信息、方法的命名,参数,返回值等。
SOAP协议简介
上面说了,SOAP是一种基于XML的消息通讯格式,用于网络上,不同平台,不同语言的应用程序间的通讯。一条 SOAP 消息就是一个普通的 XML 文档,包含下列元素:
Envelope 标识XML 文档一条 SOAP 消息
Header 包含头部信息的XML标签
Body 包含所有的调用和响应的主体信息的标签
Fault 错误信息标签。
SOAP 消息的基本结构是
<?xml version="1.0" encoding="UTF-8"?> <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Header> ... </soap:Header> <soap:Body> ... <soap:Fault> ... </soap:Fault> </soap:Body> </soap:Envelope>
soap:Envelope是SOAP中根元素元素。Envelope元素中可以包含多个可选的Header元素,必须同时包含一个Body元素。Header元素必须是Envelope元素的直接子元素,并且要位于Body元素之前。
soap:Header与HTTP请求中的Headers类似,用于传送一些基础的通用的数据,例如安全、事务等方面的信息。Header不是SOAP消息中的必需元素,但他是扩展SOAP协议的一个功能非常强大的功能。Header有两个非常重要的属性
soap:Body是SOAP消息中必需的元素,用于传送实际的业务数据或错误信息。
soap:Fault是soap:Body的子元素,用于传送错误信息,当有错误发生时才需要次标签。
可参考:http://askcuix.iteye.com/blog/211005
WSDL简介
WSDL是WebService的描述语言,也是使用xml编写,用于描述、也可定位WebService,还不属于W3C标准。WSDL主要包含以下几个元素:
definitions WSDL的根节点,主要包括:name属性,WebService服务名,可通过@WebService注解的serviceName 更改;targetNamespace属性,命名空间,可通过@WebService注解的targetNamespace更改。
types web service 使用的数据类型,他是独立与机器和语言的类型定义,这些类型被message标签所引用。
message web service 使用的消息,他定义了WebService函数的参数。在WSDL中,输入输出参数要分开定义,使用 不同的message标签体标识。message定义的输入输出参数被portType标签所引用。
portType web service 执行的操作。引用message标签定义的内容来描述函数信息(函数名,输入输出参数等)。
binding web service 使用的通信协议。将portType中定义的服务绑定到SOAP协议,这部分XML 指定最终发布的 WebService的SOAP 消息封装格式、发布地址等。
service 这个元素的name 属性指定服务名称(这里与根元素的name 属性相同),子元素port的name 属性指定port 名称,子元素address的location 属性指定Web 服务的地址。
WSDL的基本结构是:
<definitions> <types> ... </types> <message> ... </message> <portType> ... </portType> <binding> ... </binding> <service> ... </service> </definitions>
可参考:http://www.w3school.com.cn/wsdl/index.asp
我就不浪费资源粘一大段WSDL和SOAP的实例过来了,上一篇写了个小例子,发布后在浏览器输入“服务地址”+ “?wsdl”就可以查看(如那个例子的WSDL地址是http://127.0.0.1:8080/helloService?wsdl)。SOAP可以使用一个HTTP监听工具查看(我使用的是HTTPAnalyzerFullV5),或者通过CXF的实现发布程序,使用CXF的拦截器可以看到SOAP消息内容。
将上一篇的代码更改为CXF实现:
首先下载CXF的包,我下的是apache-cxf-2.3.0.zip,将lib下的jar包引入工程路径,将发布服务的代码更改为:
public static void main(String[] args) { // Endpoint.publish("http://localhost:8080/helloService",new HelloImpl()); //使用CXF特有的API---JaxWsServerFactoryBean发布 JaxWsServerFactoryBean soapFactoryBean = new JaxWsServerFactoryBean(); soapFactoryBean.getInInterceptors().add(new LoggingInInterceptor()); soapFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor()); soapFactoryBean.setServiceClass(HelloImpl.class); soapFactoryBean.setAddress("http://127.0.0.1:8080/helloService"); soapFactoryBean.create(); } }
这样,就可以在控制台看到SOAP的消息内容了,信息: Inbound Message是服务器端接受到的内容,信息: Outbound Message是服务器返回给客户端的内容。当然,使用CXF的实现方式时,客户端调用也可以使用CXF的特有方式:
//1、使用标准的JAX-WS 的API 完成客户端调用 // QName qName = new QName("http://service.why.com/","HelloService"); // HelloService helloService = new HelloService(new URL("http://127.0.0.1:8080/helloService?wsdl"),qName); // Hello hello = (Hello) helloService.getPort(Hello.class); //2、使用了CXF 的JaxWsProxyFactoryBean 来访问Web 服务 JaxWsProxyFactoryBean soapFactoryBean = new JaxWsProxyFactoryBean(); soapFactoryBean.setAddress("http://127.0.0.1:8080/helloService"); soapFactoryBean.setServiceClass(Hello.class); Object o = soapFactoryBean.create(); Hello hello = (Hello) o;
注意,当使用不同的WebService实现时,其生成的WSDL内容可能会稍有差异,但总体上都是一样的。
Apache CXF下载地址 :http://cxf.apache.org/download.html
附件是上一篇中例子的工程,有一点点修改,我把lib里的CXF的jar包删了,太大了,不让上传,想看的同学可以到上面的地址下载CXF相应的包,解压后将lib里的东东拷到我工程的lib目录里就OK了,当然还得先在C盘建立几个测试文件c1.jpg、c2.jpg、origin.jpg和why.jpg。
- WebService02.rar (20.6 KB)
- 下载次数: 234
评论
2012-3-27 16:41:49 org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
警告: Interceptor for {http://service.why.com/}HelloService#{http://server.why.com/}selectMaxAgeCustomer has thrown exception, unwinding now
org.apache.cxf.interceptor.Fault: Could not write attachments.
。。。。。。。。
Caused by: org.eclipse.jetty.io.EofException
at org.eclipse.jetty.http.HttpGenerator.flushBuffer(HttpGenerator.java:911)
at org.eclipse.jetty.http.AbstractGenerator.flush(AbstractGenerator.java:433)
...........
Caused by: java.io.IOException: 您的主机中的软件中止了一个已建立的连接。
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(Unknown Source)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(Unknown Source)
at sun.nio.ch.IOUtil.write(Unknown Source)
.....................
发表评论
-
CKFinder2.x 入门 二
2011-07-08 17:28 11404破解 CKFinder是收费的,可是我们都比较 ... -
CKFinder2.x 入门
2011-07-08 16:04 6427CKFinder是一款强大的基于浏览器的ajax文件管 ... -
jxl 操作 Excel
2011-06-09 12:06 9780java 操作 Excel 最常用的就是JXL(jav ... -
CKEditor 3.6 入门二
2011-05-23 18:11 5541配置CKEditor ... -
CKEditor 3.6 入门
2011-05-20 11:28 8343有多种方法可以将CKEditor集成到你的页面中,下面是 ... -
JAVA6开发WebService (五)—— JAXB
2011-01-25 16:55 7000JAXB(Java API for XML Bindi ... -
多线程断点续传
2011-01-12 12:20 3798以前看过一个前辈写的断点续传的文章,记得当时没看懂,就 ... -
JAVA6开发WebService (四)——SAAJ调用WebService
2010-11-13 14:32 8644前面写了个JAX-WS的小例子,看到用JAVA6开发W ... -
JAVA6开发WebService (二)——JAX-WS例子
2010-11-10 17:13 19792上一篇写了个最简单的小例子,只是为了说明JAVA6开发 ... -
JAVA6开发WebService (一)
2010-11-10 12:32 36104WebService ... -
InputStream、OutputStream、String的相互转换
2010-11-09 16:37 474741、字符串转inputStream String ... -
dom4j解析xml
2010-08-20 10:52 7331dom4j和jdom都是非常优秀的xml解析工具,但现 ... -
正则表达式
2010-05-17 16:39 1820先看一个用正则表达式校验Email的js方法 func ... -
Struts 1 和 Struts 2 的线程安全
2010-03-23 16:58 5737昨天人问我Struts 2是怎么保证全局变量的线程安全 ... -
oracle 字符串函数
2010-02-22 10:59 26371.LOWER 返回字符串的小写形式;select lower ... -
JAVA 集合类
2010-01-06 16:41 1316Collection├List│├LinkedLi ... -
JAVA 线程学习笔记--同步
2009-12-30 16:37 1575为了确保可以在线程之间以受控方式共享数据,Java 语言提供了 ... -
JAVA 线程学习笔记
2009-12-30 16:26 2936创建线程有两种方法。 ... -
JAVA调用系统命令或可执行程序
2009-09-03 15:33 69721通过 java.lang.Runtime 类可以方便的 ... -
FTP客户端(利用sun.net.ftp.FtpClient实现)
2009-07-30 15:35 25963昨天帮同事弄java上传文件到ftp服务器,用的sun ...
相关推荐
总结起来,开发和调用WebService是一个涉及多种技术的过程,包括XML、SOAP、WSDL以及各种调用策略。Eclipse作为一个强大的开发工具,为我们提供了便捷的方式来创建和测试WebService。理解并熟练掌握这些知识点,对于...
基于以上信息,我们可以深入探讨以下几个知识点: 1. **Android网络编程**:Android应用通过HttpURLConnection或第三方库如OkHttp、Volley等与服务器进行通信。在本源码中,开发者可能会使用SOAP或RESTful API来...
安装过程涉及以下几个步骤: 1. 解压缩并配置Eclipse。 2. 将Axis2插件复制到Eclipse的plugins目录。 3. 安装MyEclipse。 4. 配置Web服务部署环境,将Tomcat解压缩并启动。 5. 将Axis2的WAR包部署到Tomcat的webapps...
整合 Quartz 和 Spring 主要涉及到以下几个方面: 1. **依赖引入**:首先,你需要在项目中引入 Quartz 和 Spring 相关的库。从提供的文件名称列表来看,这包括了 Spring 1.2.6 版本的 jar 包,以及 xbean、xerces、...
6. 数据转换:使用如XstreamRepresentation或JacksonRepresentation等工具将Java对象转换为XML或JSON格式,以满足RESTful服务的响应需求。 实际运行时,通过访问特定URL,如`...
学习 Java Web 开发的路线可以分为以下几个阶段: 1. 入门阶段: - 熟悉 JDK 和 JVM,安装并配置 JDK。 - 学习 Java 基础语法,包括类、抽象类、接口和内部类的概念。 - 掌握 Java 核心编程,如输入输出流、多...
WebService——AXIS详解 在IT领域,WebService是一种基于标准的、平台无关的、可以在不同系统之间交换数据的方式。它利用XML(可扩展标记语言)作为数据格式,HTTP作为传输协议,SOAP(简单对象访问协议)作为消息...
具体到`ExchangeRateXML.java`的实现,可能包括以下几个步骤: - 创建SOAP请求消息,包括请求头和请求体,其中可能包含请求的货币类型和日期。 - 使用HTTP连接发送SOAP请求到Web服务的URL。 - 接收服务器返回的SOAP...
│ Java面试题04.java中int占几个字节.mp4 │ Java面试题05.java面向对象的特征.mp4 │ Java面试题06.装箱和拆箱.mp4 │ Java面试题07.==和equals的区别.mp4 │ Java面试题08.String.mp4 │ Java面试题09.讲一下java...
使用CXF开发SOAP服务通常包括以下几个步骤: 1. **配置Maven依赖**:为了使用CXF,首先需要在项目的Maven配置文件pom.xml中添加相应的依赖项。这将确保构建过程中可以获取到CXF库和其他必要的组件。 2. **编写WS...
在实际的开发环境中,可能会包括以下几个部分: 1. `src/main/java` - 包含Java源代码,包括CXF服务端点接口和服务实现。 2. `src/main/resources` - 可能包含Spring配置文件(如`applicationContext.xml`)和其他...
在描述中没有提供具体的信息,但从标签和部分内容来看,我们可以推测教程可能包括以下几个关键知识点: 1. **环境配置**:首先,你需要设置Java环境,确保`JAVA_HOME`环境变量已正确设置,并将 `%JAVA_HOME%\lib` ...
标题中的“xfire+spring+webservice+client”是一个关于集成XFire、Spring框架和Web服务客户端的专题,这涉及到Java开发中的一项重要技术——Web服务的消费与提供。在这个主题下,我们将深入探讨以下几个核心知识点...
【xfire集成spring+hibernate实现webservice样例工程】是一个典型的Java开发中的整合案例,它演示了如何将三个重要的技术框架——XFire、Spring和Hibernate有效地结合在一起,以构建一个提供Web服务的工程。这个工程...
该系统的数据库设计主要包括概念模型设计、逻辑结构设计、数据库实施、数据库运营与维护等几个方面。 * 概念模型设计:概念模型设计是数据库设计的第一步骤,在这个阶段,我们需要根据仓库管理系统的需求,定义仓库...
- **服务管理内容**:服务管理主要包括以下几个方面: - **iServer服务管理(iServer Manager)**:用于管理整个SuperMap iServer Java服务环境中的各种服务,包括启动、停止、配置等操作。 - **SuperMap WebService...
5. 教学用操作系统实例:张辉提到了minix和其他几个有趣的教学用操作系统项目,它们使用了不同编程语言来开发。minix最初是为了教学而设计,但因其庞大而难以作为教学的起点。相对而言,RCOS和NACHOS等项目则更为...
异步处理在Web Service中的应用主要体现在以下几个方面: 1. **提高并发性**:在同步模式下,客户端调用服务端的方法后会等待返回结果,这可能导致客户端阻塞,无法处理其他请求。异步模式下,客户端调用服务后立即...