手工构造和解析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#进行语法分析,并根据栈的变化状态输出分析过程。
本篇文章将深入探讨在手工创建SOAP消息时如何有效地管理命名空间,并以Java环境下的Web服务开发为例,提供实用技巧和窍门。 首先,了解XML命名空间的基本概念。命名空间是一个URI(Uniform Resource Identifier),...
在本主题中,我们将深入探讨如何手工构造一个针对C语言的词法分析器。 首先,我们需要理解C语言的基本语法元素,包括关键字、标识符、常量、运算符和分隔符等。C语言的关键字如`if`、`else`、`for`等,它们在词法...
在这个项目中,我们专注于手工构造一个C- Minus的词法分析器。词法分析器,也称为扫描器,是编译器的第一阶段,它将源代码分解成一个个有意义的符号,这些符号被称为“标记”(tokens),为后续的语法分析和语义分析...
在提供的"手工构造C-语言的词法分析器实验报告.docx"文件中,应详细记录了实验过程、遇到的问题及解决方案,可能还包含了最终实现的词法分析器代码片段和测试案例。通过这样的实践,可以深入理解词法分析的过程,并...
实验三 手工构造预测语法分析程序(必修) 一、实验目的 了解预测分析器的基本构成,掌握自顶向下的预测语法分析程序的手工构造方法。 二、实验内容 已知文法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语言的词法分析器是一项涉及语言理解、状态机设计、数据结构和编程技巧的综合性任务。通过这个过程,不仅可以深入了解编译器的工作原理,还能提升C/C++编程和问题解决的能力。
实验一 手工构造简单词法分析程序(必修) 一、实验目的 了解词法分析程序的基本构造原理,掌握简单词法分析程序的手工构造方法。 二、实验内容 对从键盘输入或从文件读入的形如: “const count=10,sum=81.5,char...
sql注入,sql盲注,手工注入命令详解,详细描述手工注入从判断注入点到查询数据库内容。
原创:手工解析115网盘下载地址 适合最新的2.1.11.125解析
提供的"手工注入详解"文档可能涵盖了上述概念的实际案例、技巧和防御策略。建议详细阅读并理解每个部分,以提高对数据库安全的理解和防护能力。 总之,理解和防范手工注入对于任何涉及数据库交互的应用程序都是至...
SOAP消息通常包含三个主要部分:Header、Body和Envelope。Header用于传递与消息处理相关的元数据,Body包含实际的服务调用或响应,而Envelope则包裹整个消息,定义了消息的结构。 在Java中,Apache SOAP库提供了...
ORACLE数据库手工注入详解
【C语言词法分析器构造实验报告】 在计算机科学领域,编译器是将源代码转换为目标代码的关键组件。在编译器设计中,词法分析是编译过程的第一步,它将源代码分解成一系列有意义的符号或标记,称为Token。本实验报告...