webservice 小例子

来源:互联网 发布:广联达预算软件培训 编辑:程序博客网 时间:2024/05/21 17:37

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

 

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);
}
}

 

 

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

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