`

j2ee web service开发--SAAJ 带附件的soap消息

    博客分类:
  • java
 
阅读更多

带附件的soap消息api,其内容很丰富,它是一个允许用soap消息而不是用jax-rpc来调用web service的API .它通过直接创建XML消息来完成web serivce的调用.SOAP API 简化了创建XML的工作. 取自j2ee文档的soap消息的结构图.
saaj-noAttach.gif 
完整的SAAJ客户端程序. 服务器端的程序在j2ee web service开发(一) 里可以找到.没有详细介绍saaj的一些类
的使用.好在它们都有很好的自解释性.
package array;

import javax.xml.soap.*;
import java.net.*;
import java.io.*;
import java.util.*;
import java.text.SimpleDateFormat;
public class SaajClient {
    public SaajClient() {
    }

    public static void main(String[] args) throws Exception {
        SaajClient client = new SaajClient();
        User[] user = new User[2];
        user[0] = new User("张三", "027-88888888", new Date());
        user[1] = new User("lisi", null, new Date());
        saajTest(user);

    }

    private static void saajTest(User[] user) throws MalformedURLException,
            IOException,
            UnsupportedOperationException, SOAPException {
        MessageFactory factory = MessageFactory.newInstance();//SAAJ的根工厂类
        SOAPMessage message = factory.createMessage();
        //SOAPMessage 对象需要一些元素,包括SOAPPart,SOAPEnvelope,SOAPHeader,SOAPBody对象
        //SAAJ通过返回一个新的已经包括这些元素的SOAPMessage对象来简化操作

        SOAPFactory s = SOAPFactory.newInstance();//通用工厂类,创建Name,SOAPElement对象

        Name countUser = s.createName("countUser", "mh", "http://array");
        //Name对象表示一个XML限定名称
        Name arrayOfUser_1 = s.createName("arrayOfUser_1");
        Name xsi = s.createName("xmlns:xsi");
        Name nullAttribute = s.createName("xsi:nil");

        //下面的代码创建soap对象
        SOAPBody body = message.getSOAPBody();
        SOAPBodyElement bodyChildElement = body.addBodyElement(countUser);
        SOAPElement arrayOfUser = bodyChildElement.addChildElement(
                arrayOfUser_1);
      //  arrayOfUser.addAttribute(xsi, "http://www.w3.org/2001/XMLSchema-instance");
        arrayOfUser.addNamespaceDeclaration("xsi","http://www.w3.org/2001/XMLSchema-instance");
        //定义arrayOfUser的 xmlns:xsi属性  该名称空间是XML模式实例命名空间,由XML模式规范定义,它定义了
        //可以在XML文档中使用的属于该命名空间的一些特性.

        for (int i = 0; i < user.length; i++) {
            //需要注意顺序,也就是和复杂类型的sequence元素的顺序对应
            Name valueName = s.createName("value");
            SOAPElement value = arrayOfUser.addChildElement(valueName);
            Name birthday = s.createName("birthDay");
            SOAPElement birthdayElement = value.addChildElement(birthday);

            if (user[i].getBirthDay() == null) {
                birthdayElement.addAttribute(nullAttribute, "1");
            } else {
                //日期类型必须进行格式化
                SimpleDateFormat format= new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
                birthdayElement.addTextNode(format.format(user[i].getBirthDay()));
            }
            Name name = s.createName("name");
            SOAPElement nameElement = value.addChildElement(name);
            if (user[i].getName() == null) {
                //传送空值
                nameElement.addAttribute(nullAttribute, "1");
            } else {
                nameElement.addTextNode(user[i].getName());
            }
            Name phone = s.createName("phone");
            SOAPElement phoneElement = value.addChildElement(phone);
            if (user[i].getPhone() == null) {
                phoneElement.addAttribute(nullAttribute, "1");
            } else {
                phoneElement.addTextNode(user[i].getPhone());
            }

        }

        //发送soap消息
        SOAPConnectionFactory f = SOAPConnectionFactory.newInstance();
        SOAPConnection conn = f.createConnection();
        URL url = new URL("http://localhost:8082/complexType-array/services/CountUser");
        SOAPMessage response = conn.call(message, url);

        SOAPBody soapBody = response.getSOAPBody();
        Iterator it = soapBody.getChildElements();
        while (it.hasNext()) {
            SOAPBodyElement bodyElement = (SOAPBodyElement) it.next();
            String returnValue = bodyElement.getValue();
            System.out.println(bodyElement.getElementName().getLocalName() +
                               "      " + returnValue);
        }


        response.writeTo(System.out);
    }
}

程序向服务器端传送的数据:

POST /complexType-array/services/CountUser HTTP/1.1
SOAPAction: ""
Content-Type: text/xml; charset=UTF-8
User-Agent: Java/1.5.0_03
Host: localhost:8082
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 448

<env:Envelope xmlns:env='http://schemas.xmlsoap.org/soap/envelope/'>
   <env:Header/>
   <env:Body>
      <mh:countUser xmlns:mh='http://array'>
         <arrayOfUser_1 xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'>
            <value>
               <birthDay>2006-11-08T22:36:13</birthDay>
               <name>张三</name>
               <phone>027-88888888</phone>
            </value>
            <value>
               <birthDay>2006-11-08T22:36:13</birthDay>
               <name>lisi</name>
               <phone xsi:nil='1'/>
            </value>
         </arrayOfUser_1>
      </mh:countUser>
   </env:Body></env:Envelope>
从传送的数据来看,就是一个符合soap规范的xml文档.既然是xml文档,也就是说可以用jdom api 来操作它
事实上就是这样,soap api 可以跟 jdom api混合使用.

分享到:
评论

相关推荐

    J2EE Web Services: XML SOAP WSDL UDDI WS-I JAX-RPC JAXR SAAJ JAXP

    8. **SAAJ(SOAP with Attachments API for Java)**:SAAJ是Java中处理SOAP消息的标准API,支持SOAP附件和MIME编码,允许在SOAP消息中传输二进制数据,如图像或文档。 9. **JAXP(Java API for XML Processing)**...

    saaj-api.jar.zip_saaj-api_saaj-api-1.3.jar_saaj-api.jar

    标题"saaj-api.jar.zip_saaj-api_saaj-api-1.3.jar_saaj-api.jar" 提到了几个关键元素:'saaj-api.jar.zip' 是压缩文件的名称,暗示了里面包含的文件与SAJJ(SOAP消息抽象API)有关。'saaj-api' 是一个重复出现的...

    axis.jar,axis-saaj-1.4.jar

    总的来说,"axis.jar"和"axis-saaj-1.4.jar"是Web服务开发的关键组件,它们简化了SOAP消息的处理,支持高效的附件传输,并且提供了强大的工具集来创建和使用Web服务。在Java开发环境中,这些库对于构建基于SOAP的Web...

    saaj访问web服务

    SAAJ (SOAP with Attachments API for Java) 是一个重要的Java API,主要用于处理SOAP消息,特别是那些带有附件的消息。它是由JCP (Java Community Process) 开发的标准,作为JAXM (Java API for XML Messaging) 的...

    EJB 2.1中实现Web Service.doc

    其次,SAAJ(SOAP API with Attachments for Java)则专注于处理带有附件的SOAP消息。SAAJ模仿SOAP消息的结构,并提供有限的消息分发能力,允许在EJB中处理复杂的数据交换。 再者,JAXM(Java API for XML ...

    使用SAAJ 和JAXM的 SOAP客户端及服务

    通过SAAJ,你可以创建、修改和解析SOAP消息,甚至可以处理带有附件的SOAP消息。以下是一些关键的SAAJ概念: 1. **SOAPMessage**: 这是SAAJ的核心类,表示一个完整的SOAP消息,包括头部、主体和可能的附件。 2. **...

    xmldsig.jar,saaj-api-1.3.jar,activation.jar相关jar包资源

    例如,一个基于Java的Web服务客户端可能需要`xmldsig.jar`来验证服务返回的响应是否可信,`saaj-api-1.3.jar`用于处理SOAP请求和响应,而`activation.jar`则帮助处理邮件中的附件。 总结来说,`xmldsig.jar`、`saaj...

    Java SOAP协议

    **SAAJ**:SOAP with Attachments API for Java是Java世界中用于处理带有附件的SOAP消息的一种API。它作为JWSDP(Java Web Services Developer Pack)的一部分,为开发者提供了处理SOAP消息的能力。随着技术的发展,...

    用SAAJ解决SOA集成问题

    【SAAJ(SOAP with Attachments API for Java)】是Java平台上的一个API规范,用于在松散耦合的软件系统中处理基于SOAP协议的XML消息传递,特别适合支持带有附件的SOAP消息。SAAJ提供了创建、发送、接收和处理SOAP...

    saaj.jar包

    - **发送带有附件的SOAP消息**:对于需要传输二进制数据(如图片或文件)的场景,SAAJ支持将这些数据作为SOAP消息的MIME附件发送。 - **错误处理**:当出现`SOAPException`时,可以检查异常信息,找出导致问题的原因...

    学习J2EE

    - SAAJ规范提供了处理SOAP消息的API,支持SOAP1.1和1.2规范的消息处理,特别适用于处理带有附件的SOAP消息。这为开发者提供了一套完整的工具集,用于创建、读取和处理SOAP消息,从而简化了Web服务中SOAP通信的实现...

    wsdl和uddi的资料

    3. **查询UDDI**:介绍如何使用UDDI的查询语言(如FindService和FindBinding)来搜索特定的Web服务。 4. **实例分析**:可能包含具体的UDDI和WSDL配置示例,帮助读者理解实际操作流程。 **Wsdl4j** 是一个Java库,...

    WEB SERVICE 、SOAP所需JAR包

    2. **saaj.jar** - SOAP with Attachments API for Java(SAAJ)是Java平台上的标准API,用于处理SOAP消息,包括头和附件。它实现了SOAP 1.1和SOAP 1.2规范。 3. **wsdl4j.jar** - WSDL 4 Java库提供了对WSDL文档的...

    saaj-soap(需要的jar)

    saaj-soap(需要的jar)

    saaj-api-1.3.jar

    saaj-api-1.3.jar saaj-api-1.3.jar

    使用 Spring-WS 完成的 Web Service (SOAP)

    Spring-WS 强调契约优先的方法,这意味着在开发 Web 服务时,首先定义 WSDL(Web 服务描述语言)文档,然后根据此契约生成服务器端代码。 **契约优先方法** 在契约优先的开发流程中,开发者首先创建 WSDL 文件,该...

    webservice接口调用工具类依赖jar包

    3. **saaj-api.jar** 和 **saaj-impl.jar**:SOAP消息访问API(SAAJ),用于处理SOAP消息和创建SOAP请求。 4. **wsdl4j.jar**:用于解析和操作WSDL文件的库。 5. **activation.jar** 和 **javax.mail.jar**:如果...

    JAVA的WebService支持CXF与SAAJ第三版

    - **SAAJ**:SOAP with Attachments API for Java,提供了构建和解析SOAP消息的能力,特别支持附件传输。 - **特点**: - 更多地暴露了SOAP消息的底层细节,适合需要更多控制权的场景。 - 相比之下,实现更为复杂...

    JAVA6开发WebService (四)——SAAJ调用WebService

    SAAJ是Java平台中用于处理SOAP消息的API,它提供了创建、解析和操作SOAP消息的能力。 首先,理解WebService的基本概念是至关重要的。WebService是一种基于XML的协议,通过HTTP协议传输数据,允许不同系统之间的通信...

Global site tag (gtag.js) - Google Analytics