Axis2: 用Axis2的0配置方式实现第一个WebService(1)
发布时间:2020-12-16 22:59:17 所属栏目:安全 来源:网络整理
导读:第一种:用Axis2的0配置方式实现第一个WebService 首先下载Axis2 1.4.1版,解压: (1)axis2-1.4.1-bin: 二进制包,包含Axis2需要的所有jar文件,示例以及其它一些相关文件。但在这个发行包中只包含了addresses mar和soapmontior mar两个模板,其它模块单独
第一种:用Axis2的0配置方式实现第一个WebService (1)axis2-1.4.1-bin: 二进制包,包含Axis2需要的所有jar文件,示例以及其它一些相关文件。但在这个发行包中只包含了addresses mar和soapmontior mar两个模板,其它模块单独下载。 (2)axis2-1.4.1-src:源代码 (3)axis2-1.4.1-war:包含Axis2需要的所有jar包,由于Axis2需要依赖Servlet容器运行,因此,在发布程序时,需要将这个war文件再Servlet中发布。例如,将war拷贝Tomcat的webapp目中,当tomcat启动后,会将war文件解压,然后我们可以将要发布的Webservice复制到解压,然后我们可以将要发布的Webservice复制到解压后的目录中的相关子目录。 (4)axis2-1.4.1-docs:参考文件,查找类的相关方法和详细信息 1.实现一个0配置的Web Service步骤: =============================== (1)编写一个Web Service类(2)编译这个Web Service类 (3)将编译生成的class文件直接拷贝到<Tomcat安装目录>webappsaxis2WEB-INpojo目录中,如果pojo目录不存在,建立这个目录; 在以下目录C:tomcatapache-tomcat-7.0.47webappsaxis2WEB-INFpojo新建文件: public class SimpleService{ public String getGreeting(String name){ return "Holle" + name; } public int getPrice(){ return new java.util.Random().nextInt(1000); } } 在cmd中进入C:tomcatapache-tomcat-7.0.47webappsaxis2WEB-INFpojo目录,运行以下命令编译java文件:javac SimpleService.java 重启tomcat(如果配置了热发布,会自动发布) http://localhost:8080/axis2/services/SimpleService/getGreeting?param0=bill 2.调用Web Service的3种方法 ========================= 第一种调用方法: 使用Java(RPC)调用Web Service步骤调用Web Service步骤: 1.创建RPCServiceClient对象 2.创建EndpointReference对象,并指定访问Web Service的URL(不包含wsdl) 3.创建描述WebService方法参数值的Object[]对象; 4.创建描述WebService方法返回值类型的Class[]对象; 5.创建QName对象,并指定要调用的WebService方法; 6.使用RPCServiceClient类的invokeBlocking方法调用WebService方法;invokeBlocking方法采用了同步的方式调用WebService,后面讲异步 注意:invokeBlocking方法返回一个Object []对象,如果是单值,取第一个 在eclipse新建一个工程,新建一个package:client,在包中新建类RPCClient.java。 package client; import javax.xml.namespace.QName; import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; public class RPCClient { public static void main(String[] args) throws AxisFault { //第一步1.创建RPCServiceClient对象 RPCServiceClient serviceClient = new RPCServiceClient(); Options options = serviceClient.getOptions(); //第二步2.创建EndpointReference对象,并指定访问Web Service的URL(不包含wsdl) EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/SimpleService" ); options.setTo(targetEPR); //第三步3.创建描述WebService方法参数值的Object[]对象; Object[] opAddEntryArgs = new Object[]{"超人"}; //第四步4.创建描述WebService方法返回值类型的Class[]对象; Class[] classes = new Class[]{String.class}; //第五步5.创建QName对象,并指定要调用的WebService方法; //http://ws.apache.org/axis2是命名空间,和wsdl文件里的一样 QName opAddEntry = new QName( "http://ws.apache.org/axis2", "getGreeting"); //第六步6.使用RPCServiceClient类的invokeBlocking方法调用WebService方法; //invokeBlocking方法采用了同步的方式调用WebService,后面讲异步 System.out.println( serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs,classes)[0]); classes = new Class[]{int.class}; opAddEntry = new QName( "http://ws.apache.org/axis2", "getPrice"); System.out.println( serviceClient.invokeBlocking( opAddEntry, new Object[]{}, classes)[0]); } } 以java application方式运行。 第二种调用方法: ?通过services.xml方式调用 第一种调用方法上面通过RPC方式调用Web Service方法的例子相对麻烦。Axis2考虑到这点,为我们提供了一个wsdl2java命令,这个命令可以根据WSDL的内容自动生成调用WebService的客户端Stud类。 (1)配置环境变量:AXIS2_HOME=E:Axis21.4.1axis2-1.4.1-binaxis2-1.4.1 (2)在cmd中执行以下命令自动生成Web Service代码: ? ? ? ? ? %AXIS2_HOME%binwsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o E:Axis2home 其中,-uri指定了WSDL文件的地址(可以是本地路径,也可以是web路径), -p指定了生成Stub类的包名, -o指定存放Stub类的目录名。 ? ? 新建一个client包,将SimpleServiceStub.java拷贝到client包中。 (3)写一个main方法调用web service 注意:webservice方法的返回值和参数值都封装在相应的类中,例如 getGreeting方法返回值封装在GetGreetingResponse类中,参数封装在 GetGreeting类中。 例子: package client; import java.rmi.RemoteException; public class StubSimpleClient { public static void main(String[] args) throws RemoteException { // TODO Auto-generated method stub SimpleServiceStub stub = new SimpleServiceStub(); SimpleServiceStub.GetGreeting gg = new SimpleServiceStub.GetGreeting(); gg.setParam0("bill"); System.out.println( stub.getGreeting(gg).local_return ); System.out.println( stub.getPrice().local_return ); } } 以java application方式运行。 第三种:没有Servlet容器情况下使用Axis2 Axis2提供了一个简单的HTTP服务器,端口8080, (1)使用如下命令来启动HTTP服务器:%AXIS2_HOME%binaxis2server.bat (2)在浏览器输入:http://localhost:8080/axis2 注意:如果在这个HTTP服务器中发布webservice,并不是将webservice发布到WEB-INF目录中的,而是将webservice放在%AXIS2_HOME%repository目录中,该目录中与 webservice相关的目录结构与WEB-INF目录类似。 发布例子: http://localhost:8080/axis2/services 将pojo的例子拷贝到%AXIS2_HOME%repository,重启http服务器, 然后在浏览器中,再输入:http://localhost:8080/axis2/services 就可以看到结果。(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容