webservice 小例子
很多内容都是从网上找的,自己做过了一些验证,写下来,当然里面还是有很多要进行修改过优化的。 ? 1 环境 a JDK1.5,tomcat5.5. b ?到 http://ws.apache.org/Axis/网站下载Axis安装包的安装包。我下载的是axis-1_4 版本,解压后可以直接到webapps目录 下面将axis直接copy到tomcat的webapps下面。 这时启动tomcat,我的端口是 8899 。可以访问下测试 http://localhost:8899/axis 只是就可以启动了,页面中有个Validation?可以直接点进去看看,里面会提示你少的jar包,最好是将包都给下载全了, 都放到axis应用的WEB-INF下的lib下面,再启动看看,知道都OK了,就好了,为的是防止以后出现乱七八糟的问题。 当然这些jar包,在我们写客户端验证的时候,都要导入到我们的工程中。 ? c 设置下AXISPATH路径,我直接将Axis下的包都给配置上了。 ? 2 好了,开始下面是三种方式。 ?? 如果不想再axis上直接开发,我们可以建立自己的web应用。这时简单点,将axis下面的jar包和web.xml放到我们 ??自己建立的工程中就好了。可以启动下试试。 ? ??Axis支持三种web service的部署和开发,分别为:
? ==========================================================
编写DII(Dynamic Invocation Interface )方式web服务 1.新建包com.qdl.server,编 写服务端程序SayHello ? package com.qdl.server; public class SayHello { public String getName(String name) { return "hello "+name; } } ? 2、 将源码拷贝到WebRoot下,重命名为 SayHello.jws (注意不烤上面的package声明,这样的话会生成带包路径的,下面的访问就有问题,具体 ?? ?还不知道怎么回事) ? 3、访问连接http://localhost/webservice/SayHello.jws?wsdl, 页面显示Axis自动生成的wsdl,同时会在WEB-INF下创建jwsClasses文件夹,在此生成SayHello.class文件? ? 4。 写个客户端的测试程序
public static void main(String[] args) throws ServiceException,MalformedURLException,RemoteException { String endpoint = "http://localhost:8899/axis/SayHello.jws";
Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL(endpoint)); call.setOperationName(new QName(endpoint,"getName"));
String ret = (String) call.invoke(new String[]{"lambert"}); System.out.println(ret); } ? OK,可以看到结果了。 ? 编写Dynamic Proxy方式访问服务
1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的SayHello 2、新建包com.qdl.dao编写代理接口? ? package com.qdl.dao; import java.rmi.Remote; public interface HelloClientInterface extends Remote { public String getName(String name) throws java.rmi.RemoteException; } ? 3 编写并执行客户端程序TestHelloClient.java? ? package com.qdl.client; import java.net.URL; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceFactory; import javax.xml.rpc.Service; import com.qdl.dao.HelloClientInterface; public class TestHelloClient { public static void main(String[] args) { try { String wsdlUrl = "http://localhost/webservice/SayHello.jws?wsdl"; String nameSpaceUri = "http://localhost/webservice/SayHello.jws"; //注意下面的serviceName和portName, //http://localhost/webservice/SayHello.jws?wsdl页面的xml最下端有 String serviceName = "SayHelloService"; String portName = "SayHello"; ServiceFactory serviceFactory = ServiceFactory.newInstance(); Service afService = serviceFactory.createService(new URL(wsdlUrl),new QName(nameSpaceUri,serviceName)); HelloClientInterface proxy = (HelloClientInterface) afService.getPort(new QName(nameSpaceUri,portName),HelloClientInterface.class); System.out.println("返回信息是:" + proxy.getName("zhangsan")); } catch (Exception ex) { ex.printStackTrace(); } } } ? 东西查不多,就是通过一个接口来处理了。 ? 编写wsdd发布web服务,编写stub client访问web服务(定制发布服务)? 先写deploy.wsdd ? 在DOS下转换目录到%TOMCAT_HOME%/webapps/axis/WEB-INF,命令: (这里有时候会报一堆错误,查了下:可以这样在deploy.wsdd 前面,添加端口 -p 8899 tomcat的) ? ? ? java org.apache.axis.client.AdminClient -lhttp://地址:端口/context模块/services/AdminService deploy.wsdd ? 生成 client stub文件? 将SayHello.java拷贝到WebRoot下 (前面已经拷贝),重命名为SayHello.jws,? 此时在文件夹WEB-INF下com.qdl.client下生成的stub client文件列表为:? ? 5。客户端的测试程序。 public static void main(String[] args){ ? ? ========================================= 上面的只是小例子,只是说明意思。初步学习。有待深入、 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |