- 浏览: 20605 次
- 性别:
- 来自: 上海
最新评论
axis web service
以前对axis 生成web service一直比较糊涂,发现个人说个人的,好像有很多方法一样, 最近特意查了查资料总结一下。
axis 生成webservice有3 种 方式,
1, Dynamic invocation interface
2, Dynamic proxy
3, sub
下面分别做简单介绍
在开始之前先环境配置:
下载axis 包解压, 把webapps/axis 下的所有文件都拷贝到你的web 工程下,
这样你就可以在你工程里生成web service和利用一些axis提供的工具.
打开: http://localhost:9081/TestWebService/index.jsp
这里去验证你的环境是否建立成功。
在电脑环境变量里增加
这里注意我把mail-1.4.jar 和 activation.jar也加进来了,这两个本来不在lib目录下,但是axis需要依赖我就加进来了
http://localhost:9081/TestWebService/servlet/AxisServlet
可以查看现在服务器上都部署了那些服务
第1种
动态接口调用,使用及时发布,用户只需提供java类源代码,axis会自动处理的
heloWorld.java
将hellWorld.java 拷贝到 %TOMCAT_HOME%\webpps\axis下,改名为HelloWorld.jws, 这样就发布成功了。
测试代码:
第2种 Dynamic proxy
将HelloWorld.java编译成HelloWorld.class 放到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classe下
在 %TOMCAT_HOME%\webapps\axis\WEB-INF下建立deploy.wsdd文件,soap服务发布描述文件
在doc目录下到 %TOMCAT_HOME%\webapps\axis\WEB-INF,命令
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wssd
就会发现多了一个servver-config.wsdd文件,这个就是配置文件,
访问 http://localhost:8080/axis/servlet/AxisServlet
测试代码:
第3种 stub 方式
编写完代码后, 在WEB-INF 下新建立一个文件 deploy.wsdd
这里需要注意beanMapping,因为card是一个java bean.
这个时候已经完成了代码编写, 如果你的环境是好的,就可以进入发布环节,如果环境没好,请参考环境建立部分。
在WEB-INF下面执行命令
系统提示 <Admin>Done processing </Admin>
就说明发布成功, 可以去 http://localhost:9081/TestWebService/servlet/AxisServlet 查看已经部署结果,
可以用 http://localhost:9081/TestWebServices/services/orderService?wsdl
获得这个service 的wsdl 文件
测试这个webservice时可以用 WSDL2Java 生成测试的 类,
执行命令:
java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java -o c:\\temp -p com.webService orderService.wsdl
就可以根据wsdl文成生成客户端调用代码类,
调用类
执行就的到结果: one two three
handler:
deploy.wsdd:
客户端代码:
axis 生成webservice有3 种 方式,
1, Dynamic invocation interface
2, Dynamic proxy
3, sub
下面分别做简单介绍
在开始之前先环境配置:
下载axis 包解压, 把webapps/axis 下的所有文件都拷贝到你的web 工程下,
这样你就可以在你工程里生成web service和利用一些axis提供的工具.
打开: http://localhost:9081/TestWebService/index.jsp
这里去验证你的环境是否建立成功。
在电脑环境变量里增加
AXIS_HOME: C:\MyThings\book\program\axis-1_4 AXIS_LIB : C:\MyThings\book\program\axis-1_4\lib AXISCLASSPATH : C:\MyThings\book\program\axis-1_4\lib\axis.jar;C:\MyThings\book\program\axis-1_4\lib\axis-ant.jar;C:\MyThings\book\program\axis-1_4\lib\commons-discovery-0.2.jar;C:\MyThings\book\program\axis-1_4\lib\commons-logging-1.0.4.jar;C:\MyThings\book\program\axis-1_4\lib\jaxrpc.jar;C:\MyThings\book\program\axis-1_4\lib\log4j-1.2.8.jar;C:\MyThings\book\program\axis-1_4\lib\saaj.jar;C:\MyThings\book\program\axis-1_4\lib\wsdl4j-1.5.1.jar;C:\MyThings\book\program\axis-1_4\lib\activation.jar;C:\MyThings\book\program\axis-1_4\lib\mail-1.4.jar
这里注意我把mail-1.4.jar 和 activation.jar也加进来了,这两个本来不在lib目录下,但是axis需要依赖我就加进来了
http://localhost:9081/TestWebService/servlet/AxisServlet
可以查看现在服务器上都部署了那些服务
第1种
动态接口调用,使用及时发布,用户只需提供java类源代码,axis会自动处理的
heloWorld.java
public class HelloWorld{ public String sayHello(){ return "Hello World"; } }
将hellWorld.java 拷贝到 %TOMCAT_HOME%\webpps\axis下,改名为HelloWorld.jws, 这样就发布成功了。
测试代码:
import java.net.URL; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class CitiCardSericeTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String endpoint = "http://localhost:8080/axis/HelloWorld.jws"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); call.setOperationName("sayHello"); String res = (String) call.invoke(new Object[] {}); System.out.println(res); } } 如果复杂对象: QName qn=new QName("urn:beanservice","User"); call.registerTypeMapping(User.class, qn, new BeanSerializerFactory(User.class,qn), new BeanDeserializerFactory(User.class,qn)); User user=new User(); user.setAge("10"); user.setName("duant"); String res = (String) call.invoke(new Object[] {user}); System.out.println(res); 或者 call.addParameter( "arg1", qn, ParameterMode.IN );
第2种 Dynamic proxy
将HelloWorld.java编译成HelloWorld.class 放到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classe下
在 %TOMCAT_HOME%\webapps\axis\WEB-INF下建立deploy.wsdd文件,soap服务发布描述文件
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="HelloWorld" provider="java:RPC"> <parameter name="className" value="HelloWorld" /> <parameter name="allowedMethods" value="*" /> </service> </deployment>
在doc目录下到 %TOMCAT_HOME%\webapps\axis\WEB-INF,命令
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wssd
就会发现多了一个servver-config.wsdd文件,这个就是配置文件,
访问 http://localhost:8080/axis/servlet/AxisServlet
测试代码:
import java.net.URL; import org.apache.axis.client.Call; import org.apache.axis.client.Service; public class CitiCardSericeTest { /** * @param args * @throws Exception */ public static void main(String[] args) throws Exception { String endpoint="http://localhost:8080/axis/services/HelloWorld"; //和1不同 Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); call.setOperationName("sayHello"); String res = (String) call.invoke(new Object[] {}); System.out.println(res); } }
第3种 stub 方式
package com.webService; public class OrderService { public String orderProduce(String name, String address, String item, int quantity, Card card){ String orderInfo=name+" "+address+" "+item+" "+card.getName(); return orderInfo; } }
package com.webService; public class Card { private String name; private String age; public String getAge() { return age; } public void setAge(String age) { this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
编写完代码后, 在WEB-INF 下新建立一个文件 deploy.wsdd
这里需要注意beanMapping,因为card是一个java bean.
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <service name="OrderService" provider="java:RPC"> <parameter name="className" value="com.webService.OrderService" /> <parameter name="allowedMethods" value="*" /> <beanMapping languageSpecificType="java:com.webService.Card" qname="myNsn:Card" xmlns:myNsn="urn:BeanService" /> </service> </deployment>
这个时候已经完成了代码编写, 如果你的环境是好的,就可以进入发布环节,如果环境没好,请参考环境建立部分。
在WEB-INF下面执行命令
java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient -lhttp://localhost:9081/TestWebServices/services/orderService deploy.wsdd
系统提示 <Admin>Done processing </Admin>
就说明发布成功, 可以去 http://localhost:9081/TestWebService/servlet/AxisServlet 查看已经部署结果,
可以用 http://localhost:9081/TestWebServices/services/orderService?wsdl
获得这个service 的wsdl 文件
测试这个webservice时可以用 WSDL2Java 生成测试的 类,
执行命令:
java -cp %AXISCLASSPATH% org.apache.axis.wsdl.WSDL2Java -o c:\\temp -p com.webService orderService.wsdl
就可以根据wsdl文成生成客户端调用代码类,
card.java, OrderService_PortType.java, OrderServiceService.java, OrderServiceServiceLocator.java, OrderServiceSoapBindingStub.java
调用类
package com.webService; import java.rmi.RemoteException; import javax.xml.rpc.ServiceException; public class Client { /** * @param args */ public static void main(String[] args) { OrderServiceServiceLocator locator=new OrderServiceServiceLocator(); try { OrderService_PortType service=locator.getOrderService(); Card card=new Card(): card.setName("laoslais"); String res=service.orderProduce("one", "two", "three", 2, card); System.out.println(res); } catch (ServiceException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (RemoteException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
执行就的到结果: one two three
handler:
package com.webService.haddler; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import java.util.Date; import javax.xml.soap.SOAPException; import org.apache.axis.AxisFault; import org.apache.axis.Handler; import org.apache.axis.MessageContext; import org.apache.axis.handlers.BasicHandler; public class LogHandler extends BasicHandler { private static final long serialVersionUID = 1L; public void invoke(MessageContext context) throws AxisFault { Handler handler=context.getService(); String filename=(String) this.getOption("filename"); try { FileOutputStream fos=new FileOutputStream(filename,true); PrintWriter write=new PrintWriter(fos); Integer counter=(Integer)handler.getOption("accesses"); if(counter==null){ counter=new Integer(1); } counter=new Integer(counter.intValue()+1); Date date=new Date(); context.getMessage().writeTo(System.out); String result="date web service:"+context.getTargetService()+" call "+counter; handler.setOption("accesses", counter); write.println(result); write.close(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (SOAPException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
deploy.wsdd:
<service name="OrderService" provider="java:RPC"> <parameter name="className" value="com.webService.OrderService" /> <parameter name="allowedMethods" value="*" /> <requestFlow> <handler name="logging" type="java:com.webService.haddler.LogHandler"> <parameter name="filename" value="c:\\temp\\myservice.log" /> </handler> </requestFlow> </service>
客户端代码:
private static Logger logger=Logger.getLogger(AbstractServiceInvoke.class); private GbLogger m_gblog; private URL endPoint; protected Call call; public AbstractServiceInvoke(URL endPoint) throws ServiceException{ this.endPoint = endPoint; Service service = new Service(); this.call = (Call) service.createCall(); this.call.setTargetEndpointAddress(this.endPoint); this.setCommonlPropety(); } public URL getEndPoint() { return endPoint; } protected void setCommonlPropety(){ call.setEncodingStyle("http://schemas.xmlsoap.org/soap/encoding/"); call.setProperty(org.apache.axis.client.Call.SEND_TYPE_ATTR, Boolean.FALSE); call.setProperty(org.apache.axis.AxisEngine.PROP_DOMULTIREFS, Boolean.FALSE); call.setSOAPVersion(org.apache.axis.soap.SOAPConstants.SOAP11_CONSTANTS); } protected void registerTypeMapping(Class cls,QName qn){ call.registerTypeMapping(cls, qn, new BeanSerializerFactory(cls,qn), new BeanDeserializerFactory(cls,qn)); } protected void registerTypeMapping(String name,Class cls){ QName qn=new QName("urn:beanservice",name); call.registerTypeMapping(cls, new QName("urn:beanservice",name), new BeanSerializerFactory(cls,qn), new BeanDeserializerFactory(cls,qn)); } protected void registerTypeMapping(Class cls){ String name=cls.getSimpleName(); this.registerTypeMapping(name, cls); } protected void setInputType(QName qn,Class cls){ call.addParameter(qn.getLocalPart(), qn,cls, ParameterMode.IN ); } protected void setInputType(String name,Class cls){ QName qn=new QName("urn:beanservice",name); call.addParameter(name, qn,cls, ParameterMode.IN ); } protected void setInputType(Class cls){ String name=cls.getSimpleName(); this.setInputType(name, cls); } protected void setReturnType(Class cls){ this.call.setReturnClass(cls); } protected Object invokeMethod(Object input,Class output,String operationName) throws RemoteException{ String DEBUG_HDR = Utilities.getMethodInfo(); try{ Class inputCls=input.getClass(); if(m_gblog != null){ m_gblog.info(DEBUG_HDR + " input class:"+inputCls.getSimpleName()); }else{ logger.debug(DEBUG_HDR + " input class:"+inputCls.getSimpleName()); } this.registerTypeMapping(inputCls); this.setInputType(inputCls); this.registerTypeMapping(output); this.setReturnType(output); if(m_gblog != null){ m_gblog.info(DEBUG_HDR + " return class:"+output.getSimpleName()); }else{ logger.debug(DEBUG_HDR + " return class:"+output.getSimpleName()); } this.call.setOperationName(operationName); if(m_gblog != null){ m_gblog.info(DEBUG_HDR + " operationName:"+operationName); }else{ logger.debug(DEBUG_HDR + " operationName:"+operationName); } Object res=this.call.invoke(new Object[] {input}); return res; }finally{ this.printDebugInfo(); } }
相关推荐
AXIS Web Service是一种基于Java的开源工具,用于创建和部署Web服务。它是Apache软件基金会的项目,主要用于简化SOAP(简单对象访问协议)处理,使得开发人员可以轻松地将Java类转换为Web服务或调用远程Web服务。在...
总结来说,"axis web service例子"是一个实践性的教学资源,帮助开发者深入理解Java Axis Web服务的工作机制,包括服务的创建、部署和调用。通过实际操作,学习者可以提升自己的Web服务开发技能,为未来的项目开发...
【Axis Web Service】是一种基于Java的开源Web服务框架,它由Apache软件基金会开发,主要用于创建和部署Web服务。Axis提供了一种简单的方式来实现SOAP(Simple Object Access Protocol)通信,允许不同平台上的应用...
Axis Web Service教程是针对Java开发者的一个重要学习资源,它涵盖了从基础到高级的Web服务开发技术。Axis是一个开源的SOAP栈,由Apache软件基金会维护,主要用于构建和部署Web服务。本教程将帮助你理解并掌握如何...
axis web service client 源码
AXIS(Axis2)是Apache软件基金会开发的一个开源Web服务框架,主要用于构建高效、灵活且可扩展的Web服务。在本资源包中,包含了AXIS开发所需的几个关键组件,让我们一一解析它们的功能和用途。 1. **xmlsec-1[1]....
### Axis开发Web Service实例详解 #### 一、概述 在探讨如何使用Apache Axis来开发Web Service之前,我们首先需要了解一些基本概念。 **Web Service**是一种标准的技术框架,用于实现不同平台之间的应用通信。它...
AXIS 是 Apache 开源项目提供的一款强大的 Web Service 引擎,用于开发和部署 Web Service。在本文中,我们将深入探讨如何使用 AXIS 在 Tomcat 6.0.26 上进行配置,并详细介绍三种部署和调用 Web Service 的方法:...
### Axis 开发 Web Service 程序详解 #### 一、Web Service 概念与应用场景 Web Service 是一种跨编程语言和操作系统平台的远程调用技术。它允许不同语言编写的程序通过网络进行通信和数据交换。Web Service 的...
基于AXIS2实现Web Service开发是一项常见的任务,尤其在企业级应用中,Web Service作为不同系统间通信的重要桥梁。AXIS2是Apache软件基金会提供的一个轻量级、高性能的Web Service框架,它提供了完整的Web Service...
描述 "axis web service 写的例子 里面有自定类的序列化与反序列化的例子" 强调了这个示例项目的核心内容。在Web服务中,序列化是将Java对象转换为可以在网络上传输的数据格式(如XML)的过程,而反序列化则是接收...
【标题】基于Axis的Web Service客户端调用 在IT领域,Web Service是一种通过网络进行通信的标准协议,它允许不同系统间的应用程序互相交换数据。而Apache Axis是Java平台上的一个开源工具,专门用于创建和部署Web ...
【Apache Axis2 Web Service 教程】 Apache Axis2 是一个流行的开源Web服务框架,用于创建、部署和管理高性能的Web服务。本教程将详细介绍如何在Eclipse环境中利用Apache Axis2搭建Web服务及其客户端。 **环境配置...
### MyEclipse下开发Web Service(Axis):深入解析与实践指南 #### 一、环境配置与准备 在深入探讨如何使用Apache Axis在MyEclipse环境下构建Web Services之前,首要任务是确保拥有一个完整的开发环境。这包括但不...
### 学习在JBoss上部署Axis Web Service #### 知识点概述 本文主要介绍如何在JBoss应用服务器上部署Axis Web Service。通过详细步骤和背景知识的讲解,帮助读者掌握这一技能。 #### 一、环境搭建与准备工作 1. *...
【用Axis2开发Web Service】是本文的核心主题,轴心技术是Java开发Web服务的一种框架,相较于Axis1,其过程更为简洁。以下是关于使用Axis2开发Web Service的详细步骤和知识点: 1. **实验环境搭建**: - 首先确保...
### 使用Axis开发Web Service程序 #### 一、概述 随着互联网技术的发展,Web Service作为一种标准的、基于XML的网络服务形式,在实现不同平台之间数据交换和应用集成方面扮演着重要角色。Axis作为Apache组织下的一...
【MyEclipse7.0创建基于Axis的Web服务】\n\nWeb服务是一种基于标准的、平台无关的方式,使得应用程序可以相互通信。在本文中,我们将深入探讨如何使用MyEclipse7.0,一个强大的Java集成开发环境,来创建、发布以及...