生成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函数名称。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值