快速业务通道

用JAXM开发Web服务 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
PBody body = envelope.getBody();   // AttachmentPart attachment = msg.createAttachmentPart(); msg.saveChanges();    …   }   catch(Exception e)   {   e.printStackTrace();   return null;   } } …

可以看出创建消息的步骤,首先通过MessageFactory来创建一个消息实例,然后依次创建SOAPEnvelope、SOAPHeader、SOAPBody、AttachmentPart,最后调用msg.saveChanges()来保存消息的变化。

在SOAP消息里增加数据

在SOAP消息里增加数据如例程12所示。

例程12 往SOAP消息里增加数据

//创建名字空间 Name bodyName=envelope.createName("books",target,"http://hellking.webservice.com");   //增加body元素 SOAPBodyElement gpp=body.addBodyElement(bodyName);   if(category!=null)   {    //增加category gpp.addChildElement("category").addTextNode(category);   }   if(name!=null)   {    gpp.addChildElement("name").addTextNode(name);   }   msg.saveChanges();   return msg;

如果例程11中传入的category参数不为空,那么创建好的消息结构应该如例程13所示。

用JAXM开发Web服务(10)

时间:2011-02-07 IBM 陈亚强

例程13 客户端创建的消息的结构

<?xml version="1.0" encoding="UTF-8"?> <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <soapenv:Body>   <GetBookByCategory:books xmlns:GetBookByCategory="http://hellking.webservice.com">   <GetBookByCategory:category>computer</GetBookByCategory:category>   </GetBookByCategory:books> </soapenv:Body> </soapenv:Envelope>

注意上面的computer为客户端要查询的参数。如果觉得上面填充消息的过程过于复杂,我们也可以从文件填充消息内容,如例程14所示。

例程14 从文件填充消息内容

import javax.xml.soap.SOAPElement; import java.io.FileInputStream; import javax.xml.transform.stream.StreamSource; … StreamSource preppedMsgSrc = new StreamSource(          new FileInputStream("e://msgs//book_getBycategory.msg"));      soapPart.setContent(preppedMsgSrc);

可以看出,从文件里填充消息比较快速。这两种方法各有所长,因为如果客户端的请求的种类特别多的话,特别是请求带有参数的话,那么我们要为每一种请求都预先写一个SOAP消息文件,可能是不符合实际的;但是如果客户端请求的类型比较固定,那么事先编写好SOAP消息然后再调用不失是一种好的选择。

发送消息

发送消息相对比较简单,首先要获得一个Endpoint,这个Endpoint就是要发送的消息的目标(也就是接收消息Servlet的url),然后就发送消息,如例程15所示。

例程15 发送SOAP消息

EndpointLocator locator=new EndpointLocator(); … try { SOAPMessage msg=createMessage("GetBookByCategory",null,category);    String endpoint=locator.getBookByCategory_Endpoint(); SOAPMessage reply=con.call(msg , new URL(endpoint));    … } …

EndpointLocator是终端定位器,调用getBookByCategory_Endpoint()它返回的结果将是"http://localhost:8080/jaxm_jaxrpc/listbycategory",这个地址就是ListByCategory Servlet的RUL,更据不同的

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号