`
fan
  • 浏览: 143436 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

手工构造和解析SOAPEnvelope

阅读更多
手工构造和解析web service客户端访问soap包,仅用于理解wsdl中的相关概念,实际可以用axis的wsdl2java生成同功能的代码。源代码如下:
 
package com.fancy.ws.client;
 
import java.util.Iterator;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import javax.xml.soap.Name;
import javax.xml.soap.SOAPBody;
import javax.xml.soap.SOAPBodyElement;
import javax.xml.soap.SOAPElement;
import javax.xml.soap.SOAPHeader;
import javax.xml.soap.SOAPHeaderElement;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.client.ServiceFactory;
import org.apache.axis.message.SOAPEnvelope;
/**
 * 提供ws访问方法的类
 * @author fancy
 *
 */
public class UIServiceSoapStub {
 private static String TARGET_NAMESPACE = "http://example.com/";
 private static String endpointURL = "http://example.com/ui/uiservice";
 private static String service = "uiService";
 
 /**
  * 创建远程方法调用
  * @return
  * @throws ServiceException
  */
 public Call createCall() throws ServiceException {
  System.setProperty("javax.xml.rpc.ServiceFactory",
    "org.apache.axis.client.ServiceFactory");
  ServiceFactory factory = (ServiceFactory) ServiceFactory
    .newInstance();
  QName serviceName = new QName(TARGET_NAMESPACE, service);
  Service service = (Service) factory
    .createService(serviceName);
  Call call = (Call) service.createCall();
  call.setTargetEndpointAddress(endpointURL);
  return call;
 }
 
 /**
  * 构造soap信息封装
  * @return
  * @throws Exception
  */
 public SOAPEnvelope constructSOAPEnvelope() throws Exception {
  org.apache.axis.message.SOAPEnvelope env = new org.apache.axis.message.SOAPEnvelope();
  return env;
 }
 
 /**
  * 构造soap信息头
  * @param envelope
  * @throws Exception
  */
 public void constructHeader(SOAPEnvelope envelope) throws Exception {
  SOAPHeader header = envelope.getHeader();
  Name _AuthenticationName = envelope.createName("Authentication","",TARGET_NAMESPACE);
  SOAPHeaderElement headerElement = header
    .addHeaderElement(_AuthenticationName);
  headerElement.setMustUnderstand(true);
  SOAPElement _Username = headerElement.addChildElement("Username");
  _Username.addTextNode("user123456");
  SOAPElement _Password = headerElement.addChildElement("Password");
  _Password.addTextNode("jngrhdsda");
 }
 
/**
  * 构造soap信息体
  * @param envelope
  * @param mobileNo
  * @throws Exception
  */
 public void constructSearchUserBody(SOAPEnvelope envelope, String mobileNo) throws Exception {
  SOAPBody body = envelope.getBody();
  Name bodyRootElementName = envelope.createName("SearchUser","",TARGET_NAMESPACE);
  SOAPBodyElement bodyRootElement = body
    .addBodyElement(bodyRootElementName);
  SOAPElement _mobileNo = bodyRootElement.addChildElement("mobileNo");
  _mobileNo.addTextNode(mobileNo);
 }
 
/**
   * 查询用户
  * @param mobileNo
  * @return UserInfo 查询到的用户信息
  * @throws Exception
  */
 public UserInfo searchUser(String mobileNo) throws Exception {
   SOAPEnvelope env = this.constructSOAPEnvelope();
   this.constructHeader(env);
   this.constructSearchUserBody(env,mobileNo);
   Call call = this.createCall();
   call.setSOAPActionURI("http://example.com/SearchUser");
   SOAPEnvelope result = call.invoke(env);
  
   Name _SearchUserResponseName = result.createName("SearchUserResponse","",TARGET_NAMESPACE);
   Name _SearchUserResultName = result.createName("SearchUserResult","",TARGET_NAMESPACE);
   Name _StatusName = result.createName("Status","",TARGET_NAMESPACE);
   Name _IDName = result.createName("ID","",TARGET_NAMESPACE);
   Name _NickNameName = result.createName("NickName","",TARGET_NAMESPACE);
  
   SOAPBody soapBody = result.getBody();
   Iterator it = soapBody.getChildElements(_SearchUserResponseName);
   SOAPElement _SearchUserResponse = (SOAPElement)it.next();
  
   it = _SearchUserResponse.getChildElements(_SearchUserResultName);
   SOAPElement _SearchUserResult = (SOAPElement)it.next();
  
   it = _SearchUserResult.getChildElements(_StatusName);
   SOAPElement _Status = (SOAPElement)it.next();
   String status = _Status.getValue();
  
   it = _SearchUserResult.getChildElements(_IDName);
   SOAPElement _ID = (SOAPElement)it.next();
   String ID = _ID.getValue();
  
   it = _SearchUserResult.getChildElements(_NickNameName);
   SOAPElement _NickName = (SOAPElement)it.next();
   String nickName = _NickName.getValue();
   
   UserInfo ui = new UserInfo(status,ID,nickName);
  
   return ui;
  }
分享到:
评论

相关推荐

    手工构造简单词法分析程序

    手工构造简单词法分析程序,编译原理里面的,程序完美运行,是用VS2013写的 了解词法分析程序的基本构造原理,掌握简单词法分析程序的手工构造方法。 1、输入的常量说明串,要求最后以分号作结束标志; 2、根据输入...

    编译原理及实践手工构造词法分析器

    本项目“编译原理及实践手工构造词法分析器”聚焦于手动构建词法分析器这一核心技能,旨在帮助学习者深入理解编译器的工作机制,并通过实践提升对这一领域的掌握。 词法分析器,也被称为扫描器或词法分析程序,是...

    手工构造预测语法分析程序

    已知文法G[S]: S->AT A->BU T->+AT|$ U->*BU|$ B->(S)|m 其中,$表示空串。对该文法构造预测分析表,并手工构造预测分析程序,对输入串m+m*m#进行语法分析,并根据栈的变化状态输出分析过程。

    Web 服务编程技巧和窍门: 手工创建的 SOAP 消息中命名空间的处理

    本篇文章将深入探讨在手工创建SOAP消息时如何有效地管理命名空间,并以Java环境下的Web服务开发为例,提供实用技巧和窍门。 首先,了解XML命名空间的基本概念。命名空间是一个URI(Uniform Resource Identifier),...

    手工构造C-语言的词法分析器

    在本主题中,我们将深入探讨如何手工构造一个针对C语言的词法分析器。 首先,我们需要理解C语言的基本语法元素,包括关键字、标识符、常量、运算符和分隔符等。C语言的关键字如`if`、`else`、`for`等,它们在词法...

    c - minus手工构造词法分析器

    在这个项目中,我们专注于手工构造一个C- Minus的词法分析器。词法分析器,也称为扫描器,是编译器的第一阶段,它将源代码分解成一个个有意义的符号,这些符号被称为“标记”(tokens),为后续的语法分析和语义分析...

    手工构造C-语言的词法分析器.zip

    在提供的"手工构造C-语言的词法分析器实验报告.docx"文件中,应详细记录了实验过程、遇到的问题及解决方案,可能还包含了最终实现的词法分析器代码片段和测试案例。通过这样的实践,可以深入理解词法分析的过程,并...

    LL(1) 手工构造预测语法分析程序

    实验三 手工构造预测语法分析程序(必修) 一、实验目的 了解预测分析器的基本构成,掌握自顶向下的预测语法分析程序的手工构造方法。 二、实验内容 已知文法G[S]: S->AT A->BU T->+AT|$ U->*BU|$ B->(S)|m 其中...

    手工构造的词法分析器

    编译原理实验课的词法分析器 int SearchKeyWord(){ for(q=0;q;q++){ if(strcmp(strToken,KeyWord[q])==0) return q;//是关键字 if(q==32) return -1;//是字符串 } }

    编译原理:手工构造TINY语言的词法分析器.zip

    总的来说,手工构造TINY语言的词法分析器是一项涉及语言理解、状态机设计、数据结构和编程技巧的综合性任务。通过这个过程,不仅可以深入了解编译器的工作原理,还能提升C/C++编程和问题解决的能力。

    实验一  手工构造简单词法分析程序(MFC)

    实验一 手工构造简单词法分析程序(必修) 一、实验目的 了解词法分析程序的基本构造原理,掌握简单词法分析程序的手工构造方法。 二、实验内容 对从键盘输入或从文件读入的形如: “const count=10,sum=81.5,char...

    手工注入语句详解.txt

    sql注入,sql盲注,手工注入命令详解,详细描述手工注入从判断注入点到查询数据库内容。

    手工解析115网盘下载地址

    原创:手工解析115网盘下载地址 适合最新的2.1.11.125解析

    mssql,access,mysql手工注入详解

    提供的"手工注入详解"文档可能涵盖了上述概念的实际案例、技巧和防御策略。建议详细阅读并理解每个部分,以提高对数据库安全的理解和防护能力。 总之,理解和防范手工注入对于任何涉及数据库交互的应用程序都是至...

    apache soap的hello例子

    SOAP消息通常包含三个主要部分:Header、Body和Envelope。Header用于传递与消息处理相关的元数据,Body包含实际的服务调用或响应,而Envelope则包裹整个消息,定义了消息的结构。 在Java中,Apache SOAP库提供了...

    ORACLE数据库手工注入详解.doc

    ORACLE数据库手工注入详解

    C语言词法分析器构造实验报告

    【C语言词法分析器构造实验报告】 在计算机科学领域,编译器是将源代码转换为目标代码的关键组件。在编译器设计中,词法分析是编译过程的第一步,它将源代码分解成一系列有意义的符号或标记,称为Token。本实验报告...

Global site tag (gtag.js) - Google Analytics