创建webservice 用service.xml配置(复杂点的方法)
用Axis2实现Web Service,虽然可以将POJO类放在axis2/WEB-INF/pojo目录中直接发布成Web Service,这样做不需要进行任何配置,但这些POJO类不能在任何包中。这似乎有些不方便,为此,Axis2也允许将带包的POJO类发布成Web Service。 看网上的一些例子都比较简单,就是些打印之类的方法.看了些例子动手建了一个,下面把步骤贴上: 另附源码:http://download.csdn.net/detail/liweifengwf/5762875 一、新建一个web程序?webservice01 二、把官网的 axis2.war 中的 conf、modules、services、和lib中的jar包考到WEB-INF中 在services中新建文件夹 META-INF 中新建 service.xml 这个文件中写 关于服务类的配置 结构如下图: services中的文件夹要和服务类相同,不知道为什么,这点理解的不够,肯定还有其他的方法。 三、修改web.xml文件,添加以下内容
<!--Axis2 config start--> <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> <!--Axis2 end--> 四、实体类 User
package data; import java.io.Serializable; /** * <b>function:</b>User Entity * @author hoojo * @createDate Dec 16,2010 10:20:02 PM * @file User.java * @package com.hoo.entity * @project AxisWebService * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class User implements Serializable { private static final long serialVersionUID = 677484458789332877L; private int id; private String name; private String email; private String address; //getter/setter public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } @Override public String toString() { return this.id + "#" + this.name + "#" + this.email + "#" + this.address; } }五、建服务类:
package com.cn; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Random; import data.User; /** * <b>function:</b>复杂类型数据的WebService:字节数组、返回一维int数组、二维String数组及自定义JavaBean对象等 */ public class ComplexTypeService { public String upload4Byte(byte[] b,int len) { String path = ""; FileOutputStream fos = null; try { String dir = System.getProperty("user.dir"); File file = new File(dir + "/" + new Random().nextInt(100) + ".jsp"); fos = new FileOutputStream(file); fos.write(b,len); path = file.getAbsolutePath(); System.out.println("File path: " + file.getAbsolutePath()); } catch (Exception e) { e.printStackTrace(); } finally { try { fos.close(); } catch (IOException e) { e.printStackTrace(); } } return path; } public int[] getArray(int i) { int[] arr = new int[i]; for (int j = 0; j < i; j++) { arr[j] = new Random().nextInt(1000); } return arr; } public String[][] getTwoArray() { return new String[][] { { "中国","北京" },{ "日本","东京" },{ "中国","上海","南京" } }; } public User getUser() { User user = new User(); user.setAddress("china"); user.setEmail("jack@223.com"); user.setName("jack"); user.setId(22); return user; } }六、service.xml文件配置
<?xml version="1.0" encoding="UTF-8"?> <service name="ComplexTypeService"> <description> ComlxexTypeService Service Example </description> <parameter name="ServiceClass"> com.cn.ComplexTypeService </parameter> <operation name="upload4Byte"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="getArray"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="getTwoArray"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> <operation name="getUser"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </operation> </service> 其实operation元素不用每个方法都去配置的,也可以加上一个通用的 <!-- 也可以全部通用一个配置 --> <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> 七、客户端
package com.hoo.service; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import javax.xml.namespace.QName; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; import org.apache.axis2.rpc.client.RPCServiceClient; import data.User; /** * <b>function:</b>复杂类型数据WebService客户端调用代码 */ public class ComplexTypeServiceClient { public static void main(String[] args) throws IOException { RPCServiceClient client = new RPCServiceClient(); Options options = client.getOptions(); String address = "http://localhost:8080/axis2/services/ComplexTypeService"; EndpointReference epr = new EndpointReference(address); options.setTo(epr); QName qname = new QName("http://ws.apache.org/axis2","upload4Byte"); String path = System.getProperty("user.dir"); File file = new File(path + "/WebRoot/index.jsp"); FileInputStream fis = new FileInputStream(file); int len = (int) file.length(); byte[] b = new byte[len]; int read = fis.read(b); //System.out.println(read + "#" + len + "#" + new String(b)); fis.close(); Object[] result = client.invokeBlocking(qname,new Object[] { b,len },new Class[] { String.class }); System.out.println("upload:" + result[0]); qname = new QName("http://ws.apache.org/axis2","getArray"); result = client.invokeBlocking(qname,new Object[] { 3 },new Class[] { int[].class }); int[] arr = (int[]) result[0]; for (Integer i : arr) { System.out.println("int[] :" + i); } qname = new QName("http://ws.apache.org/axis2","getTwoArray"); result = client.invokeBlocking(qname,new Object[] {},new Class[] { String[][].class }); String[][] arrStr = (String[][]) result[0]; for (String[] s : arrStr) { for (String str : s) { System.out.println("String[][]: " + str); } } qname = new QName("http://ws.apache.org/axis2","getUser"); result = client.invokeBlocking(qname,new Class[] { User.class }); User user = (User) result[0]; System.out.println("User: " + user); } }八、重启tomcat 访问http://localhost:8080/axis2/services/ComplexTypeService?wsdl,看到wsdl页面说明配置成功。 运行客户端得到如下: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |