webservice编程基础——axis2

阅读更多
使用axis2进行webservice编程也是比较容易的,下面主要讲解一些axis2实现的过程,以及遇到的问题解决。
一,下载最新的axis2包axis2-1.6.2-bin.zip,和eclipse开发插件工具axis2-eclipse-codegen-wizard.zip,axis2-eclipse-service-archiver-wizard.zip,并解压,将解压后的文件axis2-eclipse-codegen-wizard和axis2-eclipse-service-archiver-wizard放入Myeclipse的安装目录dropins里面。启动Myeclipse。从名称可以看出axis2-eclipse-codegen-wizard是代码生成向导,axis2-eclipse-service-archiver-wizard是服务打包向导。
二,新建web project,并将axis2-1.6.2-bin.zip解压后的lib目录下的jar文件引入工程中,编写服务端代码,如下:

package axis.com.demo;
public class HelloServer {       
 public String sayHello(String name){  
        return "Hello kitty you are, " + name + "!";  
   }  
}        


打开Myeclipse,操作如下。
一,首先进行wsdl的生成和发布。进行File——》new ——》others——》Axis2 Winzards——》Axis2 Code  Generator。选择Generate a WSDL from a java source file.并设置classNmae和class目录,并点击test class loading.

webservice编程基础——axis2_第1张图片

点击下一步,直到进入如下页面,并设置生成wsdl的名称和目录如下:

webservice编程基础——axis2_第2张图片

正常的你会看到:

webservice编程基础——axis2_第3张图片

二,进行服务打包。File——》new ——》others——》Axis2 Winzards——》Axis2 Server Archiver,进入服务发布打包页面。
webservice编程基础——axis2_第4张图片
填写你的class地址。
下一步选择skip wsdl.在下一步选择依赖的jar包,如果没有,则继续下一步。默认自从生成XML文件。接下来填写服务名,和服务端的class文件所在目录。如下:

webservice编程基础——axis2_第5张图片
点击load,加载进来。设置要打的包的路径,这个路径一般设置在文件web-inf下面,且文件名应该和web.xml的设置保存一致。如下所示:
webservice编程基础——axis2_第6张图片
点击下一步就发布完成了。
在Myeclipse工程中正常的显示为:

webservice编程基础——axis2_第7张图片

再讲讲遇到的问题,可能在weblogic,遇到客户端访问报错的问题,其实也是服务端的jar包冲突,解决办法是优先使用web工程的jar包,可在WEB-INF下加上一个weblogic.xml文件,内容如下:


 

 

true 




true表示是优先使用web工程的jar文件。

web.xml内容(没有建立的话需要新建)如下:



        AxisServlet
        org.apache.axis2.transport.http.AxisServlet
        1


        AxisServlet
        /services/* 




客户端调用代码如下:

package axis.com.demo;
import javax.xml.namespace.QName;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;
public class HelloClient {

public static void main(String[] args) {
	try {  
        // 获得客户端  
        RPCServiceClient serviceClient = new RPCServiceClient();  
        // 可以在该对象中设置服务端的验证信息  
        Options options = serviceClient.getOptions();  
        EndpointReference targetEPR = new EndpointReference("http://127.0.0.1:7001/TestAxis2/services/HelloServer?wsdl");  
        options.setTo(targetEPR);  
        // 在创建QName对象时,QName类的构造方法的第一个参数表示WSDL文件的命名空间名,也就是元素的targetNamespace属性值  
        QName opAddEntry = new QName("http://demo.com.axis","sayHello");  
        // 参数,如果有多个,继续往后面增加即可,不用指定参数的名称  
        Object[] opAddEntryArgs = new Object[] {"ltf" };  
        // 返回参数类型,这个和axis1有点区别  
        // invokeBlocking方法有三个参数,其中第一个参数的类型是QName对象,表示要调用的方法名;  
        // 第二个参数表示要调用的WebService方法的参数值,参数类型为Object[];  
        // 第三个参数表示WebService方法的返回值类型的Class对象,参数类型为Class[]。  
        // 当方法没有参数时,invokeBllocking方法的第二个参数值不能是null,而要使用new Object[]{}  
        // 如果被调用的WebService方法没有返回值,应使用RPCServiceClient类的invokeRobust方法,  
        // 该方法只有两个参数,它们的含义与invokeBlocking方法的前两个参数的含义相同  
        Class[] classes = new Class[] { String.class };  
        System.out.println(serviceClient.invokeBlocking(opAddEntry,opAddEntryArgs, classes)[0]);   
    } catch (Exception e) {  
        e.printStackTrace();  
    }  
    }   
}


进入http://localhost:8080/TestAxis2/services/HelloServer?wsdl就可验证是否发布成功了。
  • webservice编程基础——axis2_第8张图片
  • 大小: 39.5 KB
  • webservice编程基础——axis2_第9张图片
  • 大小: 44.7 KB
  • webservice编程基础——axis2_第10张图片
  • 大小: 44.6 KB
  • webservice编程基础——axis2_第11张图片
  • 大小: 17.9 KB
  • webservice编程基础——axis2_第12张图片
  • 大小: 89.1 KB
  • webservice编程基础——axis2_第13张图片
  • 大小: 60.1 KB
  • webservice编程基础——axis2_第14张图片
  • 大小: 21 KB
  • 查看图片附件

你可能感兴趣的:(axis2,;,axis2,webservice)