`
conkeyn
  • 浏览: 1523086 次
  • 性别: Icon_minigender_1
  • 来自: 厦门
社区版块
存档分类
最新评论

生成SOAP消息示例

 
阅读更多

 

调用 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函数名称。

 

 

 

分享到:
评论

相关推荐

    SOAP消息和WSDL

    在提供的压缩包文件中,`05_soap`可能包含关于如何创建和发送SOAP消息的示例代码,`06_wsdl_client`和`05_soap_client`可能是SOAP客户端的实现,`06_wsdl`可能是一个或多个WSDL文档,用于描述服务接口。通过这些文件...

    SOAP消息处理包

    7. **示例和文档**:为了便于学习和使用,SOAP SDK通常包含示例代码和详细的用户文档,解释如何使用SDK的各个功能,并提供最佳实践指导。 在本例中,"soapsdk.exe"可能是一个安装程序,用于在用户的系统上安装SOAP ...

    SOAP消息格式

    至于标签中的“源码”和“工具”,这可能指的是文章探讨了如何使用编程语言(如Java、C#)实现SOAP通信的代码示例,或者介绍了某些帮助处理SOAP的开发工具。这些工具可能包括代码生成器,用于从WSDL(Web服务描述...

    实现隐式和显式 SOAP 消息头

    1. **WSDL工具**:如Apache CXF的wsdl2java工具,可以自动生成Java客户端和服务端代码,包括处理SOAP头的类。 2. **SOAPUI**:强大的SOAP测试工具,允许创建、编辑和调试SOAP消息,包括头部信息。 ### 六、源码实践...

    根据excel表格生成xml报文,支持soap。

    4. **支持SOAP**:如果需要生成SOAP报文,用户需要提供SOAP消息的相关信息,如SOAP Envelope、Header和Body的结构,工具会将XML内容嵌入到SOAP框架中。 5. **测试和调试**:生成的SOAP报文可以用于调用Web服务,...

    Jmeter进行soap接口测试脚本示例

    你可以使用JMeter的“SOAP/WSDL测试向导”导入WSDL,自动生成SOAP请求。 5. **配置断言**:断言用于验证服务器返回的结果是否符合预期。例如,你可以添加“响应断言”,检查响应中是否包含特定文本或XML元素。 6. ...

    SOAP编程

    5. **SOAP消息示例**: ```xml &lt;soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"&gt; &lt;soap:Header&gt; &lt;!-- Header content goes here --&gt; &lt;/soap:Header&gt; &lt;soap:Body&gt; &lt;!-- Operation ...

    SOAP调用webservice例子

    1. **Envelope**:这是SOAP消息的根元素,定义了消息的边界。它告诉接收方这是一个SOAP消息。 2. **Header**:可选部分,包含与消息处理相关的附加信息,如安全认证、路由信息等。 3. **Body**:必须部分,包含实际...

    soap相关代码及资料

    总的来说,这个压缩包可能包含SOAP基本概念的介绍、ASIS2的详细规范、SOAP消息解析示例代码、WSDL的编写指导,以及可能的调试和测试工具的使用教程。通过学习这些内容,你可以深入理解SOAP协议,掌握如何创建、解析...

    cxf-soap内容解析、更改(助记)

    2. 使用`MessageFactory`加载SOAP消息的XML字符串或流,生成`SOAPMessage`实例。 3. 访问`SOAPBody`以获取或修改业务数据。可以使用`SOAPBody`的`getFirstBody()`或`getChildElements()`方法来遍历和操作元素。 4. ...

    java_soap学习资料

    - `SOAPPart`包含整个SOAP消息,`SOAPEnvelope`代表消息的信封,`SOAPBody`则包含业务逻辑数据。 6. **SOAP异常处理**: - SOAP错误通常通过SOAP Fault来表示,它是一个包含错误信息的SOAP消息。 - 在Java中,`...

    soap.rar_SOA_SOAP java_java soap_soap

    4. **SOAP消息示例**:SOAP消息通常包含XML格式的数据,例如请求或响应。一个简单的SOAP消息例子可能如下: ```xml &lt;soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope"&gt; &lt;soap:Header&gt; &lt;!-- ...

    soapSDK,gsoap,webservice

    "gsoap"是其中的一个具体实现,是一个开源的SOAP生成器和C/C++库,能够自动生成处理SOAP消息的代码。gsoap不仅支持SOAP 1.1和1.2,还支持WSDL(Web Services Description Language),允许开发者从WSDL文件自动生成...

    Microsoft Soap Toolkit3.0.rar

    总结来说,Microsoft SOAP Toolkit 3.0是开发和利用Web服务的重要工具,它简化了SOAP消息的处理和客户端代理的生成,为.NET和COM开发者提供了强大的支持。通过学习和掌握这个工具包,开发者可以更高效地构建跨平台的...

    Axis2的OMElement SOAP XML报文节点首字母小写转大写(注意,是节点,不是节点元素的值) java

    SOAP是一种用于交换结构化信息的标准协议,XML则是其消息格式的基础。当我们处理SOAP XML报文时,有时会遇到需要转换XML节点名的情况,例如将节点名的首字母从小写转换为大写。以下将详细探讨这个主题。 首先,理解...

    SOAP_serialization.zip_Csharp SOAP_soap_soap C++_soap csharp

    gSOAP工具集可以自动生成客户端和服务端代码,简化SOAP消息的序列化和反序列化。 9. **SOAP_csharp**:在C#中,使用`System.ServiceModel`命名空间可以创建WCF(Windows Communication Foundation)服务,它提供了...

    SOAP:XML跨平台Web Service开发技术

    然而,由于明确要求生成的知识点应围绕标题和描述中的内容,即SOAP及XML跨平台Web服务开发技术,我们将基于这些关键词展开详细讨论。 ### SOAP:XML跨平台Web Service开发技术 #### 1. 简介 SOAP(Simple Object ...

    C语言版soap协议栈源代码

    这部分代码通常包括错误检测、错误代码和错误消息的生成。 5. **线程安全**:对于多线程应用,SOAP协议栈需要确保线程安全,避免在并发环境下出现数据竞争和内存泄漏问题。源代码中可能会包含互斥锁、条件变量等...

    qt soap 学习webservice 的小例子

    2. **SOAP消息结构**:SOAP消息通常包括一个SOAP头(可选)和一个SOAP主体,两者都是XML格式。理解这些元素的结构是构建和解析SOAP消息的基础。 3. **Qt网络模块**:Qt的网络模块(如QNetworkAccessManager和...

    PB9-soap-WEBSERVICE例子.rar

    通常,这种SDK会提供必要的库和工具,使PB9能够生成和解析SOAP消息。 在PB9中调用Web服务的过程包括以下几个步骤: 1. **配置Web引用**:首先,开发者需要在PB9中添加Web服务的引用,这通常涉及输入Web服务的WSDL...

Global site tag (gtag.js) - Google Analytics