前一阵公司要求写一个WebService 工程来提供外部访问,并且写一个客户端访问别人的提供的WS,当时对WS一无所知,开发完之后学到了一些知识,所以写一篇文章跟大家分享一下最近开发的经验。
我使用的框架是Xfire1.2+spring2.0。
1.首先新建一个Web Project,命名为:testws1。
2.添加工程所需要的包:xfire-all-1.2.6.jar,spring.jar,commons-logging.jar,spring-webmvc.jar,jdom-1.0.jar,wsdl4j-1.6.1.jar,jsr173_api-1.0.jar,XmlSchema-1.4.2.jar,commons-httpclient-3.0.jar,commons-codec-1.3.jar,wstx-asl-3.2.0.jar。一个一个试出来的……,在源码里面都有。
3.新建一个业务接口,假设向外提供的WebService的方法都是从接口中定义的,然后具体的业务类实现这些接口:
4.新建一个业务逻辑类,实现了业务接口HelloInt:
5.在WEB-INF下面新建文件:xfire-servlet.xml,内容如下:
6.打开web.xml,修改里面的内容:
7.在WEB-INF目录下面新建Spring配置文件,命名为:,内容如下:
8.把你的工程部署到Tomcat下面,然后开启Tomcat吧。在浏览器地址栏里面输入地址:
http://Tomcat地址:Tomcat端口/service
如果你这个时候能在页面里面看到你的WebService的接口,并且可以点进去看到内容,就说明你成果了。如果不行的话,请仔细检查下哪里做错了吧。
好了,服务端开发完成了,总得有一个客户端去调用吧,下面写一个客户端,属于动态的那种,直接访问WebService的地址,然后调用里面的方法即可。直接贴代码,注意,里面的访问路径是要改的:
至于前面写的 HelloImp 这个业务层,怎么去扩展,大家自己去自由发挥吧。
终于写完,把源码发上来,不明白的直接看里面。解压缩之后直接附加到MyEclipse里面即可,怎么附加工程就不说了……希望东西对大家有帮助,也算是一个总结。
最后发现JavaEye好像用chrome浏览器上传附件有BUG--!
我使用的框架是Xfire1.2+spring2.0。
1.首先新建一个Web Project,命名为:testws1。
2.添加工程所需要的包:xfire-all-1.2.6.jar,spring.jar,commons-logging.jar,spring-webmvc.jar,jdom-1.0.jar,wsdl4j-1.6.1.jar,jsr173_api-1.0.jar,XmlSchema-1.4.2.jar,commons-httpclient-3.0.jar,commons-codec-1.3.jar,wstx-asl-3.2.0.jar。一个一个试出来的……,在源码里面都有。
3.新建一个业务接口,假设向外提供的WebService的方法都是从接口中定义的,然后具体的业务类实现这些接口:
package com.lonway.service.ints;
public interface HelloInt {
String HelloWorld( String name );
}
4.新建一个业务逻辑类,实现了业务接口HelloInt:
package com.lonway.service.imp;
import com.lonway.service.ints.HelloInt;
public class HelloImp implements HelloInt {
public String HelloWorld(String name) {
if( "".equals( name ) || name == null )
return "请输入您的姓名哦!";
return "Hello " + name;
}
}
5.在WEB-INF下面新建文件:xfire-servlet.xml,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
<!-- XFire基本配置 -->
<import resource="classpath:org/codehaus/xfire/spring/xfire.xml" />
<!-- 设置访问地址 -->
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<!-- 显示WebService 访问路径,有几个路径就需要 配置几个路径。 -->
<entry key="/HelloWorld.ws">
<ref bean="HelloworldWS" /><!--与下面的是对应的。-->
</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>
<!-- START TEST -->
<bean id="HelloworldWS" parent="baseWebService"><!-- 服务请求的地址,与上面访问的url地址是对应的 -->
<property name="serviceBean" ref="HelloWorldI" /><!--与spring配置文件中的Bean对应-->
<property name="serviceClass" value="com.lonway.service.ints.HelloInt" /><!-- 以前定义的业务接口 -->
</bean>
<!-- END TEST -->
</beans>
6.打开web.xml,修改里面的内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/SpringContext.xml,/WEB-INF/xfire-servlet.xml
</param-value>
</context-param>
<!-- begin Spring_config -->
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.util.IntrospectorCleanupListener
</listener-class>
</listener>
<!-- end Spring_config -->
<!-- begin XFire_config -->
<!-- 设置Xfire访问的Servlet以及路径后缀 -->
<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>
<servlet>
<!-- 配合Spring容器中XFire一起工作的Servlet-->
<servlet-name>xfireServlet</servlet-name>
<servlet-class>
org.codehaus.xfire.spring.XFireSpringServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>xfireServlet</servlet-name>
<!-- 在这个URL下开放Web Service服务 -->
<url-pattern>/service/*</url-pattern>
</servlet-mapping>
<!-- end XFire_config -->
</web-app>
7.在WEB-INF目录下面新建Spring配置文件,命名为:,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
<!-- webService Test -->
<bean id="HelloWorldI"
class="com.lonway.service.imp.HelloImp">
</bean>
<!-- WebService_config End -->
</beans>
8.把你的工程部署到Tomcat下面,然后开启Tomcat吧。在浏览器地址栏里面输入地址:
http://Tomcat地址:Tomcat端口/service
如果你这个时候能在页面里面看到你的WebService的接口,并且可以点进去看到内容,就说明你成果了。如果不行的话,请仔细检查下哪里做错了吧。
好了,服务端开发完成了,总得有一个客户端去调用吧,下面写一个客户端,属于动态的那种,直接访问WebService的地址,然后调用里面的方法即可。直接贴代码,注意,里面的访问路径是要改的:
package com.lonway.service.client;
import java.net.URL;
import org.codehaus.xfire.client.Client;
public class WSClient {
public static void main(String[] args) {
try{
//注意:声明服务端的地址,这里是我自己的地址,根据个人设置改变
String serverURLStr = "http://localhost:8080/testws1/service/HelloInt?wsdl";
Client client = new Client(new URL( serverURLStr ));
//invoke方法第一个参数是方法的名称,第二个调用该是方法所需的参数。
Object[] results = client.invoke("HelloWorld", new Object[] {"Jets"});
//当你看到控制台输出 Hello Jets 就代表成功了
System.out.println((String) results[0]);
} catch(Exception e){
throw new RuntimeException(e);
}
}
}
至于前面写的 HelloImp 这个业务层,怎么去扩展,大家自己去自由发挥吧。
终于写完,把源码发上来,不明白的直接看里面。解压缩之后直接附加到MyEclipse里面即可,怎么附加工程就不说了……希望东西对大家有帮助,也算是一个总结。
最后发现JavaEye好像用chrome浏览器上传附件有BUG--!