IDEA创建WebServices简单入门案例
2016-10-30 21:22
447 查看
axis jar包下载
Demo代码下载
图2-1
图2-2
图2-3
图2-4
如果是eclipse,就用eclipse的方式把jar导入工程中,这里就不详细说明了。详情见图3-1
图3-1
server-config.wsdd:
HelloWorld.java:
图5-1
图5-2
图5-3
图5-4
图6-1
输入http://localhost:8080/webservices/services,如果出现图6-2中的信息说明服务成功启动了,注:webservices为图5-4配置的项目地址
图6-2
其中有style="document"和没有style="document"的参数传输方式是不同的,至于RPC-style和Document-style的具体区别,这里就不多介绍了,我这里就只单单介绍参数传输方式。
运行TestHelloService,服务端和客户端的控住台都会打印出Hello, world, from Ouyang,说明运行成功。
world, from Ouyang,CSDN说明运行成功!简单的一个webservcies入门案例就到此为止了,再深入的研究就要靠各位自由发挥了。
http://nopainnogain.iteye.com/blog/791525 http://www.iteye.com/problems/46115
Demo代码下载
1.什么是WebServices
具体的相关概念和专业解释大家可以去网上查找。我这里就说的通俗一点,就是别人可以通过你项目的网络地址,调用你的方法,具体使用方法请见下文。2.创建一个webservices项目
我这里使用的工具是IDEA,大家如果使用的eclipse也不要紧,只需之后手动导入相关jar包,再修改一下wsdl文件即可。1)创建新工程
File->New->Project...,如下图2-1:图2-1
2)选择webServices工程
这里我们选择Use library而不选择Download,因为Download的话有可能会因为网络原因连接不到资源,导致一直下载不了jar包。Vservion选择apache Axis。具体步骤见图2-2:图2-2
3)选择jar包
进入axis jar包所在目录,选择所有jar包,然后点击OK。详情见图2-3:图2-3
4)完成工程创建
输入工程名字,点击Filish,详情见图2-4图2-4
3.为工程导入jar包
File->Project Structure->problem->Fix->Add...如果是eclipse,就用eclipse的方式把jar导入工程中,这里就不详细说明了。详情见图3-1
图3-1
4.编辑wsdd文件
如果是IDEA,你会发现工具已经在WEB-INF下生成好了server-config.wsdd,同时src下建好了example包,包下有HelloWord.java,就不用我们手动书写了,如果是eclipse,请在WEB-INFO下手动创建server-config.wsdd,src下建example包,包下建HelloWord.java,具体代码如下:server-config.wsdd:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> <globalConfiguration> <parameter name="sendMultiRefs" value="true"/> <parameter name="disablePrettyXML" value="true"/> <parameter name="adminPassword" value="admin"/> <parameter name="dotNetSoapEncFix" value="true"/> <parameter name="enableNamespacePrefixOptimization" value="false"/> <parameter name="sendXMLDeclaration" value="true"/> <parameter name="sendXsiTypes" value="true"/> <parameter name="attachments.implementation" value="org.apache.axis.attachments.AttachmentsImpl"/> <requestFlow> <handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="session"/> </handler> <handler type="java:org.apache.axis.handlers.JWSHandler"> <parameter name="scope" value="request"/> <parameter name="extension" value=".jwr"/> </handler> </requestFlow> </globalConfiguration> <handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/> <handler name="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/> <handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/> <service name="AdminService" provider="java:MSG"> <parameter name="allowedMethods" value="AdminService"/> <parameter name="enableRemoteAdmin" value="false"/> <parameter name="className" value="org.apache.axis.utils.Admin"/> <namespace>http://xml.apache.org/axis/wsdd/</namespace> </service> <service name="Version" provider="java:RPC"> <parameter name="allowedMethods" value="getVersion"/> <parameter name="className" value="org.apache.axis.Version"/> </service> <service name="SOAPMonitorService" provider="java:RPC"> <parameter name="allowedMethods" value="publishMessage"/> <parameter name="scope" value="Application"/> <parameter name="className" value="org.apache.axis.monitor.SOAPMonitorService"/> </service> <service name="HelloWorld" provider="java:RPC" style="document" use="literal"> <parameter name="className" value="example.HelloWorld"/> <parameter name="allowedMethods" value="*"/> <parameter name="scope" value="Application"/> <namespace>http://example</namespace> </service> <handler name="soapmonitor" type="java:org.apache.axis.handlers.SOAPMonitorHandler"> <parameter name="wsdlURL" value="/axis/SOAPMonitorService-impl.wsdl"/> <parameter name="serviceName" value="SOAPMonitorService"/> <parameter name="namespace" value="http://tempuri.org/wsdl/2001/12/SOAPMonitorService-impl.wsdl"/> <parameter name="portName" value="Demo"/> </handler> <transport name="http"> <requestFlow> <handler type="URLMapper"/> <handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/> <!--comment following line for REMOVING wsdl spying via SOAPMonitor--> <handler type="soapmonitor"/> </requestFlow> <responseFlow> <!--comment following line for REMOVING wsdl spying via SOAPMonitor--> <handler type="soapmonitor"/> </responseFlow> <parameter name="qs:list" value="org.apache.axis.transport.http.QSListHandler"/> <parameter name="qs:wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> <parameter name="qs.list" value="org.apache.axis.transport.http.QSListHandler"/> <parameter name="qs.method" value="org.apache.axis.transport.http.QSMethodHandler"/> <parameter name="qs:method" value="org.apache.axis.transport.http.QSMethodHandler"/> <parameter name="qs.wsdl" value="org.apache.axis.transport.http.QSWSDLHandler"/> </transport> <transport name="local"> <responseFlow> <handler type="LocalResponder"/> </responseFlow> </transport> </deployment>
HelloWorld.java:
package example;/**
* Created by Ouyang on 2016/10/30. */ public class HelloWorld { public String sayHelloWorldFrom(String from) { String result = "Hello, world, from " + from; System.out.println(result); return result; } }
5.配置tomcat
这里简单介绍一下idea下的配置过程,eclipse的就不多说了1)打开Edit Configuration
见图5-1:图5-1
2)添加tomcat
详情见图5-2图5-2
3)配置tomcat
详情见图5-3图5-3
4)配置项目地址
详情见图5-4图5-4
6.启动服务
图6-1
输入http://localhost:8080/webservices/services,如果出现图6-2中的信息说明服务成功启动了,注:webservices为图5-4配置的项目地址
图6-2
7.客户端调用webservices方法
我们注意到server-config.wsdd中有这样一段代码:<service name="HelloWorld" provider="java:RPC" style="document" use="literal"> <parameter name="className" value="example.HelloWorld"/> <parameter name="allowedMethods" value="*"/> <parameter name="scope" value="Application"/> <namespace>http://example</namespace> </service>
其中有style="document"和没有style="document"的参数传输方式是不同的,至于RPC-style和Document-style的具体区别,这里就不多介绍了,我这里就只单单介绍参数传输方式。
1)Document-style
保留style="document",随便新建一个项目,创建Test.java,代码如下:import java.io.IOException; import java.net.MalformedURLException; import java.util.Vector; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.SOAPBodyElement; import org.apache.axis.utils.XMLUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.w3c.dom.Element; /** * @author Ouyang * * 测试调用WebService */ public class TestHelloService { private static final Log log = LogFactory.getLog(TestHelloService.class); private static final String HELLO_SERVICE_ENDPOINT = "http://localhost:8080/webservices/services/HelloWorld?wsdl";//HelloWord的wsdl地址 public static void main(String[] args) { TestHelloService tester = new TestHelloService(); tester.callSayHello(); } public void callSayHello() { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL( HELLO_SERVICE_ENDPOINT)); SOAPBodyElement[] input = new SOAPBodyElement[1]; input[0] = new SOAPBodyElement(XMLUtils.StringToElement("http://HelloWorld", "sayHelloWorldFrom", "Ouyang"));//http://HelloWorld可以随便填,sayHelloWorldFrom是方法名,Ouyang是参数值 try { //远程调用发布的方法 Vector rtn = (Vector) call.invoke(input); Element result=((SOAPBodyElement)rtn.get(0)); System.out.println(result.getFirstChild().getNodeValue()); return; } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } log.error("call sayHello service error!"); } }http://localhost:8080/webservices/services/HelloWorld?wsdl可由图6-2中,点击HelloWorld后的wsdl获得地址
运行TestHelloService,服务端和客户端的控住台都会打印出Hello, world, from Ouyang,说明运行成功。
2)RPC-style
document-style是不能传递两个以上的参数的,要传递两个以上的参数就只能用RPC-style(也有可能有大神能用document-style传递多个参数,只是我暂时不知道方法)。1>改写server-config.wsdd
停止axisDemo的tomcat,找如下代码:<service name="HelloWorld" provider="java:RPC" style="document" use="literal"> <parameter name="className" value="example.HelloWorld"/> <parameter name="allowedMethods" value="*"/> <parameter name="scope" value="Application"/> <namespace>http://example</namespace> </service>删掉style="document"
2>改写HelloWrold
代码如下:package example;/** * Created by Ouyang on 2016/10/30. */ public class HelloWorld { public String sayHelloWorldFrom(String from,String from2) { String result = "Hello, world, from " + from + "," + from2; System.out.println(result); return result; } }重启tomcat
3>改写TestHelloService
代码如下:import java.io.IOException; import java.net.MalformedURLException; import javax.xml.namespace.QName; import javax.xml.rpc.ServiceException; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * @author Ouyang * * 测试调用WebService */ public class TestHelloService { private static final Log log = LogFactory.getLog(TestHelloService.class); private static final String HELLO_SERVICE_ENDPOINT = "http://localhost:8080/webservices/services/HelloWorld?wsdl";//HelloWord的wsdl地址 public static void main(String[] args) { TestHelloService tester = new TestHelloService(); tester.callSayHello(); } public void callSayHello() { try { Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new java.net.URL( HELLO_SERVICE_ENDPOINT)); call.setOperationName(new QName("http://", "sayHelloWorldFrom"));//"http://"可以随便填,sayHelloWorldFrom就是方法名 call.addParameter("from", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN); call.addParameter("from2", org.apache.axis.Constants.XSD_STRING, javax.xml.rpc.ParameterMode.IN);//form和from2也可以改为其他英文字母 call.setReturnType(org.apache.axis.Constants.XSD_STRING); try { //远程调用发布的方法 String ret = (String) call.invoke(new Object[] { "Ouayng","CSDN" });//"Ouayng","CSDN"分别对应sayHelloWorldFrom中的from和from2 System.out.println("The return value is:" + ret); return; } catch (IOException e) { e.printStackTrace(); } } catch (MalformedURLException e) { e.printStackTrace(); } catch (ServiceException e) { e.printStackTrace(); } log.error("call sayHello service error!"); } }运行TestHelloService,服务端和客户端的控住台都会打印出Hello,
world, from Ouyang,CSDN说明运行成功!简单的一个webservcies入门案例就到此为止了,再深入的研究就要靠各位自由发挥了。
8.相关文章推荐
以下两篇文章是我入门学习时的参考,大家可以参考一下:http://nopainnogain.iteye.com/blog/791525 http://www.iteye.com/problems/46115
相关文章推荐
- 关于idea maven工程创建struts2入门配置及案例
- CodeIgniter 入门:快速简单地创建 MVC 应用程序
- cegui 4 创建CEGUI窗口入门——讲述如何创建一个简单的CEGUI窗口.
- node.js入门 - 2.创建一个简单聊天室
- CodeIgniter入门案例之简单新闻系统一
- spring MVC 入门(实例一)创建简单springMVC
- Macriomedia Flex入门教程第二部分――创建一个简单的计算器
- Java开源报表Jasper入门(2) -- 使用JasperSoft Studio创建一个简单报表
- ACE入门学习之创建简单的服务器端和客户端
- JAX-WS集成Web工程的Web Service的创建和发布简单入门(1)
- CodeIgniter入门案例之简单新闻系统三
- 简单创建jar可执行文件.(入门)
- 创建CEGUI窗口入门——讲述如何创建一个简单的CEGUI窗口
- QT编程入门--用代码创建简单的窗口
- Jbox2D入门学习一物理世界及最简单的物体创建
- windbg入门之旅:(2)一个简单的integer divide-by-zero exception分析案例
- SQL server触发器入门1-创建一个简单的触发器
- CodeIgniter 入门:快速简单地创建 MVC 应用程序
- 全文检索Lucene入门之创建索引及简单搜索
- 使用 ADD-ON SDK 开发 基于 Html JQuery 和 CSS 的 firefox 插件入门教程1: 创建一个简单的 Add-on