移动订购通知接口集成
之前写过一篇联通的,现在来写一篇移动的,估计很多人被移动的那个正向同步通知接口的WSDL搞的头晕
1、首先呢当然是要有移动的那个WSDL文件,但是移动给的那个文件没法直接生成代码,所以改改之后成了这样:
<definitions xmlns:ws="http://www.monternet.com/dsmp/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.ort/wsdl/" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:dsmp="http://www.monternet.com/dsmp/schemas/" targetNamespace="http://www.monternet.com/dsmp/wsdl/">
<types>
<schema targetNamespace="http://www.monternet.com/dsmp/schemas/" xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.w3.org/2001/XMLSchema" elementFormDefault="unqualified" attributeFormDefault="unqualified">
<complexType name="address_info_schema">
<sequence>
<element name="DeviceType" type="xsd:integer"/>
<element name="DeviceID" type="xsd:string"/>
</sequence>
</complexType>
<complexType name="user_id_schema">
<sequence>
<element name="UserIDType" type="xsd:integer"/>
<element name="MSISDN" type="xsd:string"/>
<element name="PseudoCode" type="xsd:base64Binary"/>
</sequence>
</complexType>
<!-- request & response -->
<element name="TransactionID" type="xsd:string"/>
<element name="SyncOrderRelationReq" type="dsmp:SyncOrderRelationReqType"/>
<complexType name="SyncOrderRelationReqType">
<sequence>
<element name="Version" type="xsd:string"/>
<element name="MsgType" type="xsd:string"/>
<element name="Send_Address" type="dsmp:address_info_schema"/>
<element name="Dest_Address" type="dsmp:address_info_schema"/>
<element name="FeeUser_ID" type="dsmp:user_id_schema"/>
<element name="DestUser_ID" type="dsmp:user_id_schema"/>
<element name="LinkID" type="xsd:string" minOccurs="0"/>
<element name="ActionID" type="xsd:integer"/>
<element name="ActionReasonID" type="xsd:integer"/>
<element name="SPID" type="xsd:string" minOccurs="0"/>
<element name="SPServiceID" type="xsd:string"/>
<element name="AccessMode" type="xsd:integer" minOccurs="0"/>
<element name="FeatureStr" type="xsd:base64Binary" minOccurs="0"/>
</sequence>
</complexType>
<element name="SyncOrderRelationResp" type="dsmp:SyncOrderRelationRespType"/>
<complexType name="SyncOrderRelationRespType">
<sequence>
<element name="Version" type="xsd:string"/>
<element name="MsgType" type="xsd:string"/>
<element name="hRet" type="xsd:integer"/>
</sequence>
</complexType>
</schema>
</types>
<message name="ma.SyncOrderRelationReq">
<part name="SyncOrderRelationInput" element="dsmp:SyncOrderRelationReq"/>
<part name="TransactionIDInput" element="dsmp:TransactionID"/>
</message>
<message name="ma.SyncOrderRelationResp">
<part name="SyncOrderRelationOutput" element="dsmp:SyncOrderRelationResp"/>
<part name="TransactionIDOut" element="dsmp:TransactionID"/>
</message>
<portType name="maPort">
<operation name="SyncOrderRelation">
<input message="ws:ma.SyncOrderRelationReq"/>
<output message="ws:ma.SyncOrderRelationResp"/>
</operation>
</portType>
<binding name="maPortBinding" type="ws:maPort">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="SyncOrderRelation">
<soap:operation style="document" soapAction="sim.SyncOrderRelation"/>
<input>
<soap:body use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://www.monternet.com/dsmp/schemas/"/>
<soap:header message="ws:ma.SyncOrderRelationReq" part="TransactionIDInput" use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding" namespace="http://www.w3.org/2001/XMLSchema"/>
</input>
<output>
<soap:body use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" namespace="http://www.monternet.com/dsmp/schemas/"/>
<soap:header style="document" message="ws:ma.SyncOrderRelationResp" part="TransactionIDOut" use="literal" encodingStyle="http://schemas.xmlsoap.org/soap/encoding" namespace="http://www.w3.org/2001/XMLSchema"/>
</output>
</operation>
</binding>
<service name="dsmp">
<port name="maPort" binding="ws:maPortBinding">
<soap:address location="http://localhost/axis/services/maPort"/>
</port>
</service>
</definitions>
有了这个描述文件估计很多人都可以自己生成对应的代码了,这里呢我也提供一份Axis 1.4生成的代码一份,要的自己去下载吧,拿到就能直接部署在Tomcat里面运行的
地址:http://download.csdn.net/detail/hjjoe1213123/8390079
2、至于要集成到Spring里面的一定要注意server-config.wsdd文件service的编写,参考如下:
<service name="ChinaMobileAcceptService" provider="java:RPC" style="document" use="literal">
<parameter name="allowedMethods" value="syncOrderRelation"/>
<parameter name="typeMappingVersion" value="1.2"/>
<parameter name="wsdlPortType" value="maPort"/>
<parameter name="className" value="com.cmpany.ChinaMobileAcceptProxyService"/>
<parameter name="wsdlServicePort" value="maPort"/>
<parameter name="wsdlTargetNamespace" value="http://www.monternet.com/dsmp/wsdl/"/>
<parameter name="wsdlServiceElement" value="dsmp"/>
<parameter name="schemaUnqualified" value="http://www.monternet.com/dsmp/schemas/"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns1:SyncOrderRelationReqType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.cmpany.entity.SmsCmccSyncOrderRelationReqType" xmlns:ns1="http://www.monternet.com/dsmp/schemas/" xmlns:ns2="http://xml.apache.org/axis/wsdd/"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns2:address_info_schema" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.cmpany.entity.SmsAddress_info_schema" xmlns:ns2="http://www.monternet.com/dsmp/schemas/"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns3:SyncOrderRelationRespType" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.cmpany.entity.SmsCmccSyncOrderRelationRespType" xmlns:ns3="http://www.monternet.com/dsmp/schemas/"/>
<typeMapping deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory" encodingStyle="" qname="ns4:user_id_schema" serializer="org.apache.axis.encoding.ser.BeanSerializerFactory" type="java:com.cmpany.entity.SmsUser_id_schema" xmlns:ns4="http://www.monternet.com/dsmp/schemas/"/>
</service>
3、需要注意的一点是,移动MISG系统发送过来的报文还包含了soapenv:Header节点,所以ProxyService一定要实现extends ServletEndpointSupport implements ChinaMobileAcceptService, Skeleton,参考如下:
import javax.xml.rpc.ServiceException;
import javax.xml.rpc.holders.StringHolder;
import org.apache.axis.wsdl.Skeleton;
import org.springframework.remoting.jaxrpc.ServletEndpointSupport;
import com.cmpany.entity.SmsCmccSyncOrderRelationReqType;
import com.cmpany.entity.SmsCmccSyncOrderRelationRespType;
import com.cmpany.entity.SmsCmccSyncOrderRelationRespTypeHolder;
public class ChinaMobileAcceptProxyService extends ServletEndpointSupport implements ChinaMobileAcceptService, Skeleton
{
private ChinaMobileAcceptService chinamobileacceptservice;
private static java.util.Map _myOperations = new java.util.Hashtable();
private static java.util.Collection _myOperationsList = new java.util.ArrayList();
protected void onInit() throws ServiceException
{
chinamobileacceptservice = (ChinaMobileAcceptService) getApplicationContext().getBean("ChinaMobileAcceptService");
}
/**
* Returns List of OperationDesc objects with this name
*/
public static java.util.List getOperationDescByName(java.lang.String methodName)
{
return (java.util.List) _myOperations.get(methodName);
}
/**
* Returns Collection of OperationDescs
*/
public static java.util.Collection getOperationDescs()
{
return _myOperationsList;
}
static
{
org.apache.axis.description.OperationDesc _oper;
org.apache.axis.description.FaultDesc _fault;
org.apache.axis.description.ParameterDesc[] _params;
_params = new org.apache.axis.description.ParameterDesc[]
{
new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/", "SyncOrderRelationReq"),
org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/",
"SyncOrderRelationReqType"), SmsCmccSyncOrderRelationReqType.class, false, false),
new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/", "TransactionID"),
org.apache.axis.description.ParameterDesc.IN, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"),
java.lang.String.class, true, false),
new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/", "SyncOrderRelationResp"),
org.apache.axis.description.ParameterDesc.OUT, new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/",
"SyncOrderRelationRespType"), SmsCmccSyncOrderRelationRespType.class, false, false),
new org.apache.axis.description.ParameterDesc(new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/", "TransactionID"),
org.apache.axis.description.ParameterDesc.OUT, new javax.xml.namespace.QName("http://www.w3.org/2001/XMLSchema", "string"),
java.lang.String.class, false, true), };
_oper = new org.apache.axis.description.OperationDesc("syncOrderRelation", _params, null);
_oper.setElementQName(new javax.xml.namespace.QName("http://www.monternet.com/dsmp/schemas/", "SyncOrderRelation"));
_oper.setSoapAction("sim.SyncOrderRelation");
_myOperationsList.add(_oper);
if (_myOperations.get("syncOrderRelation") == null)
{
_myOperations.put("syncOrderRelation", new java.util.ArrayList());
}
((java.util.List) _myOperations.get("syncOrderRelation")).add(_oper);
}
public ChinaMobileAcceptService getChinamobileacceptservice()
{
return chinamobileacceptservice;
}
public void setChinamobileacceptservice(ChinaMobileAcceptService chinamobileacceptservice)
{
this.chinamobileacceptservice = chinamobileacceptservice;
}
public void syncOrderRelation(SmsCmccSyncOrderRelationReqType syncOrderRelationInput, String transactionIDInput,
SmsCmccSyncOrderRelationRespTypeHolder syncOrderRelationOutput, StringHolder transactionIDOut) throws java.rmi.RemoteException
{
chinamobileacceptservice.syncOrderRelation(syncOrderRelationInput, transactionIDInput, syncOrderRelationOutput, transactionIDOut);
}
}
AcceptService参考如下:
import java.rmi.Remote;
import java.rmi.RemoteException;
import javax.xml.rpc.holders.StringHolder;
import com.cmpany.entity.SmsCmccSyncOrderRelationReqType;
import com.cmpany.entity.SmsCmccSyncOrderRelationRespTypeHolder;
/**
* 中国移动订购通知接收服务
* @author hejun
* @version 1.0
* @time 2015年1月14日 上午9:27:11
* @todo
*/
public interface ChinaMobileAcceptService extends Remote
{
public void syncOrderRelation(SmsCmccSyncOrderRelationReqType syncOrderRelationInput, String transactionIDInput, SmsCmccSyncOrderRelationRespTypeHolder syncOrderRelationOutput, StringHolder transactionIDOut) throws RemoteException;
}