SAAJ带附件的soap消息如何理解
发表于:2025-11-10 作者:千家信息网编辑
千家信息网最后更新 2025年11月10日,今天就跟大家聊聊有关SAAJ带附件的soap消息如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。带附件的soap消息api,其内容很丰富
千家信息网最后更新 2025年11月10日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安全错误
数据库的锁怎样保障安全
气象系统网络安全建设方案
软件开发销售知乎
学院网络安全管理工作领导小组
游戏软件开发到哪学
守护网络安全人民应该怎么做
广东猎搜网络技术有限公司
一度软件开发
软件开发过程有哪些模式
数据库执行效率
国外软件开发技术网站
网络安全周主题知识
选修数据库技术与应用
国家网络安全主题班队教案
苹果手机软件开发者信任
vf数据库说课
在南京软件开发月薪2万难吗
数据库bda
城市数据库下载
服务器内部硬件结构设计
怎么实现两台服务器时间同步
厦门乐麦网络技术有限公司
吃鸡为什么出现服务器繁忙
数据库操作的并集
达梦数据库整表迁移
思科网络技术
中国网络安全产业统计报告发布
agent 软件开发方法
维护国家网络安全10句金句
如何修改数据库表中一个值
萍乡市小康网络技术有