Webservice的开发方式有好几种,最常用最成熟的就是用axis来开发,但webservice所涉及的知识点很多,如果之前没有学过要去开发的确有些难度,自学起来也挺困难,但是在实际的开发中所用却很少,我参考的大量资料写了一个小例子,以后在开发此类服务,只要写好自己的业务类然后直接套用即可,此文档可以让不懂webservice的同志快速开发出webservice !
工程整体构架,下面将说明整个开发过程,并详细解释每个文件。
1.新建工程
第一步就是建立web工程,并加入jar包【没什么可说的】
2.编写业务类
编写业务类,也就是我们要提供的服务即上面的HelloWorldWSDD.java这里只有2个简单方法,以后在开发过程中这个才是开发的重点。
package commmon.sinosoft.mmj.claim;
public class HelloWorldWSDD {
public String getName(String name) {
return "your name : " + name;
}
public int getAge(int age) {
return age + 10;
}
}
3.添加配置文件
添加配置文件。把这个web.xml放WEB-INF下即可,这个配置文件几乎所有的开发都是一样的【从axis1.4的jar包中获取的】,不要更改,直接拿过去用就行了,如特殊需要需要更改可查阅相关资料
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<display-name>AxisServlet</display-name>
<servlet>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<welcome-file-list id="WelcomeFileList">
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jws</welcome-file>
</welcome-file-list>
</web-app>
4.发布服务
发布服务。把server-config.wsdd文件放WEB-INF下即可,文件是用命令生成的,生成过程有点麻烦这里不讲了,不过在以后开发的过程中可以直接使用这个文件,只需要稍加修改就行了
<?xml version="1.0" encoding="UTF-8"?>
<deployment xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<globalConfiguration>
<parameter name="adminPassword" value="admin"/>
<parameter name="attachments.Directory" value="./attachments"/>
<parameter name="attachments.implementation"
value="org.apache.axis.attachments.AttachmentsImpl"/>
<parameter name="sendXsiTypes" value="true"/>
<parameter name="sendMultiRefs" value="true"/>
<parameter name="sendXMLDeclaration" value="true"/>
<parameter name="axis.sendMinimizedElements" value="true"/>
<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="URLMapper" type="java:org.apache.axis.handlers.http.URLMapper"/>
<handler name="LocalResponder" type="java:org.apache.axis.transport.local.LocalResponder"/>
<handler name="Authenticate" type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"/>
<!-- 我写的-->
<service name="HelloWorldWSDD" provider="java:RPC">
<parameter name="allowedMethods" value="*"/>
<parameter name="scope" value="request"/>
<parameter name="className" value="commmon.sinosoft.mmj.claim.HelloWorldWSDD"/>
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper"/>
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler"/>
</requestFlow>
<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>
5.发布服务参数说明
发布服务参数说明。
【以后在服务服务只要在这里加一个service就行了。】
6.验证
1. 验证。把上面的都搞好后【发布该工程到tomcat然后启动tomcat】就可以验证一下我们的服务是否发布成功了。在IE中输入:http://localhost:8080/ToClaim/services
7.编写测试类
1. 下面就是编写测试类---即调用该服务的客户端
package commmon.sinosoft.mmj.claim;
import java.rmi.RemoteException;
import javax.xml.namespace.QName;
import javax.xml.rpc.ServiceException;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class HelloWorldWSDDClient {
public static void main(String[] args) throws ServiceException, RemoteException {
Integer age = new Integer(26);
//webService访问地址
String url = "http://localhost:8080/ToClaim/services/HelloWorldWSDD";
//创建服务
Service service = new Service();
//创建调用句柄
Call call = (Call) service.createCall();
//设置请求地址
call.setTargetEndpointAddress(url);
//设置调用的方法和方法的命名空间【我们没有设置命名空间,所以此处为空】
call.setOperationName(new QName("", "getName"));
//通过映射获得结果
String resultName = (String) call.invoke(new Object[] { "liuli" });
System.out.println(resultName);
//设置调用的方法和方法的命名空间【我们没有设置命名空间,所以此处为空】
call.setOperationName(new QName("", "getAge"));
//通过映射获得结果
int resultAge = Integer.parseInt(call.invoke(new Object[] { age }).toString());
//服务器端+10
System.out.println(resultAge);
}
}
8.补充
在第六步中你会看到【wsdl】的超链接
【或输入:http://localhost:8080/ToClaim/services/HelloWorldWSDD?wsdl】,点击进去就可以看到发布服务的wsdl文件,下面作简要说明
Message
PortType
Binding