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.

[img]http://dl.iteye.com/upload/attachment/0074/2160/eae2261c-7622-3630-a69a-22122e288863.jpg[/img]

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

[img]http://dl.iteye.com/upload/attachment/0074/2163/7a5290f3-e6e4-3cf5-be91-ccf32d824b80.jpg[/img]。

正常的你会看到:

[img]http://dl.iteye.com/upload/attachment/0074/2165/450dd9fb-7f04-31a4-9045-f9baacbde3e6.jpg[/img]

二,进行服务打包。File——》new ——》others——》Axis2 Winzards——》Axis2 Server Archiver,进入服务发布打包页面。
[img]http://dl.iteye.com/upload/attachment/0074/2142/58cb9461-6f50-3a49-b8d0-d52dce75239e.jpg[/img]
填写你的class地址。
下一步选择skip wsdl.在下一步选择依赖的jar包,如果没有,则继续下一步。默认自从生成XML文件。接下来填写服务名,和服务端的class文件所在目录。如下:

[img]http://dl.iteye.com/upload/attachment/0074/2144/c97abd54-dfb3-39c2-a476-de7a2de766d3.jpg[/img]
点击load,加载进来。设置要打的包的路径,这个路径一般设置在文件web-inf下面,且文件名应该和web.xml的设置保存一致。如下所示:
[img]http://dl.iteye.com/upload/attachment/0074/2147/858127e0-3613-38a5-89e4-68dc23ba99b4.jpg[/img]
点击下一步就发布完成了。
在Myeclipse工程中正常的显示为:

[img]http://dl.iteye.com/upload/attachment/0074/2149/6f10ea10-1240-3907-a57d-b69043bf61b2.jpg[/img]

[color=red]再讲讲遇到的问题[/color],可能在weblogic,遇到客户端访问报错的问题,其实也是服务端的jar包冲突,解决办法是优先使用web工程的jar包,可在WEB-INF下加上一个weblogic.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>

<weblogic-web-app xmlns="http://www.bea.com/ns/weblogic/90">

<container-descriptor>

<prefer-web-inf-classes>[color=red]true[/color]</prefer-web-inf-classes>

</container-descriptor>

</weblogic-web-app>
true表示是优先使用web工程的jar文件。

web.xml内容(没有建立的话需要新建)如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:j2ee="http://java.sun.com/xml/ns/j2ee">
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>


客户端调用代码如下:

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文件的命名空间名,也就是<wsdl:definitions>元素的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就可验证是否发布成功了。
已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页