`

SAAJ 入门

阅读更多

SAAJ(SOAP with Attachments API for Java) 是在松散耦合软件系统中基于SOAP协议利用XML传递消息的API规.

 

简单案例

发送SOAP工具类util.SOAPUtil.java

package util;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPConnection;
import javax.xml.soap.SOAPConnectionFactory;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;
public class SOAPUtil {
	private SOAPUtil(){}
	
	public static SOAPUtil newInstance(){
		return new SOAPUtil();
	}
	
	// prepare the request xml 
	private SOAPMessage prepareMessage(String requestXml){
		try {
			MessageFactory messageFactory = MessageFactory.newInstance();
	        SOAPMessage requestMessage = messageFactory.createMessage();
			SOAPPart soapPart = requestMessage.getSOAPPart();
			SOAPEnvelope envelope = soapPart.getEnvelope();
			SOAPBody body = envelope.getBody();
			body.addTextNode(requestXml);
			return requestMessage;
		} catch (Exception e) {
			throw new RuntimeException(e);
		}

	}
	
	// get the response xml from response SOAPMessage
	private String detachResponseXml(SOAPMessage responseMessage){
		try {
			return responseMessage.getSOAPPart().getEnvelope().getBody().getTextContent();
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
	}
	
	// connect the remote webservice and return the response xml
	public String fireCall(String requestXml,String url){
		try {
			SOAPConnectionFactory soapConnFactory = SOAPConnectionFactory.newInstance();
			SOAPConnection connection = soapConnFactory.createConnection();
			SOAPMessage requestMessage=prepareMessage(requestXml);
			SOAPMessage responseMessage=connection.call(requestMessage, url);
			connection.close();
			return detachResponseXml(responseMessage);
		} catch (Exception e) {
			throw new RuntimeException(e);
		} 
	}

}

 

服务类servlets.SOAPResponseServlet.java 

package servlets;

import java.io.BufferedReader;
import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.xml.soap.MessageFactory;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPEnvelope;
import javax.xml.soap.SOAPMessage;
import javax.xml.soap.SOAPPart;

public class SOAPResponseServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request,response);
	}

	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// print the request information
		BufferedReader reader=request.getReader();
		String text=null;
		System.out.println("below is the request information");
		while((text=reader.readLine())!=null){
			System.out.println(text);
		}
		
		// return the response
		try {
			response.setHeader("Content-Type", "text/xml");
			MessageFactory messageFactory = MessageFactory.newInstance();
	        SOAPMessage message = messageFactory.createMessage();
			SOAPPart soapPart = message.getSOAPPart();
			SOAPEnvelope envelope = soapPart.getEnvelope();
			SOAPBody body = envelope.getBody();
			// Add content
			body.addTextNode("<message>This is the response.</message>");
			
			// print the response information
			message.writeTo(System.out);
			
			message.writeTo(response.getOutputStream());
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

 

web服务端web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
  <servlet>
    <servlet-name>SOAPResponseServlet</servlet-name>
    <servlet-class>servlets.SOAPResponseServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>SOAPResponseServlet</servlet-name>
    <url-pattern>/servlet/SOAPResponseServlet</url-pattern>
  </servlet-mapping>
</web-app>

 

 测试类test.Main.java

package test;

import util.SOAPUtil;

public class Main {
	public static void main(String[] args) throws Exception {
		String requestXml = "<message>This is a request.</message>";
		String url = "http://localhost:8080/WebServer/servlet/SOAPResponseServlet";
		String responseXml = SOAPUtil.newInstance().fireCall(requestXml, url);
		System.out.println(responseXml);
	}
}

 

Note:发送的request xml消息如下

<SOAP-ENV:Envelope><SOAP-ENV:Header/><SOAP-ENV:Body><message>This is a request.</message></SOAP-ENV:Body></SOAP-ENV:Envelope>

 接收的response xml消息如下

<SOAP-ENV:Envelope><SOAP-ENV:Header/><SOAP-ENV:Body><person><message>This is the response.</message></person></SOAP-ENV:Body></SOAP-ENV:Envelope>

 

案例数据运行流程:

1) 客户端将xml消息装载到http协议中的字节流中,发送到服务器。

2) 服务器解析字节流中信息,并返回数据

3) 客户端解析返回的数据

 

 

分享到:
评论

相关推荐

    SOAP入门

    ### SOAP入门:深入理解与应用 #### 一、SOAP基础知识概览 SOAP(Simple Object Access Protocol)是一种基于XML的信息交换协议,主要用于Web服务中的应用程序间通信。它定义了一种消息格式,以及如何在应用程序...

    WebService入门简单实例(采用AXIS的方式)

    WebService入门简单实例(采用AXIS的方式) WebService是一种基于XML的开放标准,用于在不同系统间交换数据和服务。它允许不同的应用程序、操作系统甚至编程语言之间进行互操作,通过HTTP协议进行通信,实现分布式...

    soap入门(E版)soap入门(E版)

    本教程是SOAP入门的E版,适合对Web服务感兴趣并希望了解SOAP基本概念和技术的人群。 1. 创建和发送简单消息 - **创建消息**:创建一个SOAP消息涉及定义消息的基本结构,包括SOAP Envelope、Header和Body。这些元素...

    axis入门中文文档

    Axis支持多种数据绑定机制,如JAXB(Java Architecture for XML Binding)和SAAJ(SOAP with Attachments API for Java),它们将XML数据自动映射到Java对象,简化了Web服务的开发和使用。 八、安全性与优化 在使用...

    WebService CXF学习-入门篇.pdf

    3. **SAAJ**:SOAP with Attachments API for Java,处理SOAP消息中的附件。 4. **JAX-RS**:Java API for RESTful Web Services,用于创建RESTful服务。 5. **SOAP**:支持1.1和1.2版本,以及WS-I Basic Profile、...

    使用JAX-WS开发WebService入门教程.pdf

    ### 使用JAX-WS开发WebService入门教程 #### 一、准备工作 在开始使用JAX-WS开发WebService之前,首先需要确保开发环境满足以下条件: 1. **Java版本**:需要安装Java SE 1.5或更高版本。这是因为JAX-WS自Java SE...

    axis调用webservice实例,包含jar包

    “包含所需的jar包”意味着这些jar文件包含了Axis运行时库,如axis.jar、wsdl4j.jar、saaj-api.jar、saaj-impl.jar等,它们提供了处理SOAP消息、解析WSDL文件以及生成客户端代码等功能。有了这些库,开发者可以避免...

    Soap Tutorial

    一、SOAP入门概览 SOAP(Simple Object Access Protocol)是一种基于XML的标准协议,用于在分布式环境中交换结构化信息。它被广泛应用于Web服务中,作为通信的基础协议,允许应用程序之间进行数据交换。本文档将引导...

    axis开发[整理].pdf

    这个示例是一个接收姓名并返回问候的Web服务,以此引导读者快速入门Web服务的开发。 【知识点详解】 1. **Web服务基础**:Web服务是一种新型的Web应用程序,具有自适应、自我描述和模块化特点,可以跨Web发布、...

    WebService-CXF学习.doc

    CXF支持多种标准,如JAX-WS、JSR-181、SAAJ、JAX-RS等,以及SOAP 1.1和1.2、WSDL 1.1等协议,并具备WS-Security、WS-Addressing等企业级服务质量(QoS)功能。 CXF支持多种数据绑定和传输方式,如SOAP、REST/HTTP,...

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

    - 支持多种标准和规范,如JAX-WS、JAX-WSA、JSR-181、SAAJ等。 - 支持SOAP 1.1和1.2,以及WS-I Basic Profile、WS-Security、WS-Addressing等。 - 支持WSDL 1.1和2.0,MTOM(Message Transmission Optimization ...

    java学习方向.pdf

    2, Volume I: Fundamentals》是两本值得推荐的入门书籍,它们深入浅出地讲解了Java的基础知识。 当J2SE基础稳固后,可以逐步接触J2EE的相关技术。Web服务相关的JAXP、JAXR、JAX-RPC和SAAJ,这些API用于处理XML,是...

    程序员 杂志\03-05.pdf

    然而,尽管入门门槛低,软件行业的风险同样巨大,成功比率相对较低。文件强调,成功的软件产品必须聚焦于为客户创造价值,即产品须具备实用性,能够解决实际问题或提升效率。这不仅适用于软件产品,也适用于个人职业...

    Axis2精简版jar包

    1. **服务组件模型**:Axis2采用了模块化的设计,将服务分解为可重用的组件,如服务档案(Service Archive, SAAJ)、消息处理器(Message Processor)等。这种组件模型提高了代码的可维护性和可扩展性。 2. **传输...

    WebService_CXF范例.

    【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...

    java学习方向[参考].pdf

    1. Web Service技术:如JAXP(处理XML)、JAXR(访问XML注册表)、JAX-RPC(基于XML的RPC)和SAAJ(SOAP附件API)。 2. 组件模型技术:Java Servlet、JSP(JavaServer Pages)、JSF(JavaServer Faces)、EJB...

    axis-bin-1_4.zip

    这个压缩包主要是为Java开发人员提供了一个快速入门的平台,让他们能够便捷地实现Web服务的开发和测试。 在描述中提到的"axis最新版本",可能是指发布时这个1.4版是Axis的最新稳定版本。然而,需要注意的是,随着...

    axis 开发包和用例.rar

    - **文档**: 可能包括用户指南、API参考和快速入门教程,帮助开发者理解如何使用Axis。 - **构建工具**: 如ant任务,用于构建和部署Web服务。 4. **用例** - **创建服务**: 使用Axis,你可以通过简单的Java类...

Global site tag (gtag.js) - Google Analytics