webservice
Web Services是由企业发布的完成其特定商务需求的在线应用服务,其他公司或应用软件能够通过Internet来访问并使用这项在线服务。
用简单点的话说,就是系统对外的接口!
它是一种构建
应用程序的普遍模型,可以在任何支持
网络通信的
操作系统中实施运行;它是一种新的web应用程序分支,是自包含、自描述、模块化的应用,可以发布、定位、通过web调用。
WebService是一个应用组件,它逻辑性的为其他
应用程序提供数据与服务.各应用程序通过
网络协议和规定的一些标准数据格式(
Http,
XML,
Soap)来访问WebService,通过WebService内部执行得到所需结果.Web Service可以执行从简单的请求到复杂商务处理的任何功能。一旦部署以后,其他WebService
应用程序可以发现并调用它部署的服务。
详情参考:http://baike.baidu.com/view/837392.htm
AXIS2 进行webservice开发
一,jar包下载
1.点击下载axis2.1.4
2.解压jar包并且导入当前项目
二,创建server端服务类
HelloWorld .java
package com.kipy.demo.axis.server;
public class HelloWorld {
public static String hello(String name) {
return "Hello " + name;
}
}
注意方法是静态的,建议返回类型为String等基本数据类型,避免调用者序列化出错.
三,创建server-config.wsdd
1.在项目的web-inf目录下创建文件server-config.wsdd,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<deployment name="defaultClientConfig" xmlns="http://xml.apache.org/axis/wsdd/"
xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"
xmlns:handler="http://xml.apache.org/axis/wsdd/providers/handler">
<globalConfiguration>
<parameter name="disablePrettyXML" value="true" />
<parameter name="dotNetSoapEncFix" value="true" />
<parameter name="enableNamespacePrefixOptimization" value="false" />
<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 type="java:org.apache.axis.handlers.http.URLMapper"
name="URLMapper" />
<handler type="java:org.apache.axis.transport.local.LocalResponder"
name="LocalResponder" />
<handler type="java:org.apache.axis.handlers.SimpleAuthenticationHandler"
name="Authenticate" />
<service name="serviceDemo" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className"
value="com.kipy.demo.axis.server.HelloWorld" />
</service>
<transport name="http">
<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:wsdl"
value="org.apache.axis.transport.http.QSWSDLHandler" />
<requestFlow>
<handler type="URLMapper" />
<handler type="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
</requestFlow>
</transport>
<transport name="local">
<responseFlow>
<handler type="LocalResponder" />
</responseFlow>
</transport>
</deployment>
2.根据实际配置service
<service name="serviceDemo" provider="java:RPC">
<parameter name="allowedMethods" value="*" />
<parameter name="className"
value="com.kipy.demo.axis.server.HelloWorld" />
</service>
多个服务可以配置多个service标签,<parameter name="allowedMethods" value="*" />表示发布所有方法,<parameter name="className" value="com.kipy.demo.axis.server.HelloWorld" />是服务类配置.
四,配置AxisServlet
在web.xml中添加如下配置:
<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>
到此服务器端完成,部署到web容器可以通过http://server:port/app/services进行访问
点击wsdl可以查看当前服务的wsdl描述信息
五,webservice调用
1.编写调用工具类
Invoker.java
package com.kipy.demo.axis.client.util;
import java.net.URL;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class Invoker {
public static Object invoke(String endpoint, String method, Object[] args) {
Object target = null;
Service service = new Service();
Call call;
try {
call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
call.setOperationName(method);
target = call.invoke(args);
} catch (Exception e) {
e.printStackTrace();
}
return target;
}
}
2.编写测试方法
public static void main(String[] args) {
System.out.println(Invoker.invoke("http://127.0.0.1/Axis2Demo/services/serviceDemo", "hello", new Object[]{"WGY"}));
}
Inoker.invoke方法有三个参数,第一个是endpoint(服务的wsdl地址去掉最后的?wsdl),第二个是调用的方法名,第三个是服务方法的参数,类型为Object数组.
运行得到如下结果:
具体开发在服务端段加入自己的逻辑,如果返回数据位对象,本人提供一个将任意对象转换成良构XML的工具类,详情参阅:http://kipy.web-183.com/post/5.html