----------------------------------------------------------------
/**
* 版权: 雪夜清风 [ Jeansan] 所有 ;
*
* MSN: qingfeng0826@hotmail.com
* QQ : 331999816
*
* */
----------------------------------------------------------------
说明 :系统采用AXIS 1.2+Tomcat 5.5,如果无axis知识,建议可以到IBM开发者上搜索相关 AXIS 文档浏览
—————————————————————————————————————
1、 配置好AXIS 1.2
2、 将wsdl 文件 copy 到 /TOMCAT_HOME/webapps/axis/WEB-INF 下,Wsdl 文件由于MISC提供的不能生成 header ;经过修改以后的新的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/"> |
3、 生成客户端,服务端代码:
使用命令:Java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java --server-side --skeletonDeploy true dsmp.wsdl
4、 deploy.wsdd 用来发布service
MaPortBindingImpl.java 服务短编程使用
MaPortBindingStub.java 客户端编程使用
5、 建立服务:
使用命令 :java org.apache.axis.utils.Admin client|server deploy.wsdd
建立服务端和客户端的服务。
如果建立服务不成功,可以直接将com/monternet/www/dsmp/wsdl下的deploy.wsdd中的<service>...</service>之间的文字直接拷贝到server-config.wsdd文件中。
查看服务,如果没有发布成功是因为没有生成相关的class文件,可以先编译MaPortBindingSkeleton.java文件,然后查看是否发布
6、 编写测试代码:
package com.misc.client; import java.math.BigInteger; import java.net.URL; import javax.xml.rpc.holders.StringHolder; import com.monternet.www.dsmp.schemas.Address_info_schema; import com.monternet.www.dsmp.schemas.SyncOrderRelationReqType; import com.monternet.www.dsmp.schemas.SyncOrderRelationRespType; import com.monternet.www.dsmp.schemas.User_id_schema; import com.monternet.www.dsmp.schemas.holders.SyncOrderRelationRespTypeHolder; import com.monternet.www.dsmp.wsdl.MaPortBindingStub; //import com.monternet.www.dsmp.*; * 移动MISC系统升级,SP客户端测试环境 */ public class miscClient { public static void main(String[] args) { MaPortBindingStub binding = null; SyncOrderRelationRespType resp = null; SyncOrderRelationReqType req=new SyncOrderRelationReqType(); SyncOrderRelationRespTypeHolder syncOrderRelationOutput = new SyncOrderRelationRespTypeHolder(); StringHolder transactionIDOut = new StringHolder(); /** * * TransactionID 由返回的provision包里面的对应字段来决定,然后放到响应包里面的对应字段 * TransactionID不是sp生成的 * */ // 根据 - 数据业务管理平台接口规范-1.5.1 定义。可以参考schemas 下的类文件 BigInteger devicetypeSend_Address = BigInteger.valueOf(201); BigInteger devicetypeDest_Address = BigInteger.valueOf(0); BigInteger UserIDTypeFeeUser_ID = BigInteger.valueOf(1); BigInteger ActionID = BigInteger.valueOf(1); BigInteger ActionReasonID = BigInteger.valueOf(1); BigInteger AccessMode = BigInteger.valueOf(3);
// 对于一些固定的值来决定 Address_info_schema Send_Address = new Address_info_schema(); Send_Address.setDeviceID("misc"); Send_Address.setDeviceType(devicetypeSend_Address); Address_info_schema Dest_Address = new Address_info_schema(); Dest_Address.setDeviceID("1212"); Dest_Address.setDeviceType(devicetypeDest_Address);
FeeUser_ID.setMSISDN("13583153328"); FeeUser_ID.setUserIDType(UserIDTypeFeeUser_ID);
User_id_schema DestUser_ID = new User_id_schema(); DestUser_ID.setMSISDN("13583153328"); DestUser_ID.setUserIDType(UserIDTypeFeeUser_ID); /** * 给请求赋值 */ req.setMsgType("SubscribeServiceReq"); req.setVersion("1.5.0"); req.setSend_Address(Send_Address); req.setDest_Address(Dest_Address); req.setFeeUser_ID(FeeUser_ID); req.setDestUser_ID(DestUser_ID); req.setLinkID(""); // 可选 req.setActionID(ActionID); req.setActionReasonID(ActionReasonID); req.setSPID("082601"); req.setSPServiceID("dz"); req.setAccessMode(AccessMode); try { URL endpoint = new URL("http://localhost:8080/axis/services/maPort"); //详细见说明1 和说明 2 说明3 binding = (MaPortBindingStub) new com.monternet.www.dsmp.wsdl.DsmpLocator().getmaPort(endpoint); binding.setTimeout(60000);
} catch (Exception e) { e.printStackTrace(); } } |
说明1、 该URL是在真实环境中提交给 MISC平台的地址;
说明2、 该URL指向本地的服务地址,一定要保证 访问该URL时候提示为:
maPortHi there, this is an AXIS service! Perhaps there will be a form for invoking the service here... |
说明3 、本出URL的地址中端口为 808 是因为在 TCPMonitor中设置 监听端口转发为 808。 如果不开启TCPMonitor 则直接设置为8080
7、 编写服务短返回代码
// 添加返回 SyncOrderRelationRespType ret = new SyncOrderRelationRespType(); BigInteger hret = BigInteger.valueOf(0); ret.setMsgType("SubscribeServiceResp"); ret.setHRet(hret); ret.setVersion(" 1.5.0"); //return null; |
8、 问题解决:
n 包含 xmls=““ 问题
把wsdl文件里的 elementFormDefault="unqualified" 和attributeFormDefault="unqualified"都改成qualified就不会出现xmlns=""的问题了,不需要改axis源代码
9、客户端程序:(修改MaPortBindingImpl.java文件)
把wsdl文件里的 elementFormDefault="unqualified" 和attributeFormDefault="unqualified"都改成qualified就不会出现xmlns=""的问题了,不需要改axis源代码
9、客户端程序:(修改MaPortBindingImpl.java文件)
/** package com.monternet.www.dsmp.wsdl; import com.monternet.www.dsmp.schemas.*; import java.math.BigInteger; import javax.xml.rpc.holders.StringHolder;
public void syncOrderRelation(com.monternet.www.dsmp.schemas.SyncOrderRelationReqType syncOrderRelationInput, java.lang.String transactionIDInput, com.monternet.www.dsmp.schemas.holders.SyncOrderRelationRespTypeHolder syncOrderRelationOutput, javax.xml.rpc.holders.StringHolder transactionIDOut) throws java.rmi.RemoteException { SyncOrderRelationRespType resp = new SyncOrderRelationRespType(); /** String checkhret = getResult(request); syncOrderRelationOutput.value = resp; //new com.monternet.www.dsmp.schemas.SyncOrderRelationRespType();
com.monternet.www.dsmp.schemas.SyncOrderRelationReqType req; req = syncInput; } public void unSubscribeService(com.monternet.www.dsmp.schemas.UnSubscribeServiceReqType unSubscribeServiceInput, java.lang.String transactionIDInput, com.monternet.www.dsmp.schemas.holders.UnSubscribeServiceRespTypeHolder unSubscribeServiceOutput, javax.xml.rpc.holders.StringHolder transactionIDOut) throws java.rmi.RemoteException { } |
/** package com.monternet.www.dsmp.wsdl; import com.monternet.www.dsmp.schemas.*; import java.math.BigInteger; import javax.xml.rpc.holders.StringHolder;
public void syncOrderRelation(com.monternet.www.dsmp.schemas.SyncOrderRelationReqType syncOrderRelationInput, java.lang.String transactionIDInput, com.monternet.www.dsmp.schemas.holders.SyncOrderRelationRespTypeHolder syncOrderRelationOutput, javax.xml.rpc.holders.StringHolder transactionIDOut) throws java.rmi.RemoteException { SyncOrderRelationRespType resp = new SyncOrderRelationRespType(); /** String checkhret = getResult(request); syncOrderRelationOutput.value = resp; //new com.monternet.www.dsmp.schemas.SyncOrderRelationRespType();
com.monternet.www.dsmp.schemas.SyncOrderRelationReqType req; req = syncInput; } public void unSubscribeService(com.monternet.www.dsmp.schemas.UnSubscribeServiceReqType unSubscribeServiceInput, java.lang.String transactionIDInput, com.monternet.www.dsmp.schemas.holders.UnSubscribeServiceRespTypeHolder unSubscribeServiceOutput, javax.xml.rpc.holders.StringHolder transactionIDOut) throws java.rmi.RemoteException { } |