首頁  >  文章  >  資料庫  >  Axis 2

Axis 2

WBOY
WBOY原創
2016-06-07 15:14:201057瀏覽

在编写、发布和测试0配置的WebService时应注意如下几点: 1. POJO类不能使用package关键字声明包。 2. Axis2在默认情况下可以热发布WebService,也就是说,将WebService的.class文件复制到pojo目录中时,Tomcat不需要重新启动就可以自动发布WebService。如果

在编写、发布和测试0配置的WebService时应注意如下几点:
1. POJO类不能使用package关键字声明包。
2. Axis2在默认情况下可以热发布WebService,也就是说,将WebService的.class文件复制到pojo目录中时,Tomcat不需要重新启动就可以自动发布WebService。如果想取消Axis2的热发布功能,可以打开\webapps\axis2\WEB-INF\conf\axis2.xml,找到如下的配置代码: true
将true改为false即可。要注意的是,Axis2在默认情况下虽然是热发布,但并不是热更新,也就是说,一旦成功发布了WebService,再想更新该WebService,就必须重启Tomcat。这对于开发人员调试WebService非常不方便,因此,在开发WebService时,可以将Axis2设为热更新。在axis2.xml文件中找到false,将false改为true即可。
3. 在浏览器中测试WebService时,如果WebService方法有参数,需要使用URL的请求参数来指定该WebService方法参数的值,请求参数名与方法参数名要一致,例如,要测试getGreeting方法,请求参数名应为name,如上面的URL所示。
4. 发布WebService的pojo目录只是默认的,如果读者想在其他的目录发布WebService,可以打开axis2.xml文件,并在元素中添加如下的子元素:
上面的配置允许在\webapps\axis2\WEB-INF\my目录中发布WebService。例如,将本例中的SimpleService.class复制到my目录中也可以成功发布(但要删除pojo目录中的SimpleService.class,否则WebService会重名)。

用Java实现调用WebService的客户端程序

package client;

 import javax.xml.namespace.QName;

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 Exception {

// 使用RPC方式调用WebService

 RPCServiceClient serviceClient = new RPCServiceClient();

 Options options = serviceClient.getOptions();

// 指定调用WebService的URL

EndpointReference targetEPR = new EndpointReference( "http://localhost:8080/axis2/services/SimpleService");

options.setTo(targetEPR);

// 指定getGreeting方法的参数值

Object[] opAddEntryArgs = new Object[] {"超人"};

// 指定getGreeting方法返回值的数据类型的Class对象

Class[] classes = new Class[] {String.class};

// 指定要调用的getGreeting方法及WSDL文件的命名空间

QName opAddEntry = new QName("http://ws.apache.org/axis2", "getGreeting");

 // 调用getGreeting方法并输出该方法的返回值

System.out.println(serviceClient.invokeBlocking(opAddEntry, opAddEntryArgs, classes)[0]);

// 下面是调用getPrice方法的代码,这些代码与调用getGreeting方法的代码类似

classes = new Class[] {int.class}; opAddEntry = new QName("http://ws.apache.org/axis2", "getPrice");

System.out.println(serviceClient.invokeBlocking(opAddEntry, new Object[]{}, classes)[0]);

}

}

用wsdl2java简化客户端的编写 

Axis2提供了一个wsdl2java.bat命令可以根据WSDL文件自动产生调用WebService的代码。wsdl2java.bat命令可以在"bin目录中找到。在使用wsdl2java.bat命令之前需要设置AXIS2_HOME环境变量,该变量值是
在Windows控制台输出如下的命令行来生成调用WebService的代码:
%AXIS2_HOME%\bin\wsdl2java -uri http://localhost:8080/axis2/services/SimpleService?wsdl -p client -s -o stub
其中-url参数指定了wsdl文件的路径,可以是本地路径,也可以是网络路径。-p参数指定了生成的Java类的包名,-o参数指定了生成的一系列文件保存的根目录。在执行完上面的命令后,读者就会发现在当前目录下多了个stub目录,在."stub"src"client目录可以找到一个SimpleServiceStub.java文件,该文件复杂调用WebService,读者可以在程序中直接使用这个类

在cmd命令窗口中执行

实际实现:


C:\Documents and Settings\Administrator>D:


D:\>cd axis2-1.5.4


D:\axis2-1.5.4>cd bin


D:\axis2-1.5.4\bin>

D:\axis2-1.5.4\bin>

D:\axis2-1.5.4\bin>wsdl2java -uri http://192.168.1.140:8099/services/SSO?ws

dl -p com.bcinfo.sso

Using AXIS2_HOME:   D:\axis2-1.5.4

Using JAVA_HOME:    D:\Program Files\Java\jdk1.6.0_10

Retrieving document at 'http://192.168.1.140:8099/services/SSO?wsdl'.

D:\axis2-1.5.4\bin>wsdl2java -uri http://192.168.1.140:8099/services/SSO?ws

dl -p com.bcinfo.SSoClient

Using AXIS2_HOME:   D:\axis2-1.5.4

Using JAVA_HOME:    D:\Program Files\Java\jdk1.6.0_10

Retrieving document at 'http://192.168.1.140:8099/services/SSO?wsdl'.

D:\axis2-1.5.4\bin>

 

 

 

class

 

package client;

import javax.xml.namespace.QName;

import org.apache.axis2.addressing.EndpointReference;

import org.apache.axis2.client.Options;

import org.apache.axis2.rpc.client.RPCServiceClient;

public class StubClient {

public static void main(String[] args) throws Exception {

 SimpleServiceStub stub = new SimpleServiceStub();
SimpleServiceStub.GetGreeting gg = new SimpleServiceStub.GetGreeting();

gg.setName("比尔");

System.out.println( stub.getGreeting(gg).get_return());

System.out.println(stub.getPrice().get_return());

 }

 }
上面的代码大大简化了调用WebService的步骤,并使代码更加简洁。但要注意的是,wsdl2java.bat命令生成的Stub类将WebService方法的参数都封装在了相应的类中,类名为方法名,例如,getGreeting方法的参数都封装在了GetGreeting类中,要想调用getGreeting方法,必须先创建GetGreeting类的对象实例。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn