- 浏览: 1524600 次
- 性别:
- 来自: 厦门
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
调用 web service 时生成soap消息的区别,此区别就会造成调用web service失败。
1、使用Axis 1.4调用wsdl中的接口、参数以及传入消息头,以下方法调用时不会把web service 的目标函数名称包含进SOAP消息里头。
import java.net.URL; import org.apache.axis.client.Stub; import org.apache.axis.message.SOAPHeaderElement; import org.xx.www.schema.parlayx.data.sync.v1_0.local.AuthUserBehaviorRequest; import org.xx.www.schema.parlayx.data.sync.v1_0.local.AuthUserBehaviorResponse; import org.xx.www.schema.parlayx.data.v1_0.NamedParameter; import org.xx.www.schema.parlayx.data.v1_0.NamedParameterList; import org.xx.www.wsdl.parlayx.data.sync.v1_0._interface.UsageAuth; import org.xx.www.wsdl.parlayx.data.sync.v1_0.service.UsageAuthServiceLocator; public class ClientTest_UsageAuth_Other { public static void main(String[] args) { UsageAuthServiceLocator locator = new UsageAuthServiceLocator(); try { String url = "http://xxx:8110/UsageAuthService/services/UsageAuth"; AuthUserBehaviorRequest req = new AuthUserBehaviorRequest(); req.setMSISDN("1"); req.setServiceId("2"); req.setFid(null); NamedParameter np = new NamedParameter(); np.setKey("contentSP"); np.setValue("3"); NamedParameter np1 = new NamedParameter(); np1.setKey("productID"); np1.setValue("1"); NamedParameter np2 = new NamedParameter(); np2.setKey("parentID"); np2.setValue("2"); NamedParameter[] extensionInfo = new NamedParameter[3]; extensionInfo[0] = np; extensionInfo[1] = np1; extensionInfo[2] = np2; req.setExtensionInfo(new NamedParameterList(extensionInfo)); UsageAuth inter = locator.getUsageAuth(new URL(url)); SOAPHeaderElement headerElement = new SOAPHeaderElement("http://xx/schema/common/v2_1", "RequestSOAPHeader"); headerElement.addChildElement("spId").addTextNode("a"); headerElement.addChildElement("spPassword").addTextNode("a"); headerElement.addChildElement("serviceId").addTextNode("a"); headerElement.addChildElement("timeStamp").addTextNode("a"); ((Stub) inter).setHeader(headerElement); try { AuthUserBehaviorResponse rsp = inter.authUserBehavior(req); System.out.println(rsp.getResult() + "--------------------------"); System.out.println(rsp.getResultDescription() + "--------------------------"); } catch (Exception e) { e.printStackTrace(); } } catch (Exception e) { e.printStackTrace(); } } }
产生的SOAP消息为:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v2="http://www.xx.com.cn/schema/common/v2_1" xmlns:loc="http://www.xx.org/schema/xx/xx/sync/v1_0/a"> <soapenv:Header> <RequestSOAPHeader xmlns="http://www.xx.com.cn/schema/common/v2_1"> <spId>s</spId> <spPassword>a</spPassword> <serviceId>a</serviceId> <timeStamp>a</timeStamp> </RequestSOAPHeader> </soapenv:Header> <soapenv:Body> <loc:AuthUserBehaviorRequest> <loc:MSISDN>s</loc:MSISDN> <loc:serviceId>s</loc:serviceId> <loc:Fid></loc:Fid> <loc:extensionInfo> <namedParameters> <key>contentSP</key> <value>ss</value> </namedParameters> <namedParameters> <key>productID</key> <value>sa</value> </namedParameters> <namedParameters> <key>parentID</key> <value>sa</value> </namedParameters> </loc:extensionInfo> </loc:AuthUserBehaviorRequest> </soapenv:Body> </soapenv:Envelope>
2、把调用的web service的目标函数名称包含在SOAP消息中。
import java.util.Calendar; import javax.xml.namespace.QName; import javax.xml.rpc.ParameterMode; import javax.xml.soap.SOAPElement; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.SOAPHeaderElement; import org.xx.www.schema.parlayx.data.sync.v1_0.local.AuthUserBehaviorRequest; import org.xx.www.schema.parlayx.data.sync.v1_0.local.AuthUserBehaviorResponse; import org.xx.www.schema.parlayx.data.v1_0.NamedParameter; import org.xx.www.schema.parlayx.data.v1_0.NamedParameterList; import com.wichina.common.DateUtils; public class ClientTest_UsageAuth { /** * @param args */ public static void main(String[] args) { try { String endpointURL = "http://xx:8110/UsageAuthService/services/UsageAuth"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpointURL)); call.setOperationName(new QName("http://aa/schema/parlayx/data/sync/v1_0/local", "AuthUserBehavior"));// 设置操作的名称。 // 添加消息头 SOAPHeaderElement requestSOAPHeader = new SOAPHeaderElement("http://ax/schema/common/v2_1", "RequestSOAPHeader"); SOAPElement spId = requestSOAPHeader.addChildElement("spId"); spId.addTextNode("1"); SOAPElement serviceId = requestSOAPHeader.addChildElement("serviceId"); serviceId.addTextNode("1"); SOAPElement timeStamp = requestSOAPHeader.addChildElement("timeStamp"); timeStamp.addTextNode(DateUtils.getDate(Calendar.getInstance().getTime(), "yyyyMMddHHmmss").toString()); SOAPElement spPassword = requestSOAPHeader.addChildElement("spPassword"); spPassword.addTextNode("2"); // SOAPElement fa = requestSOAPHeader.addChildElement("FA", "tns"); // fa.addTextNode("13799265585"); QName qnParam = new QName("http://xx/schema/parlayx/data/sync/v1_0/local", "p_qn"); call.addHeader(requestSOAPHeader); call.setReturnType(qnParam);// 返回的数据类型 // 设置请求参数 NamedParameter[] extensionInfoReq = new NamedParameter[3]; NamedParameter namedParameter0 = new NamedParameter(); namedParameter0.setKey("contentSP"); namedParameter0.setValue("a"); extensionInfoReq[0] = namedParameter0; NamedParameter namedParameter1 = new NamedParameter(); namedParameter1.setKey("productID"); namedParameter1.setValue("x"); extensionInfoReq[1] = namedParameter1; NamedParameter namedParameter2 = new NamedParameter(); namedParameter2.setKey("parentID"); namedParameter2.setValue("x"); extensionInfoReq[2] = namedParameter2; AuthUserBehaviorRequest request = new AuthUserBehaviorRequest(); request.setMSISDN("a"); request.setServiceId("x"); request.setExtensionInfo(new NamedParameterList(extensionInfoReq)); call.addParameter("AuthUserBehaviorRequest", qnParam, ParameterMode.IN);// 参数的类型 AuthUserBehaviorResponse rsp = (AuthUserBehaviorResponse) call.invoke(new Object[] { request });// 执行调用 System.out.println(rsp.getResult()); System.out.println(rsp.getResultDescription()); NamedParameterList extensionInfoList = rsp.getExtensionInfo(); NamedParameter[] extensionInfos = extensionInfoList.getNamedParameters(); if (extensionInfos != null) { for (int i = 0; i < extensionInfos.length; i++) { System.out.println(extensionInfos[i].getKey() + "=>" + extensionInfos[i].getValue()); } } } catch (Exception e) { e.printStackTrace(); } } }
生成的消息:
<?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:Header> <ns1:RequestSOAPHeader soapenv:actor="http://schemas.xmlsoap.org/soap/actor/next" soapenv:mustUnderstand="0" xmlns:ns1="http://xx/schema/common/v2_1"> <ns1:spId>x</ns1:spId> <ns1:serviceId>x</ns1:serviceId> <ns1:timeStamp>x</ns1:timeStamp> <ns1:spPassword>x</ns1:spPassword> </ns1:RequestSOAPHeader> </soapenv:Header> <soapenv:Body> <ns2:AuthUserBehavior soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns2="http://xx/schema/parlayx/data/sync/v1_0/local"> <AuthUserBehaviorRequest href="#id0" /> </ns2:AuthUserBehavior> <multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:AuthUserBehaviorRequest" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:ns3="http://xx/schema/parlayx/data/sync/v1_0/local"> <MSISDN xsi:type="xsd:string">x</MSISDN> <serviceId xsi:type="xsd:string">x</serviceId> <Fid xsi:type="xsd:string" xsi:nil="true" /> <extensionInfo href="#id1" /> </multiRef> <multiRef id="id1" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns4:NamedParameterList" xmlns:ns4="http://xx/schema/parlayx/data/v1_0" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <namedParameters href="#id2" /> <namedParameters href="#id3" /> <namedParameters href="#id4" /> </multiRef> <multiRef id="id3" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns5:NamedParameter" xmlns:ns5="http://xx/schema/parlayx/data/v1_0" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <key xsi:type="xsd:string">productID</key> <value xsi:type="xsd:string">x</value> </multiRef> <multiRef id="id4" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns6:NamedParameter" xmlns:ns6="http://xx/schema/parlayx/data/v1_0" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <key xsi:type="xsd:string">parentID</key> <value xsi:type="xsd:string">x</value> </multiRef> <multiRef id="id2" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns7:NamedParameter" xmlns:ns7="http://xx/schema/parlayx/data/v1_0" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"> <key xsi:type="xsd:string">contentSP</key> <value xsi:type="xsd:string">x</value> </multiRef> </soapenv:Body> </soapenv:Envelope>
第1种方法与第2种方法明显的区别在于,调用时有没有包含调用的web service函数名称。
发表评论
-
xStream开发HTTP的XML内容
2013-07-03 09:58 10531、编写自定义XPPDriver代码: package ... -
AXIS2 开发示例
2013-06-28 17:10 1042实体类: package com.mport.entity ... -
HttpURLConnection or URLConnection post xml content to web server
2013-05-31 01:56 2058客户端示例1: package client; ... -
Axis2 体系结构
2012-06-19 12:34 1003前言 结构都是它本身所能产生效率的结果。任何一个成功 ... -
Axis 1.4 基于wss4j UsernameToken 的安全验证
2011-12-30 17:24 2462利用以下的wsdl文件生成客户端及服务端代码: < ... -
wss4j和axis2实现WS-Security(2)
2011-12-29 12:13 1082转自:http://hi.baidu.com/zhaopeng ... -
wss4j和axis2实现WS-Security(1)
2011-12-29 11:31 1192转自:http://hi.baidu.com/zhaopeng ... -
Using WS-Security with Axis (Java) v2006
2011-12-23 11:24 1553转自:http://www.arcwebservices.co ... -
[Java] Testing SOAP Headers with a Simple Axis Handler
2011-12-23 11:02 1154转自:http://weblogs.asp.net/jdanf ... -
Axis 1.4 将WSDL文件逆向后String数组只变成String
2011-12-22 08:26 2028这些天在对一个项目扩展功能时使用Axis 1. ... -
实现Axis web service 的数字证书认证(CLIENT-CERT)
2011-12-09 12:28 3726本文参考自:J2EE Web服务开发系列之十二: 实现安全的 ... -
实现Axis web service 的基本方式认证(BASIC)
2011-12-09 10:41 2185本文参考自:J2EE Web服务开发系列之十二: 实现安全的A ... -
Axis 1.4 上传二进制文件(base64Binary)
2011-04-22 16:32 2037服务端代码: package samples.userg ... -
Axis 1.4 WSDL2Java、Java2WSDL的使用
2011-04-21 16:52 3439d:>java -classpath % ... -
在axis1.4中传递复杂类型数组参数(ArrayMapping)
2011-04-21 11:50 3736Axis1.4环境配置: 配置一些工具在命 ... -
axis2 学习(rpc)
2011-04-15 16:03 2146刚开始学习时,可不必考虑某些包的功能。我当前是把所有的包都导进 ... -
xfire 学习
2011-04-14 13:45 821我 -
学习dom4j的jaxb实现(半成品)
2011-03-08 16:47 1276primer.xml <?xml version=&q ... -
使用dom4j修改xml元素
2011-02-21 15:47 12262预先编写一个xml文件book ... -
使用 dom4j编写一个简单输出到文件的例子
2011-02-21 15:03 1093代码编写是参考这篇文档: http://blog.csd ...
相关推荐
在提供的压缩包文件中,`05_soap`可能包含关于如何创建和发送SOAP消息的示例代码,`06_wsdl_client`和`05_soap_client`可能是SOAP客户端的实现,`06_wsdl`可能是一个或多个WSDL文档,用于描述服务接口。通过这些文件...
7. **示例和文档**:为了便于学习和使用,SOAP SDK通常包含示例代码和详细的用户文档,解释如何使用SDK的各个功能,并提供最佳实践指导。 在本例中,"soapsdk.exe"可能是一个安装程序,用于在用户的系统上安装SOAP ...
至于标签中的“源码”和“工具”,这可能指的是文章探讨了如何使用编程语言(如Java、C#)实现SOAP通信的代码示例,或者介绍了某些帮助处理SOAP的开发工具。这些工具可能包括代码生成器,用于从WSDL(Web服务描述...
1. **WSDL工具**:如Apache CXF的wsdl2java工具,可以自动生成Java客户端和服务端代码,包括处理SOAP头的类。 2. **SOAPUI**:强大的SOAP测试工具,允许创建、编辑和调试SOAP消息,包括头部信息。 ### 六、源码实践...
4. **支持SOAP**:如果需要生成SOAP报文,用户需要提供SOAP消息的相关信息,如SOAP Envelope、Header和Body的结构,工具会将XML内容嵌入到SOAP框架中。 5. **测试和调试**:生成的SOAP报文可以用于调用Web服务,...
你可以使用JMeter的“SOAP/WSDL测试向导”导入WSDL,自动生成SOAP请求。 5. **配置断言**:断言用于验证服务器返回的结果是否符合预期。例如,你可以添加“响应断言”,检查响应中是否包含特定文本或XML元素。 6. ...
5. **SOAP消息示例**: ```xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <!-- Header content goes here --> </soap:Header> <soap:Body> <!-- Operation ...
1. **Envelope**:这是SOAP消息的根元素,定义了消息的边界。它告诉接收方这是一个SOAP消息。 2. **Header**:可选部分,包含与消息处理相关的附加信息,如安全认证、路由信息等。 3. **Body**:必须部分,包含实际...
总的来说,这个压缩包可能包含SOAP基本概念的介绍、ASIS2的详细规范、SOAP消息解析示例代码、WSDL的编写指导,以及可能的调试和测试工具的使用教程。通过学习这些内容,你可以深入理解SOAP协议,掌握如何创建、解析...
2. 使用`MessageFactory`加载SOAP消息的XML字符串或流,生成`SOAPMessage`实例。 3. 访问`SOAPBody`以获取或修改业务数据。可以使用`SOAPBody`的`getFirstBody()`或`getChildElements()`方法来遍历和操作元素。 4. ...
- `SOAPPart`包含整个SOAP消息,`SOAPEnvelope`代表消息的信封,`SOAPBody`则包含业务逻辑数据。 6. **SOAP异常处理**: - SOAP错误通常通过SOAP Fault来表示,它是一个包含错误信息的SOAP消息。 - 在Java中,`...
4. **SOAP消息示例**:SOAP消息通常包含XML格式的数据,例如请求或响应。一个简单的SOAP消息例子可能如下: ```xml <soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"> <soap:Header> <!-- ...
"gsoap"是其中的一个具体实现,是一个开源的SOAP生成器和C/C++库,能够自动生成处理SOAP消息的代码。gsoap不仅支持SOAP 1.1和1.2,还支持WSDL(Web Services Description Language),允许开发者从WSDL文件自动生成...
总结来说,Microsoft SOAP Toolkit 3.0是开发和利用Web服务的重要工具,它简化了SOAP消息的处理和客户端代理的生成,为.NET和COM开发者提供了强大的支持。通过学习和掌握这个工具包,开发者可以更高效地构建跨平台的...
SOAP是一种用于交换结构化信息的标准协议,XML则是其消息格式的基础。当我们处理SOAP XML报文时,有时会遇到需要转换XML节点名的情况,例如将节点名的首字母从小写转换为大写。以下将详细探讨这个主题。 首先,理解...
gSOAP工具集可以自动生成客户端和服务端代码,简化SOAP消息的序列化和反序列化。 9. **SOAP_csharp**:在C#中,使用`System.ServiceModel`命名空间可以创建WCF(Windows Communication Foundation)服务,它提供了...
然而,由于明确要求生成的知识点应围绕标题和描述中的内容,即SOAP及XML跨平台Web服务开发技术,我们将基于这些关键词展开详细讨论。 ### SOAP:XML跨平台Web Service开发技术 #### 1. 简介 SOAP(Simple Object ...
这部分代码通常包括错误检测、错误代码和错误消息的生成。 5. **线程安全**:对于多线程应用,SOAP协议栈需要确保线程安全,避免在并发环境下出现数据竞争和内存泄漏问题。源代码中可能会包含互斥锁、条件变量等...
2. **SOAP消息结构**:SOAP消息通常包括一个SOAP头(可选)和一个SOAP主体,两者都是XML格式。理解这些元素的结构是构建和解析SOAP消息的基础。 3. **Qt网络模块**:Qt的网络模块(如QNetworkAccessManager和...
通常,这种SDK会提供必要的库和工具,使PB9能够生成和解析SOAP消息。 在PB9中调用Web服务的过程包括以下几个步骤: 1. **配置Web引用**:首先,开发者需要在PB9中添加Web服务的引用,这通常涉及输入Web服务的WSDL...