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

webservice 小例子

发布时间:2020-12-17 01:25:22 所属栏目:安全 来源:网络整理
导读:很多内容都是从网上找的,自己做过了一些验证,写下来,当然里面还是有很多要进行修改过优化的。 ? 1 环境 a JDK1.5,tomcat5.5. b ?到 http://ws.apache.org/Axis/网站下载Axis安装包的安装包。我下载的是axis-1_4 版本,解压后可以直接到webapps目录 下面将

很多内容都是从网上找的,自己做过了一些验证,写下来,当然里面还是有很多要进行修改过优化的。

?

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的部署和开发,分别为:


?1、Dynamic Invocation Interface ( DII)

?2、Stubs方式

?3、Dynamic Proxy方式

?

==========================================================

编写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

<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="" target="_blank">http://xml.apache.org/axis/wsdd/providers/java">
??<service name="HelloWorld" provider="java:RPC">
????<parameter name="className" value="HelloWorld"/>
????<parameter name="allowedMethods" value="sayHello"/>
??</service>
</deployment>

?

在DOS下转换目录到%TOMCAT_HOME%/webapps/axis/WEB-INF,命令:
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd
你会发现目录下多了一个server-config.wsdd文件,这就是AXIS的配置文件,以后所有的服务发布描述都会在里面找到

(这里有时候会报一堆错误,查了下:可以这样在deploy.wsdd 前面,添加端口 -p 8899 tomcat的)

?

?

?

java org.apache.axis.client.AdminClient -lhttp://地址:端口/context模块/services/AdminService deploy.wsdd
这一命令主要是把deploy.wsdd的service配置到server-config.wsdd中,同时更新内存
注意:上面命令的前提是要把axis的jar包配置到系统classpath环境变量中,否则报找不到类的错误

?

生成 client stub文件?

将SayHello.java拷贝到WebRoot下 (前面已经拷贝),重命名为SayHello.jws,?
执行下面的命令生存client stub?
java org.apache.axis.wsdl.WSDL2Java -p com.qdl.client http://localhost/webservice/SayHello.jws?wsdl

此时在文件夹WEB-INF下com.qdl.client下生成的stub client文件列表为:?

1.SayHello_PortType.java?

2.SayHelloService.java。?

3.SayHelloServiceLocator.java?

4.SayHelloSoapBindingStub.java
把com包整体剪到src下编译

?

5。客户端的测试程序。

public static void main(String[] args){
//访问定制发布的服务
try{
SayHelloService service = new SayHelloServiceLocator();
SayHello_PortType client = service.getSayHello();
String retValue = client.getName("zhangsan");
System.out.println("返回的信息是:"+retValue);
}catch (Exception e){
System.err.println("Execution failed. Exception: " + e);
}
}

?

?

=========================================

上面的只是小例子,只是说明意思。初步学习。有待深入、

(编辑:李大同)

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

    推荐文章
      热点阅读