Web Service学习总结
2013-12-23 16:29
260 查看
一、我认为在学习web service 之前首先应该弄清楚几个概念:
1.xfire 是个什么东西:XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简 单, 可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。
2.axis 是什么东西:axis全称Apache EXtensible Interaction System 即阿帕奇可扩展交互系统。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。但Axis并不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎(例如Tomcat)的服务器。
3.soap又是什么东西:是简单对象访问协议,是基于xml的简单协议,可使应用程序在HTTP之上进行信息交换。或者更简单的说:soap是用于访问网络服务的协议。
所以,xfire和Axis在实施Web Service 能达到同样的效果,但XFire更加简洁高效,并且XFire 对Spring提供了强大的支持。
二、现在开始描述开发步骤:本人用的的开发环境是:
1)jdk:1.5版本
2)Tomcat:6.0
3)MyElicpse:6.0
三、
1)在MyEclipse中新建Web工程,名为webservice_helloworld。选择该工程后,点击右键选择MyEclipse-->Add Web Service Capabilities,弹出Add Web Service Capabilities对话框,弹出Project Library Configuration对话框,默认选择Core Libraries,点击“Finish”按钮,完成XFire核心包的添加。
为了后续的客户端的测试,还需读者加入commons- httpclient-3.0.1.jar包到WEB-INF/lib下。
2)web Service 编写 helloWorld的简单例子,首先得在WEB-INF下配置ApplicationContext.xml (Spring配置文件)和 xfire-servlet.xml(配置xfire的相关bean)
1.web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- begin Spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/ApplicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- end Spring 配置 -->
<!-- begin XFire 配置 -->
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>*.ws</url-pattern>
</servlet-mapping>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<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>/services/*</url-pattern>
</servlet-mapping>
<!-- end XFire 配置 -->
</web-app>
2.Web Service的接口类SayHelloworld.java和对应的实现类SayHelloworldImpl.java
为了用Web Service完成HelloWorld功能,我们首先在src/webservice目录下建立接口类SayHelloworld.java。它仅包含一个sayHelloWorld(String name)的方法,其详细内容如下:
SayHelloworld.java:
package webservice;
public interface SayHelloworld {
public String sayHelloWorld(String name);
}
实现类SayHelloworldImpl.java:
package webservice;
public class SayHelloworldImpl implements SayHelloworld{
public String sayHelloWorld(String name){
String helloword="hello "+name;
return helloword;
}
}
3.ApplicationContext.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="HelloWorldBean" class="webservice.SayHelloworldImpl"/>
</beans>
4.xfire-servlet.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 定义访问的url -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/HelloWorldService.ws">
<ref bean="HelloWorldService" />
</entry>
</map>
</property>
</bean>
<!-- 使用XFire导出器 -->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<!-- 引用xfire.xml中定义的工厂 -->
<property name="serviceFactory" ref="xfire.serviceFactory"/>
<!-- 引用xfire.xml中的xfire实例 -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="HelloWorldService" parent="baseWebService">
<!-- 业务服务bean -->
<property name="serviceBean" ref="HelloWorldBean" />
<!-- 业务服务bean的窄接口类 -->
<property name="serviceClass" value="webservice.SayHelloworld" />
</bean>
</beans>
3)编写完毕,开始Web Service测试
在浏览器中输入地址:http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我们可以看到HelloWorldService对应的WSDL信息,阅读这个WSDL文档,我们可以知道HelloWorld的sayHelloWorld方法已经被成功地发布为Web Service了。只要拿到这个WSDL就可以开发相应的客户端调用程序了。
XFire为访问服务端Web Service提供了各种方便的方式:我们一般根据服务地址和窄接口类创建客户调用程序。
在不能获得服务窄接口类的情况下,XFire允许我们通过WSDL文件生成客户端调用程序,通过指定服务接口的方式调用服务。
1)通过WSDL文件生成客户端调用程序
首先我们通过http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl我们可以获得WSDL文件HelloWorldService.wsdl,并将其放在src目录下面,接着我们通过程序访问该WSDL文件,并调用需测试的方法。此时测试类WebServiceClientTest.java的内容如下所示:
package test;
import org.codehaus.xfire.client.Client;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import webservice.SayHelloworld;
public class WebServiceClientTest {
SayHelloworld sayHelloworld=null;
public void testClient() throws Exception{
//对应的wsdl文件
String wsdl="HelloWorldService.wsdl";
Resource resource=new ClassPathResource(wsdl);
//根据WSDL创建客户实例
Client client= new Client(resource.getInputStream(),null);
Object[] objArray=new Object[1];
objArray[0]="毛爷爷";
//调用特定的web service 方法
Object[] results=client.invoke("sayHelloWorld", objArray);
System.out.println("result:"+results[0]);
}
public static void main(String[] args) throws Exception{
WebServiceClientTest test=new WebServiceClientTest();
test.testClient();
}
}
运行该类 结果是:result:hello 毛爷爷
2)根据服务地址创建客户端调用程序
接着让我们来看一个根据服务地址创建客户端调用程序的例子。我们可以通过测试类来测试Web Service的正确性,下面让我们来看一个简单的测试类,首先我们在src/test目录建立WebServiceClientTest.java文件,并在src目录下建立客户端调用的Spring配置文件client.xml。在client.xml配置文件中我们定义了一个testWebService的bean,该bean访问wsdlDocumentUrl为http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl的WSDL。该xml文件的详细内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
<property name="serviceClass">
<value>webservice.HelloWorld</value>
</property>
<property name="wsdlDocumentUrl">
<value>http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl</value>
</property>
</bean>
</beans>
在WebServiceClientTest.java文件中获得HelloWorld,并调用它的sayHelloWorld方法来完成测试,该类的详细内容如下所示:
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import webservice.HelloWorld;
/** *//**
*HelloWorld的webservice的测试类.
*/
publicclass WebServiceClientTest {
HelloWorld helloWorld = null;
publicstaticvoid main(String[] args) {
WebServiceClientTest test = new WebServiceClientTest();
test.testClient();
}
publicvoid testClient() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"client.xml");
helloWorld = (HelloWorld) ctx.getBean("testWebService");
System.out.println(helloWorld.sayHelloWorld("毛爷爷"));
}
}
在启动webservice_helloworld工程的情况下,运行WebServiceClientTest类,可看到控制台包含如下信息:
hello 毛爷爷
由此可看出调用Web Service成功。
报错指导:
如果报Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity ,很有可能是你的
commons- httpclient.jar有问题
1.xfire 是个什么东西:XFire是新一代的Java Web服务引擎,XFire使得在JavaEE应用中发布Web服务变得轻而易举。和其他Web服务引擎相比,XFire的配置非常简 单, 可以非常容易地和Spring集成,它使得Java开发人员终于可以获得和.Net开发人员一样的开发效率。
2.axis 是什么东西:axis全称Apache EXtensible Interaction System 即阿帕奇可扩展交互系统。Axis本质上就是一个SOAP引擎,提供创建服务器端、客户端和网关SOAP操作的基本框架。Axis目前版本是为Java编写的,不过为C++的版本正在开发中。但Axis并不完全是一个SOAP引擎,它还是一个独立的SOAP服务器和一个嵌入Servlet引擎(例如Tomcat)的服务器。
3.soap又是什么东西:是简单对象访问协议,是基于xml的简单协议,可使应用程序在HTTP之上进行信息交换。或者更简单的说:soap是用于访问网络服务的协议。
所以,xfire和Axis在实施Web Service 能达到同样的效果,但XFire更加简洁高效,并且XFire 对Spring提供了强大的支持。
二、现在开始描述开发步骤:本人用的的开发环境是:
1)jdk:1.5版本
2)Tomcat:6.0
3)MyElicpse:6.0
三、
1)在MyEclipse中新建Web工程,名为webservice_helloworld。选择该工程后,点击右键选择MyEclipse-->Add Web Service Capabilities,弹出Add Web Service Capabilities对话框,弹出Project Library Configuration对话框,默认选择Core Libraries,点击“Finish”按钮,完成XFire核心包的添加。
为了后续的客户端的测试,还需读者加入commons- httpclient-3.0.1.jar包到WEB-INF/lib下。
2)web Service 编写 helloWorld的简单例子,首先得在WEB-INF下配置ApplicationContext.xml (Spring配置文件)和 xfire-servlet.xml(配置xfire的相关bean)
1.web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.4" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<!-- begin Spring配置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/ApplicationContext.xml,/WEB-INF/xfire-servlet.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<!-- end Spring 配置 -->
<!-- begin XFire 配置 -->
<servlet>
<servlet-name>xfire</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfire</servlet-name>
<url-pattern>*.ws</url-pattern>
</servlet-mapping>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<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>/services/*</url-pattern>
</servlet-mapping>
<!-- end XFire 配置 -->
</web-app>
2.Web Service的接口类SayHelloworld.java和对应的实现类SayHelloworldImpl.java
为了用Web Service完成HelloWorld功能,我们首先在src/webservice目录下建立接口类SayHelloworld.java。它仅包含一个sayHelloWorld(String name)的方法,其详细内容如下:
SayHelloworld.java:
package webservice;
public interface SayHelloworld {
public String sayHelloWorld(String name);
}
实现类SayHelloworldImpl.java:
package webservice;
public class SayHelloworldImpl implements SayHelloworld{
public String sayHelloWorld(String name){
String helloword="hello "+name;
return helloword;
}
}
3.ApplicationContext.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="HelloWorldBean" class="webservice.SayHelloworldImpl"/>
</beans>
4.xfire-servlet.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- 引入XFire预配置信息 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 定义访问的url -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/HelloWorldService.ws">
<ref bean="HelloWorldService" />
</entry>
</map>
</property>
</bean>
<!-- 使用XFire导出器 -->
<bean id="baseWebService" class="org.codehaus.xfire.spring.remoting.XFireExporter" lazy-init="false" abstract="true">
<!-- 引用xfire.xml中定义的工厂 -->
<property name="serviceFactory" ref="xfire.serviceFactory"/>
<!-- 引用xfire.xml中的xfire实例 -->
<property name="xfire" ref="xfire" />
</bean>
<bean id="HelloWorldService" parent="baseWebService">
<!-- 业务服务bean -->
<property name="serviceBean" ref="HelloWorldBean" />
<!-- 业务服务bean的窄接口类 -->
<property name="serviceClass" value="webservice.SayHelloworld" />
</bean>
</beans>
3)编写完毕,开始Web Service测试
在浏览器中输入地址:http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl,我们可以看到HelloWorldService对应的WSDL信息,阅读这个WSDL文档,我们可以知道HelloWorld的sayHelloWorld方法已经被成功地发布为Web Service了。只要拿到这个WSDL就可以开发相应的客户端调用程序了。
XFire为访问服务端Web Service提供了各种方便的方式:我们一般根据服务地址和窄接口类创建客户调用程序。
在不能获得服务窄接口类的情况下,XFire允许我们通过WSDL文件生成客户端调用程序,通过指定服务接口的方式调用服务。
1)通过WSDL文件生成客户端调用程序
首先我们通过http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl我们可以获得WSDL文件HelloWorldService.wsdl,并将其放在src目录下面,接着我们通过程序访问该WSDL文件,并调用需测试的方法。此时测试类WebServiceClientTest.java的内容如下所示:
package test;
import org.codehaus.xfire.client.Client;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
import webservice.SayHelloworld;
public class WebServiceClientTest {
SayHelloworld sayHelloworld=null;
public void testClient() throws Exception{
//对应的wsdl文件
String wsdl="HelloWorldService.wsdl";
Resource resource=new ClassPathResource(wsdl);
//根据WSDL创建客户实例
Client client= new Client(resource.getInputStream(),null);
Object[] objArray=new Object[1];
objArray[0]="毛爷爷";
//调用特定的web service 方法
Object[] results=client.invoke("sayHelloWorld", objArray);
System.out.println("result:"+results[0]);
}
public static void main(String[] args) throws Exception{
WebServiceClientTest test=new WebServiceClientTest();
test.testClient();
}
}
运行该类 结果是:result:hello 毛爷爷
2)根据服务地址创建客户端调用程序
接着让我们来看一个根据服务地址创建客户端调用程序的例子。我们可以通过测试类来测试Web Service的正确性,下面让我们来看一个简单的测试类,首先我们在src/test目录建立WebServiceClientTest.java文件,并在src目录下建立客户端调用的Spring配置文件client.xml。在client.xml配置文件中我们定义了一个testWebService的bean,该bean访问wsdlDocumentUrl为http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl的WSDL。该xml文件的详细内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="testWebService" class="org.codehaus.xfire.spring.remoting.XFireClientFactoryBean">
<property name="serviceClass">
<value>webservice.HelloWorld</value>
</property>
<property name="wsdlDocumentUrl">
<value>http://localhost:8080/webservice_helloworld/HelloWorldService.ws?wsdl</value>
</property>
</bean>
</beans>
在WebServiceClientTest.java文件中获得HelloWorld,并调用它的sayHelloWorld方法来完成测试,该类的详细内容如下所示:
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import webservice.HelloWorld;
/** *//**
*HelloWorld的webservice的测试类.
*/
publicclass WebServiceClientTest {
HelloWorld helloWorld = null;
publicstaticvoid main(String[] args) {
WebServiceClientTest test = new WebServiceClientTest();
test.testClient();
}
publicvoid testClient() {
ApplicationContext ctx = new ClassPathXmlApplicationContext(
"client.xml");
helloWorld = (HelloWorld) ctx.getBean("testWebService");
System.out.println(helloWorld.sayHelloWorld("毛爷爷"));
}
}
在启动webservice_helloworld工程的情况下,运行WebServiceClientTest类,可看到控制台包含如下信息:
hello 毛爷爷
由此可看出调用Web Service成功。
报错指导:
如果报Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/httpclient/methods/RequestEntity ,很有可能是你的
commons- httpclient.jar有问题
相关文章推荐
- Android Web Service学习总结(二)
- Android Web Service学习总结(一)
- Web Service技术之hession、soap、restful学习总结
- Web service学习总结
- Web Service学习笔记:动态调用WebService的方法总结
- Oracle10g 学习总结(一)
- 程序学习要注意的-风中叶视频总结
- Android开发学习之常见适配器总结
- php 冒泡排序和插入排序的学习总结
- WebService学习总结(四)——调用第三方提供的webService服务
- Objective-C学习错误总结
- 个人嵌入式学习总结
- Extjs学习总结之15表单面板formpanel
- 2014.10.17--Java基础课第四天学习总结
- mysql视图学习总结
- 20145329 《信息安全系统设计基础》第十四周学习总结
- 2017-2018-1 20155311 《信息安全系统设计基础》第5周学习总结
- JAVA课堂笔记一 理论学习总结篇
- WebService学习总结 四 WebService开发天气预报客户端程序