加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

webservice 开发实践小结

发布时间:2020-12-17 02:32:49 所属栏目:安全 来源:网络整理
导读:? ????由于项目中需要开发一个彩信接口,用来收发SOAP消息,便用AXIS开发了一个webservice,也加深了对web服务的理解,为以后开发类似的webservice接口积累了经验。 1、 下载AXIS相应的包,设置环境变量。 先设置包的路径LIB_HOME=D:/axis/../../lib,然后设

?

????由于项目中需要开发一个彩信接口,用来收发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生成相应的服务端和客户端代码的生成工具。
命令行格式为:WSDL2Java?[options]?-uri?<url?or?path>?:?A?url?or?path?to?a?WSDL

其中常用的options具体如下:
-o?<path>?:?指定生成代码的输出路径
-a???????????:???生成异步模式的代码
-s???????????:???生成同步模式的代码
-p?<pkg>?:???指定代码的package名称
-l?<languange>?:?使用的语言(Java/C)?默认是java
-t????????????:?为代码生成测试用例
-ss??????????:???生成服务端代码?默认不生成
-sd??????????:???生成服务描述文件?services.xml,仅与-ss一同使用
-d?<databinding>???:?指定databingding,例如,adb,xmlbean,jibx,jaxme?and?jaxbri
-g???????????:?生成服务端和客户端的代码
-pn?<port_name>???:?当WSDL中有多个port时,指定其中一个port
-sn?<serv_name>???:?选择WSDL中的一个service
-u???????????????????????:?展开data-binding的类
-r?<path>?????????????:?为代码生成指定一个repository
-ssi?????????????????????:???为服务端实现代码生成接口类
-S???????????????????????:?为生成的源码指定存储路径
-R???????????????????????:???为生成的resources指定存储路径
--noBuildXML????????:???输出中不生成build.xml文件
--noWSDL????????????:???在resources目录中不生成WSDL文件
--noMessageReceiver?:?不生成MessageReceiver类?

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配置文件的设置项是完整的。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读