SAAJ带附件的soap消息如何理解
发表于:2025-02-09 作者:千家信息网编辑
千家信息网最后更新 2025年02月09日,今天就跟大家聊聊有关SAAJ带附件的soap消息如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。带附件的soap消息api,其内容很丰富
千家信息网最后更新 2025年02月09日SAAJ带附件的soap消息如何理解
今天就跟大家聊聊有关SAAJ带附件的soap消息如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
带附件的soap消息api,其内容很丰富,它是一个允许用soap消息而不是用jax-rpc来调用web service的API .它通过直接创建XML消息来完成web serivce的调用.SOAP API 简化了创建XML的工作. 取自j2ee文档的soap消息的结构图.
没有详细介绍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 < name>lisi < phone xsi:nil='1'/> < /value> < /arrayOfUser_1> < /mh:countUser> < /env:Body>
从传送的数据来看,就是一个符合soap规范的xml文档.既然是xml文档,也就是说可以用jdom api 来操作它
事实上就是这样,在J2EE web service开发中,soap api 可以跟 jdom api混合使用。
看完上述内容,你们对SAAJ带附件的soap消息如何理解有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
消息
对象
内容
文档
附件
元素
空间
也就是
名称
就是
工厂
数据
模式
类型
顺序
张三
复杂
也就是说
事实
事实上
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
服务器装iis
服务器安全点位如何介绍
安徽又又网络技术有限公司位置
网易我的世界模组导入服务器
企业服务器故障怎么解决
做一个数据库和客户端
请启动服务器管理器 或使用
一个软件开发项目完整的实例
网络安全一句话心得
直播平台怎么配置服务器
南昌立得软件开发有限公司
数据库为什么标识符无效
计算机与网络安全书
局网络安全培训简报
云服务器装盗版数据库
博士网络技术公司
数据库建索引的标准
大学答案君数据库不挂科
服务器禁用usb
srs服务器管理
网络安全知识竞赛好卡
软件开发做到35岁的多吗
php 怎样登陆数据库连接
lr 监控服务器
网络安全属于宪法嘛
魔兽世界怀旧永久60服务器
软件开发cmmi5申请条件
台式机网络安全
关系数据库查询处理
能否给出嵌入式软件开发流程