手动配置WebService入门实例
1.AXIS2简介: Apache Axis2项目是一个基于Java语言的Web services系统服务和客户端的实现。为了从Apache Axis 1.0中获取教训,Apache Axis2提供了一个完整的对象模型和模块化体系结构,这样可以很容易的添加功能以及支持一个新的与Web services相关的说明和建议。Axis2可以让你很容易的执行以下任务: (1).发送SOAP消息。 (2).接收和处理SOAP消息。 (3).从一个普通的Java类建立Web service。 (4).用WSDL来建立实现服务和客户端的实现类。 (5).很容易的从一个服务来获取WSDL。 (6).发送和接收带有附件的SOAP消息。 (7).建立或者使用基于REST的Web service。 (8).建立或者使用从WS-Security,?WS-ReliableMessaging,?WS-Addressing,?WS-Coordination和WS-Atomic Transaction获取优势的服务。 (9).当新建议出现时,使用Axis2的模块化结构来很容易的加入对它的支持。 2.配置AXIS2环境: (1).下载Axis2,去http://ws.apache.org/axis2/下载axis2的最新版本,一般是两个zip文件,如axis2-1.4.1-bin.zip(包含了Axis2中所有的jar文件)和axis2-1.4.1-war.zip(用于将WebService发布到web容器中)。 (3).在浏览器地址栏中输入如下的URL:http://localhost:8080/axis2/”,应该可以进入axis2的欢迎界面,点击”Validate”如果没有报错,则说明axis2的环境已经配置好。 (4).点击”Administration”,初始用户名和密码分别是:admin和axis2,也可以到” %Tomcat%/webapps/axis2/WEB-INF/conf/axis2.xml”下修改用户名和密码。 3.POJO发布成AXIS2 WebService的简单例子: (1).编程普通的java类,将编译过后的”.class”文件拷贝到axis2的POJO发布目录”%Tomcat%/webapps/axis2/WEB-INF/POJO”中。 (2).启动Tomcat,POJO即被发布成了WebService,java类中中所有的public方法即被发布成WebService的Operation。 注意:POJO类不能使用package关键字声明包,AXIS2默认是热部署的。 4.POJO无配置发布高级: 由于AXIS2的POJO发布方式不支持Package,若类中需要调用其他类的方法时,需要将所引用的类编译后的”.class”文件拷贝到”%Tomcat%/webapps/axis2/WEB-INF/classes”目录下。 编写pojo类User.java,注意:1、网络传输的对象要序列化 2、没有包名? 3、先编译成.class文件,在放置到WEB-INF/POJO中,没有该目录,自行创建 public class User implements java.io.Serializable { private Integer userId; private String username="Hello world"; private String password; public Integer getUserId() { return this.userId; } public void setUserId(Integer userId) { this.userId = userId; } public String getUsername() { return this.username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return this.password; } public void setPassword(String password) { this.password = password; } }
编写客户端测试方法: package samland.webservice.demo; 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 Test { public static void main(String[] args) { try { //使用RPC方式调用WebService: RPCServiceClient client = new RPCServiceClient(); Options options=client.getOptions(); //指定调用WebService的URL: EndpointReference targetURL = new EndpointReference("http://localhost:8080/axis2/services/User"); options.setTo(targetURL); //指定调用服务方法的参数值: //指定传入参数 Object[] parameters = new Object[]{"wangxiaoya"}; //指定调用的命名空间和方法(setUsername) QName qname = new QName("http://ws.apache.org/axis2","setUsername"); //当被调用的方法没有返回值时,应该使用RPCServiceClient类的invokeRobust方法 client.invokeRobust(qname,parameters); Class[] classes = new Class[]{String.class}; QName qname2 = new QName("User","getUsername"); //当方法没有参数时,第二个参数值不能为null,而要使用new Object[]{} Object[] parameters2 = new Object[]{}; //三个参数第一个为QName对象,表示要调用的方法名;第二个参数表示要调用的//WebService方法的参数值;第三个参数表示WebService方法的返回值类型 Object result2 = client.invokeBlocking(qname2,parameters2,classes)[0]; System.out.println(result2); } catch (AxisFault e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
Hello world ?注意:namespace mismatch错误处理方法 在基于axis2进行WebService开发部署时(使用Java客户端调用服务)可能会报namespace mismatch require http://ws.apache.org/axis2 found http://ws.apache.org/axis2/xsd 这样的错误.根据本人的经验,当使用POJO这种方式开发时,Qname中的参数为http://ws.apache.org/axis2,在基于service.xml开发时其参数为http://service. ???? 当然当命名空间报错时在Java开发环境下,可以从调试窗口发现类似的信息:Exception in thread "main" org.apache.axis2.AxisFault: namespace mismatch require http://service found http://ws.apache.org/axis2 .将命名空间改为require后面的即可。在代码中进行搜索,然后修改即可。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |