微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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生成相应的服务端和客户端代码生成工具。
命令行格式为: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="httpRequesttype="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配置文件的设置项是完整的。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐