- 浏览: 1321250 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (351)
- Java General (37)
- .net General (2)
- Linux Toy (55)
- Oracle (81)
- Mysql (11)
- Programer Career (12)
- Oh, my living ! (2)
- Shell Script (8)
- Web Service (0)
- Linux Server (22)
- Php/Python/Perl (3P) (2)
- Javascript General (5)
- Saleforce Apex Dev (2)
- Web General (5)
- Xen & VM tech. (17)
- PSP (13)
- OpenSolaris (34)
- php (1)
- RAI/flex/action script (16)
- asterisk/CTI (7)
- 交互设计 (6)
- English (3)
- Lucene (1)
最新评论
-
GuolinLee:
markmark
JVM调优总结 -Xms -Xmx -Xmn -Xss -
di1984HIT:
写的太好啊。
JVM调优总结 -Xms -Xmx -Xmn -Xss -
javajdbc:
javajdbc 写道
JVM调优总结 -Xms -Xmx -Xmn -Xss -
javajdbc:
...
JVM调优总结 -Xms -Xmx -Xmn -Xss -
alvin198761:
非常感谢,国外的被封杀了,你这里还有一份
How to Convert An Image-Based Guest To An LVM-Based Guest
看完上一篇 blog: Web 服务搜索与执行引擎 ( 九 )—— 初看客户端如何调用 Web 服务 , 我想我们对当前客户端如何调用 Web 服务的现状 , 无论是从高层接口的利用还是低层接口自己手动构建 SOAP 消息都有了最初步的印象了 . 接下来将要进行的是整个项目最核心的部分之一 : 服务的执行 . 我将为大家展示我们在项目中如何使用 SOAP with Attachments API for Java (SAAJ) ,简化创建和发送 SOAP 消息的详细过程。
Web 服务的基础是以标准格式发送和接收消息,这样所有系统都可以理解消息。通常情况下,这种标准格式是 SOAP 。 SOAP 消息可以手工生成和发送,但是如果说我们按上篇 blog 那样 : 在客户端,首先创建一个 HttpConnector 对象,负责 HTTP 连接。设定 Connector 的一些头部信息,比如 EndPoinURL 和 SoapAction 等。如果网络连接需要使用代理服务器,那也要在这里设定相关的信息。接着创建 SoapSerializer 对象,用于生成 Soap 消息。按照 WSDL 里定义,把所有参数按顺序序列化,得到一个完整的 SOAP 请求消息。该 Soap 消息,作为 Payload 通过 HttpConnector 被发送到服务端。最后,生成一个 SoapReader 对象,负责读取服务端返回的 SOAP 消息,取得其中的返回值。
按上面这种 SOAP 消息的构建方法的话就会变得复杂起来 , 所以说有必要借助于一些 API 来简化我们的操作 . 有几个基于 Java 的 API 可以用来构建低层 SOAP 消息来访问 Web 服务。这些 API 包括 SAAJ 、 Web 服务调用框架( WSIF )、上篇 blog 里提到的 Axis 等。
Ø 选择 SAAJ 的理由
我们最终选择了 SAAJ, 因为基于简单及适用性来考虑 .SAAJ 无疑很适合基于文档的同步或者异步 Web Service 。 SAAJ 使用简单,有助于在 Java 环境中集成各种 Web Service ,它扩展了对文档风格的 Web Service 通信的自然支持( natural support )。 SAAJ 还支持基于标准接口上的 XML 消息传递,并且这一点得到了供应商的广泛支持。另外 SOAP with Attachments API for Java (SAAJ)—— Java API for XML Messaging (JAXM) 的一个分支 —— 能够使许多必需的步骤变得自动化,例如创建上面所说的连接,或者创建和发送实际消息。
Ø 什么是 SAAJ
SAAJ
是在松散耦合软件系统中利用
SOAP
协议实现的基于
XML
消息传递的
API
规范。顾名思义,
SAAJ
支持带附件的
SOAP
消息。
对于
Java API for XML Messaging (JAXM)
,
JAXM 1.0
的理念是通过提供消息传递和
SOAP API
,允许开发人员根据
SOAP
编写支持消息传递标准的业务应用程序。随着
JAXM 1.1
版的推出,
SOAP API (javax.xml.soap)
被分割成了
SAAJ1.1
规范和
JAXM1.1
,
JAXM1.1
只包含基于消息传递的
API
(
javax.xml.messaging
)。目前,正在使用的
SAAJ
版本是
1.2
。
Ø 如何使用
回想那篇 blog, Web 服务搜索与执行引擎 ( 八 )——WSDL 解析精髓 , 提到了为了使用 SAAJ 构建 SOAP 消息调用该服务,我们将需要从 WSDL 收集下列最基本的信息:
目标名称空间
服务名称
端口名称
操作名称
操作输入参数
SOAP 文档结构简单,利用 SAAJ 构建起来也比较方便。但我们需要将用户从网页中输入的数据作为 SOAP 的有效负载发送至异构平台的服务,如何来构建这个有效负载呢?按照什么样的格式将用户输入的数据放入 SOAP 的有效负载中呢?格式可以从解析 WSDL 文档过程中知道,即上面说的那些基本信息 , 但怎么来匹配用户的输入数据呢?这时就需要以 WSDL 中解析出来的参数名称作为用户从网页中输入的文本框的名字,从而匹配了每一个子参数的值,然后即可构建 SOAP 消息的有效负载。然后将 SOAP 消息发送至远程平台。
调用后,将返回一个 SOAP 消息返回值,我们需要解析,并将结果在网页中呈现给客户,我们利用了 JDOM 技术,根据从 WSDL 中解析出的返回信息来提取 SOAP 中的返回值,最终呈现给用户。
具体过程 包括 5 个步骤:
1. 创建 SOAP 连接
2. 生成 SOAP 消息
3. 填充消息
4. 发送消息
5. 检索响应
SOPA 消息的结构
大家也可以去看看我的那篇
blog:
Web
服务搜索与执行引擎
(
七
)——
重温
WSDL
与
SOAP
,
再次复习下
WSDL
跟
SOAP
的有关知识
.
首先来看看消息自身的结构。一条基本的
SOAP
消息由带有两个主要部分的信封(
envelope
)构成:头部和主体。应用程序确定如何使用这些部分,但整个消息必须遵循特定的
XML
结构,例如:
清单
1.
一条示例
SOAP
消息
这里,头部是空的,而主体包含了有效信息,或要传递的消息。在本例中,它是请求某本书价格的消息。
< SOAP-ENV:Header />
< ns1:getPrice xmlns:ns1 ="urn:Book"
SOAP-ENV:encodingStyle ="http://schemas.xmlsoap.org/soap/encoding/" >
< isbn xsi:type ="xsd:string" > 123544111 </ isbn >
</ ns1:getPrice >
</ SOAP-ENV:Body >
</ SOAP-ENV:Envelope >
注意消息的结构。 Envelope 包含 Header 和 Body 元素,这三者都是 http://schemas.xmlsoap.org/soap/envelope/ namespace 的一部分。应用程序使用 SOAPConnection 来发送消息。
清单 2. 创建连接
import javax.xml.soap.SOAPConnection;
public class DynamicInvokeInterce ...{
......
public List invokeOperation(Operation operation) throws Exception ...{
try ...{
SOAPConnectionFactory soapConnFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
soapConnFactory.createConnection();
connection.close();
} catch (Exception e) ...{
System.out.println(e.getMessage());
}
}
}
……
创建一个 SOAP 连接 , 如上清单 2 所示。 SAAJ 客户机可以利用 SOAP Connection Factory ,通过创建 SOAPConnection 来建立点到点的同步连接。该连接提供了同步调用服务的方法。
其次 , 工厂还创建了消息自身:
清单 3. 创建消息对象
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPBody;
public class DynamicInvokeInterce ... {
……
public List invokeOperation(Operation operation) throws Exception
try ... {
SOAPConnectionFactory soapConnFactory =
SOAPConnectionFactory.newInstance();
SOAPConnection connection =
soapConnFactory.createConnection();
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage message = messageFactory.createMessage();
SOAPPart soapPart = message.getSOAPPart();
SOAPEnvelope envelope = soapPart.getEnvelope();
SOAPBody body = envelope.getBody();
connection.close();
…
}
如清单 3 所示 , 使用 MessageFactory 创建消息自身。这一消息已经包含了空的基本部分,比如 envelope 和 header 。 SOAPPart 包含了 envelope ,而 envelope 又包含了主体。从而创建了对所需对象(比如 SOAPBody )的引用。
接着,填充
SOAPBody
:
清单
4.
填充主体
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
public class DynamicInvokeInterce ... {
public static final String XSI_NAMESPACE_PREFIX = " xsi " ;
public static final String XSI_NAMESPACE_URI = " http://www.w3.org/2001/XMLSchema-instance " ;
public static final String XSD_NAMESPACE_PREFIX = " xsd " ;
public static
发表评论
-
使用Spring 的封装的MailSender
2010-11-29 22:24 6742使用Spring 的封装的Ma ... -
有时候,SVN 上代码太多,而我们只想下载自己负责的那个部分进行修改,这时可以这样
2010-09-04 09:06 1285svn checkout <url_of_big_dir ... -
tomcat session replication on linux server.
2010-07-26 10:49 1208Specially, to turn on multicast ... -
Session lost when app. is redeployed (Solved)
2010-07-07 16:02 1275There is a workaround to this p ... -
jvm 5.0 GC 回收机制
2009-10-16 11:55 1789http://java.sun.com/docs/hotspo ... -
How to Create a Custom Annotations?
2009-10-08 11:32 1245There are a lot of documentatio ... -
JAXB 深入学习<1>
2009-08-04 22:22 2365说白了就是一个api将 xml+schema->ja ... -
simple json lib for java
2009-08-04 21:57 3236有时候为了需要将一个对象或数组转成json string 给前 ... -
在servlet 上输出图片
2008-07-30 21:38 4295public void doGet(HttpServletRe ... -
用java 对 oracle 中的 image 存取
2008-07-30 21:35 1865package data; import java.io. ... -
有关 java 的 tnameserv的link
2008-07-15 22:39 2310http://java.sun.com/j2se/1.4.2/ ... -
Java Reflection API 运用示例
2008-05-05 15:51 2403本文节选 ... -
将系统移植到Spring
2008-04-29 11:06 1492Spring已经是一个在Apache 2.0许可下发布的基础构 ... -
动态代理一例
2008-04-28 15:33 1224在之前的一篇关于Dec ... -
使用JAVA中的动态代理实现数据库连接池
2008-04-28 13:48 1483作者通过使用JAVA中的动 ... -
Have you known enough about DBCP?
2008-04-23 12:08 2267Have you known enough about DBC ... -
AX-RPC Evolves into Simpler, More Powerful JAX-WS
2008-03-23 15:40 3561s of version 2.0, JAX-RPC has b ... -
更改 Netbeans 界面的字体大小
2008-03-22 07:29 4714学习或者使用 Netbeans 的时候, 有时候觉得界面字体很 ... -
JSF+Spring+Hibernate的实例讲解
2008-03-20 16:41 2462我一直认为jsf必定会成为MS的 Net ... -
Struts+Spring+Hibernate练习(完整)
2008-03-20 16:17 2082工具: Eclipse3.2.1、MyEclipse5 ...
相关推荐
Web服务通常遵循SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery, and Integration)等标准。这些标准定义了如何发布、查找、调用和...
Java作为一种多平台、面向对象的编程语言,提供了丰富的API和库来支持XML的处理,例如DOM(文档对象模型)、SAX(简单API for XML)和StAX(流式API for XML)等解析器,以及JAXB(Java架构绑定)和JDOM等对象模型。...
《Java and XML(英文第三版)_java_xml_birdsolc_源码》是关于Java与XML集成编程的一本权威指南,特别适合于那些希望深入理解如何在Java应用程序中有效地使用XML技术的开发者。这本书详细阐述了Java平台上的XML处理...
7. **SOAP(Simple Object Access Protocol)和Web Services**:讲解如何使用Java和XML构建和消费SOAP Web服务,包括JAX-RPC和JAX-WS框架。 8. **JAXB2和XMLBeans**:对比分析JAXB2和XMLBeans,两者都是Java与XML...
应用服务器是承载Web Service运行的平台,可以选择任何支持UDDI(Universal Description, Discovery, and Integration)的服务器来发布和查找服务。在项目实践中,通过IDE生成WSDL文件,然后编写Java服务端代码,...
该书不仅对J2EE和XML的重要性进行了阐述,还详细讲解了如何在J2EE应用的每一层中有效地使用XML,以及如何解开Java XML API网,包括JAX家族及其他新兴标准如JDOM等。 ### J2EE与XML:为何结合? J2EE作为企业级应用...
3. **Web服务的实现**:介绍如何使用SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)和UDDI(Universal Description, Discovery, and Integration)来构建和消费Web服务,实现跨...
它支持JAAS(Java Authentication and Authorization Service),并提供了一套易于使用的API来处理安全性问题,如身份验证、会话管理以及权限控制。 总结起来,JBoss作为Java EE的实现,其强大之处在于它整合了众多...
8. **Parsers and Transformers**: `javax.xml.parsers`包包含了创建解析器的类,如`DocumentBuilderFactory`,而`javax.xml.transform`包提供了转换XML文档的工具,如`TransformerFactory`和`Transformer`,可以...
此外,平台还利用 JSP(JavaServer Pages)和 AJAX(Asynchronous JavaScript and XML)技术构建了一个服务搜索引擎,用户可以通过此搜索引擎快速找到所需的服务。这种交互式的Web应用提供了实时反馈,提升了用户...
4. **XML与Web服务**:XML在Web服务中的应用,如SOAP(Simple Object Access Protocol)消息格式,以及WSDL(Web Services Description Language)用于描述Web服务。 5. **AJAX与XML**:AJAX(Asynchronous ...
- **JDOM**:了解JDOM库的使用方法,学会使用JDOM构建和解析XML文档。 - **DOM4J**:掌握DOM4J的特性,学会使用DOM4J进行XML数据操作。 - **JAXR**:了解JAXR在XML注册表中的应用。 #### 十三、Web服务 - **JAX-...
5. **XMLHttpRequest**:在Web开发中,XMLHttpRequest对象常用于异步获取和发送XML数据,是AJAX(Asynchronous JavaScript and XML)技术的基础。 6. **XML绑定**:许多编程语言支持XML与对象模型之间的绑定,例如...
4. **JAF (Java Authentication and Authorization Framework)** - JAF提供了一个框架,支持开发者通过自定义策略来实现安全控制功能。 5. **RMI (Remote Method Invocation)** - RMI允许一个Java对象调用另一个...
Web服务是一种通过网络进行通信的软件,使用标准的XML格式交换数据,常见的Web服务协议有SOAP(Simple Object Access Protocol)和REST(Representational State Transfer)。 这些知识点涵盖了J2EE开发的基础到...
- **UDDI(Universal Description, Discovery, and Integration)**:一种服务发现标准,通过XML记录服务信息。 7. **XML编程API** - **JDOM, DOM4J (Java)**:Java平台上的XML处理库,提供对DOM和XPath的支持。 ...
- **JNDI、JMS**:学习Java Naming and Directory Interface、Java Message Service的使用方法。 - **JTA、JMX**:了解事务管理、系统监控的相关技术。 ### 16. EJB技术 - **会话Bean、实体Bean**:掌握Session ...
1. **创建数据源**:数据源是应用连接数据库的关键,需指定JNDI(Java Naming and Directory Interface)名称以便应用通过JNDI查找并使用。 2. **修改.ear文件**:.ear文件是J2EE应用的打包格式,需要更新其中的资源...
- **JAF** (Java Authentication and Authorization Service): 提供了一种框架来支持身份验证和授权机制。允许开发人员自定义这些服务。 - **RMI** (Remote Method Invocation): 允许在不同JVM上的对象直接调用...
JNDI(Java Naming and Directory Interface)提供了一种查找和访问命名服务的方式;JMS(Java Message Service)则是用于消息传递的应用程序接口;JTA(Java Transaction API)/ JTS(Java Transaction Service)则...