webservice 开发实践小结
? ????由于项目中需要开发一个彩信接口,用来收发SOAP消息,便用AXIS开发了一个webservice,也加深了对web服务的理解,为以后开发类似的webservice接口积累了经验。 1、下载AXIS相应的包,设置环境变量。 先设置包的路径LIB_HOME=D:/axis/../../lib,然后设置相应的包AXIS_PATH=%LIB_HOME%/axis.jar; %LIB_HOME%/axis-ant.jar; %LIB_HOME%/jaxrpc.jar; %LIB_HOME%/commons-logging-1.0.4.jar; %LIB_HOME%/commons-discovery-0.2.jar; %LIB_HOME%/saaj.jar; %LIB_HOME%/activation.jar; %LIB_HOME%/mail.jar; %LIB_HOME%/wsdl4j-1.5.1.jar; %LIB_HOME%/xerces.jar,??????最后设置classpath的路径%AXIS_PATH%。
2、用wsdl2java生成服务端代码 将标准的wsdl文件拷贝到工程src目录下,进入cmd命令模式,D:/workspace/工程名/src> java?org.apache.axis.wsdl.WSDL2Java?-s?-S?true?MSMP.wsdl?生成skeleton类到相应的路径。
wsdl2java?用于根据WSDL生成相应的服务端和客户端代码的生成工具。 其中常用的options具体如下:
3、编写业务实现类,修改deploy.wsdd发布文件,先部署一个web服务器,如用Resin,把deploy.wsdd文件拷贝到classes上一级目录,也就是WEB-INF下,运行命令:? java?-cp? D:/../lib/activation.jar; D:/../lib/axis.jar; D:/../lib/axis-ant.jar; D:/../lib/commons-discovery.jar; D:/../lib/commons-httpclient-3.0-alpha1.jar; D:/../lib/commons-logging.jar; D:/../lib/jaxrpc.jar; D:/../lib/log4j-1.2.8.jar; D:/../lib/mail.jar; D:/../lib/saaj.jar; D:/../lib/wsdl4j.jar ?org.apache.axis.client.AdminClient?-lhttp://localhost:8080/services/MaPort?deploy.wsdd 要注意包的路径,Processing?file?deploy.wsdd??<Admin>Done?processing</Admin>表示发布成功。
4、添加头响应类来处理SOAP头消息,在server-config.wsdd文件中添加业务实现方法,头消息处理。 <operationname=""qname=""returnQName=""returnType=""?xmlns:ns1=""?xmlns:ns2=""> ?????<parameter?qname=""?type=""?/> </operation>
<responseFlow> ?????<handler?name="httpRequest"?type="java:com.package"> ?????</handler> </responseFlow> <responseFlow> ?????<handler?name="httpResponse"?type="java:com.package"> ?????</handler> </responseFlow>
5、通过服务端生成wsdl文件,用wsdl2java工具将wsdl反向生成客户端需要的实体类。
6、编写客户端代码,发送SOAP请求到服务端进行测试: public?class?Test?{ public?void?getApple()?{
String? targetEendPoint=?"http://localhost:8802/services/MaPort"; //创建service类 Service?service?=?new?Service(); //定义调用WebService类 Call?call; try?{ //定义传入参数类 SyncOrderRelationReqType?req?=?new?SyncOrderRelationReqType(); //设置属性 req.setFeeUser_ID(new?User_id_schema(BigInteger.valueOf(1), "130×××××××",?new?byte[]{0})); req.setMsgType("SyncOrderRelation"); req.setVersion("1.0.0"); req.setSPServiceID("161200"); req.setSPID("44836"); req.setActionReasonID(BigInteger.valueOf(1)); req.setDestUser_ID(new?User_id_schema(BigInteger.valueOf(1),"130×××××××",new?byte[]{0})); req.setSend_Address(new?Address_info_schema(BigInteger.valueOf(0),"827003")); req.setDest_Address(new?Address_info_schema(BigInteger.valueOf(400),"130×××××××")); req.setFeeUser_ID(new?User_id_schema(BigInteger.valueOf(1),new?byte[]{0})); req.setActionID(BigInteger.valueOf(1)); MSMPLocator?msmp?=?new?MSMPLocator(); msmp.setmaPortEndpointAddress("http://localhost:8802/services/MaPort"); MaPort?ma?=?msmp.getmaPort(); SyncOrderRelationRespType?result?=?ma.syncOrderRelation(req); System.out.println(result.getVersion()+result.getHRet()); }?catch?(Exception?e)?{ //?TODO?Auto-generated?catch?block e.printStackTrace(); } }
public?static?void?main(String[]?args)?{ Test?tes?=?new?Test(); tes.getApple(); } }
备注: 1、将WebService发布到服务器的时候由于JDK的版本不同会导致jar包冲突,JDK1.4版本的保留saaj.jar,? 删除saaj-api-1.3.jar,saaj-impl-1.3.jar包,不然会导致服务器报异常。
2、最好用deploy.wsdd来发布web服务,这样可以保证server-config.wsdd配置文件的设置项是完整的。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |