`
wiwiluo
  • 浏览: 17728 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

简单的WebService

阅读更多

最近参考JE论坛上thh_r的《Web Service开发指南》,学习了一下WebService,做了一个简单的例子,废话不多说了。进入正题……

 

 

 

第一步:我使用的是xfire,所以请下载xfire发布服务的相关jar包(我已经把jar包用附件的形式上传了)

 

第二步:然后从最简单的Say Hello开始……首先建立一个Web工程,我的工程名是ws_service,用来发布服务。这个服务是可以提供给调用服务的人传递一个String类型的参数-name,然后返回一个形式为:${name} Say Hello!的字符串。

 

请将第一步下载的jar包全部放入本web工程的lib目录下,然后修改web.xml,添加以下这段代码,添加对xfire的监控

 

<!-- xfire config start -->
	<servlet>
		<servlet-name>XFireServlet</servlet-name>
		<servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
		<load-on-startup>0</load-on-startup>
	</servlet>
	<servlet-mapping>
		<servlet-name>XFireServlet</servlet-name>
		<url-pattern>/servlet/XFireServlet/*</url-pattern>
	</servlet-mapping>
	<servlet-mapping>
		<servlet-name>XFireServlet</servlet-name>
		<url-pattern>/service/*</url-pattern>
	</servlet-mapping>
	<!-- xfire config end -->

 

 

第三步:编写服务代码,例子很简单,一个名字为 IHelloWebService.java 的接口和他的实现类:HelloWebService.java

 

package com.ws.service;

public interface IHelloWebService {

	public String sayHello(String name);
	
}

 

package com.ws.service;

public class HelloWebService implements IHelloWebService {

	public String sayHello(String name) {

		return "[ " + name + " ] say : hello!!";

	}

}

  

 

 这就是本例子中发布的服务,十分简单,调用服务的人传递一个name的String类型参数,服务器返回给用户一段字符串

 

 

 第四步:在src文件夹下建立 \META-INF\xfire\   文件夹,请注意,不是WebRoot下的META-INF,否则xfire无法找到配置文件。在新建立的xfire文件夹下建立services.xml文件。代码如下

 

<?xml version="1.0" encoding="UTF-8"?>
<beans>
	<service xmlns="http://xfire.codehaus.org/config/1.0">
		
		<name>HelloWebService</name>
		
		<namespace>http://simple.xfire.webservice/HelloWebService</namespace>
		
		<serviceClass>com.ws.service.IHelloWebService</serviceClass>
		
		<implementationClass>com.ws.service.HelloWebService</implementationClass>
		
		<scope>request</scope>
		
	</service>

</beans>

 

 

<name></name>中的值就是本服务的名称

<namespace></namespace>为服务的命名空间

<serviceClass></serviceClass>是服务的接口,如果没有接口的话,这里就填写实现类的全路径

<implementationClass></implementationClass>中是实现类的路径,如果没有接口,则本属性可以不写

<scope></scope>为存活的范围

 

到现在为止,我们的服务就已经算发布成功了。请把工程部署并启动服务器。现在打开浏览器,输入地址

 

 http://localhost:8080/ws_service/service/HelloWebService?wsdl

 

会打开wsdl的描述页面,证明发布成功

 

第五步:建立另外一个工程ws_client,作为客户端,来调用上面的工程发布的服务。仍然把全部jar包添加进客户端工程。我们需要使用ant来帮助我们生成代码,如果没有看过ant的朋友请查阅相关内容,请在本工程的根目录下建立build.xml文件,代码如下

 

<?xml version="1.0" encoding="UTF-8"?>
<project name="create client" default="wsgen" basedir=".">
	
	<property name="lib.dir" value="${basedir}\WebRoot\WEB-INF\lib\"/>
	
	<path id="devlib.classpath">
		<fileset dir="${lib.dir}">
			<include name="**/*.jar" />
		</fileset>
	</path>
	<taskdef classpathref="devlib.classpath" name="wsgen" classname="org.codehaus.xfire.gen.WsGenTask" />
	<target name="wsgen" description="generate client">
		<wsgen outputDirectory="./src/" wsdl="http://localhost:8080/ws_service/service/HelloWebService?wsdl" binding="jaxb" package="com.ws.client" overwrite="true" />
	</target>
</project>

 

这里做一下说明,devlib.classpath是本工程全部依赖jar包所在位置,wsdl的值是调用的webservice的服务地址(因为我都是在本机进行测试,所以上面地址中使用的是localhost,如果调用其他服务,请进行相应修改),package是将自动生成的代码所放的位置,overwrite是如果存在重名文件,则覆盖之

 

还有一点要说明,那就是作为服务的webservice一定要处于发布状态(群众纷纷表示:靠,这不是废话嘛…………)

 

最后,运行build.xml,成功后,刷新工程,会发现多了一些文件,那么这些就是xfire帮助我们自动生成的客户端代码。

 

那么我做一下说明,一般都会在上面build.xml中定义的package包中生成三个类,根据名字我们就可以判断出一个是客户端,一个是接口,一个是实现类。

 

然后,我们现在就可以调用上面发布的服务了,新建一个Client.java来进行测试,代码如下

 

package com.ws.client.test;

import com.ws.client.HelloWebServiceClient;
import com.ws.client.HelloWebServicePortType;

public class Client {

	public static void main(String[] args) {
		
		HelloWebServiceClient client = new HelloWebServiceClient();
		
		HelloWebServicePortType soap = client.getHelloWebServiceHttpPort();
		
		System.out.println(soap.sayHello("Saeba Lee"));

	}

}

 

 

 

运行后,控制台输出:[ Saeba Lee ] say : hello!!

 

好了,我们的工作已经做完了,这就是一个简单的webservice的发布与调用,菜鸟,请轻拍…………

 

 

最后呢,如果大家掌握了以上的内容,那么可以拿这个帖子中提供的测试地址练练手,有几个还是比较好玩的,步骤与我上面所做的只是修改一下build.xml中的wsdl的值^^

 

如果作webService测试,请猛击这里

0
0
分享到:
评论
1 楼 shaoping 2011-09-28  
[code='html']
HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error initializing XFireServlet.
org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:52)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:662)

root cause

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.codehaus.xfire.spring.ServiceBean' defined in class path resource [META-INF/xfire/services.xml]: Error setting property values; nested exception is org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property 'serviceClass'; nested exception is java.lang.IllegalArgumentException: Cannot find class [com.ws.service.IHelloWebService]. Root cause: java.lang.ClassNotFoundException: com.ws.service.IHelloWebService
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:975)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:290)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)
org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:107)
org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:662)

root cause

org.springframework.beans.PropertyBatchUpdateException; nested PropertyAccessExceptions (1) are:
PropertyAccessException 1: org.springframework.beans.TypeMismatchException: Failed to convert property value of type [java.lang.String] to required type [java.lang.Class] for property 'serviceClass'; nested exception is java.lang.IllegalArgumentException: Cannot find class [com.ws.service.IHelloWebService]. Root cause: java.lang.ClassNotFoundException: com.ws.service.IHelloWebService
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:97)
org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:57)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:966)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:729)
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:416)
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:245)
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:141)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:242)
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:156)
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:290)
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:348)
org.codehaus.xfire.spring.XFireConfigLoader.getXFireApplicationContext(XFireConfigLoader.java:107)
org.codehaus.xfire.spring.XFireConfigLoader.loadContext(XFireConfigLoader.java:41)
org.codehaus.xfire.transport.http.XFireConfigurableServlet.loadConfig(XFireConfigurableServlet.java:86)
org.codehaus.xfire.transport.http.XFireConfigurableServlet.createXFire(XFireConfigurableServlet.java:54)
org.codehaus.xfire.transport.http.XFireServlet.init(XFireServlet.java:45)
javax.servlet.GenericServlet.init(GenericServlet.java:160)
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:498)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:394)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:243)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
java.lang.Thread.run(Thread.java:662)



新手啥都不会求指教

相关推荐

    简易WebService测试工具(WebServiceStudio)

    总的来说,"简易WebService测试工具(WebServiceStudio)"是开发和维护过程中不可或缺的辅助工具,它让测试和调试WebService变得简单而高效。无论是初学者还是经验丰富的开发者,都能利用其便捷的功能,提高开发效率...

    winform 创建简单WebService源码

    本资源提供了使用WinForm创建简单WebService的源码,这对于我们理解如何将这两者结合以及如何在本地应用中实现Web服务的调用非常有帮助。 创建一个简单的WebService通常涉及以下步骤: 1. **创建WebService项目**...

    axis2简单webservice工程源码

    标题中的“axis2简单webservice工程源码”指的是一个基于Apache Axis2框架构建的Web服务示例项目。Apache Axis2是Java平台上一个流行的Web服务框架,用于开发、部署和执行Web服务。它提供了高效的性能、模块化架构...

    CXF入门 -- 第一个简单webService

    【CXF入门 -- 第一个简单webService】 Apache CXF 是一款强大的开源服务框架,它用于构建和开发服务,包括Web服务。本篇文章将带你入门CXF,通过创建一个简单的Web服务来理解其基本概念和工作流程。 1. **CXF简介*...

    WebService 最简单搭建 Demo

    这个“WebService最简单搭建Demo”旨在为初学者提供一个快速上手的教程,帮助理解并实践WebService通信技术。 首先,我们要了解WebService的核心概念:SOAP(Simple Object Access Protocol)和WSDL(Web Services ...

    简易webservice实例

    这个“简易WebService实例”可能是为了帮助初学者理解如何构建和使用Web服务的基本概念。 在Java中,实现WebService通常使用两种主要的技术:JAX-WS(Java API for XML Web Services)和JAX-RS(Java API for ...

    分享一个PHP写的简单webservice服务端+客户端

    【标题】"分享一个PHP写的简单webservice服务端+客户端" 涉及到的核心知识点是PHP编程语言、Web服务(Web Service)以及客户端-服务器通信。PHP是一种广泛用于Web开发的开源脚本语言,它允许开发者创建动态交互式...

    简单 webservice 客户端代码

    public class test { public test() throws Exception { ... //改成你的地址 SOAPMappingRegistry smr = new SOAPMappingRegistry(); StringDeserializer sd = new StringDeserializer(); smr.mapTypes(Constants...

    简单WebService实例

    本示例将深入讲解一个简单的WebService实例,特别是关于“加法运算”的实现。这个主题非常适合初学者理解和掌握WebService的基本概念,以及如何创建和使用它们。 首先,我们要知道什么是WebService。WebService是一...

    一个简单的WEBSERVICE 例子

    根据提供的文件信息,本文将详细解释一个简单的 WebService 示例,并深入探讨其中的关键概念和技术细节。 ### 一、WebService 概念 #### 1.1 WebService 定义 WebService 是一种支持通过网络进行调用的服务形式,...

    tomcat8配置HTTPS,简单webservice客户端调用[收集].pdf

    tomcat8配置HTTPS,简单webservice客户端调用[收集].pdf

    webservice简单例子

    webservice简单例子, 使用jax-ws实现

    简单的webservice案例

    在本“简单的WebService案例”中,我们将深入理解WebService的基本概念、工作原理以及如何实现一个基本的WebService应用。 1. WebService定义: WebService是一种通过标准协议(如SOAP - Simple Object Access ...

    webservice 第一个小项目

    通过这个"webservice 第一个小项目",你将能够掌握基本的WebService开发流程,理解其核心概念,并具备创建和使用简单WebService的能力。随着深入学习,你还将了解更多的高级特性,如WS-Security、WS-...

    简单的XFire WebService例子

    在这个“简单的XFire WebService例子”中,我们将深入探讨如何利用XFire来构建和消费Web服务。 【 WeberService概念】 Web服务是一种通过网络(通常是互联网)提供和使用功能的方法,它遵循特定的协议和标准,如...

    Webservice实例

    在ws_helloword这个文件中,可能包含了使用xFire创建的简单WebService示例,如"HelloWorld"服务,它可能有一个返回字符串的接口方法,也可能有展示如何返回一个包含多个元素的List的示例。通过学习这个实例,开发者...

    基于WebService的C/S框架

    在"WebServiceDemo"这个例子中,可能包含了实现一个简单WebService的客户端和服务器端代码。客户端可能包含一个界面,用户可以通过输入参数调用服务器端的WebService。服务器端可能是一个简单的服务,如天气查询或...

    简单的webservice+Cxf+Spring数据对接实例以及jar.rar

    简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar简单的webservice+Cxf+Spring数据对接实例以及jar.rar...

    webservice.概念架设webservice简单实例

    Webservice是一种基于网络的服务接口,它允许不同系统之间进行数据交换和交互。核心概念在于,Webservice提供了一种标准化的方式,让应用程序能够通过互联网互相通信,就像调用本地函数一样。这种服务通常采用SOAP...

    C#调用JavaWebService

    调用WebService,最简单的办法当然是直接添加WEB引用,然后自动产生代理类,但是在调用JAVA的WebService时并没有这么简单,特别是对于SoapHeader的处理,通过C#添加Web引用方式访问JavaWebService的方法,除了string...

Global site tag (gtag.js) - Google Analytics