1、编写服务端代码
//对外服务接口
package com.linzl.cn.webservice;
public class
TestServer {
public String sayHello(String name) {
return name + "说:这是我的第一个web 服务";
}
}
|
activation.jar、axis.jar、commons-discovery.jar、commons-io-2.4.jar、commons-logging.jar、jaxrpc.jar 、mail.jar 、wsdl4j.jar 、log4j.jar
3、WEB-INF/web.xml 添加以下配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.5" xmlns=" http://java.sun.com/xml/ns/javaee" xmlns:xsi=" http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<display-name>AxisServletDemo</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> </web-app> |
4、编写axis1.3 的发布服务文件
<?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"> <handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper" /> <service name=" wsdlUrlName" provider="java:RPC">
<!-- 命名空间,选填,一般为http://包名反写 -->
<namespace>
http://axis1.webservice.cn.linzl.cn</namespace>
<parameter name="className" value="com.linzl.cn.webservice.
TestServer" />
<parameter name="allowedMethods" value="*" /> </service> <!-- 指定处理器 --> <transport name="http"> <requestFlow> <handler type="URLMapper" /><!-- 引用上边的 --> </requestFlow> </transport> </deployment> |
5、
wsdd
文件标签节点说明
deployment:表明这是一个axis部署描述文件; service:axis提供的一个web service服务。service标签中parameter allowedMethod用于指定一个以空格分隔的方法名,只有这些方法可以通过web service访问。也可以将这个值指定为“*”表示所有的方法都可以访问。 provider:服务类型,共有四种,分别是RPC,Document,Wrapped和Message。详见org.apache.axis.providers包的API文档; parameter:用来设置Axis的各种属性; requestFlow:局的请求Handlers,在调用实际的服务之前调用; transport:定义了服务器端的传输方式 |
6、访问
访问具体某个方法(就是访问Servlet)
|
7、客户端调用服务端
调用Axis webservice服务(适用于Axis2)
|
import java.net.MalformedURLException; import java.net.URL; 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; String endpoint = "http://IP:端口/工程名称/services/wsdlUrlName?wsdl"; //调用的方法名称 String method = "sayHello"; // 命名空间,Axis1没有可为null(Axis2必须加上命名空间) String targetNamespace = "http://axis1.webservice.cn.linzl.cn"; Service service = new Service(); Call call = (Call) service.createCall(); call.setTargetEndpointAddress(new URL(endpoint)); QName qname = new QName(targetNamespace, method ); // 调用目标方法名称 call.setOperationName(qname); // 传递参数 Object[] param = {"我是axis1.3" }; System.out.println(call.invoke(param)); |
调用CXF webservice服务
|
package com.linzl.cn.client;
import java.net.MalformedURLException;
import java.net.URL;
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;
/**
* axis1客户端调用cxf服务端,
PS:
cxf的服务端接口必须要有@WebService、@WebParam注解,且调用的时候要指定接口中的参数名称
*
* @author linzl
*/
public class InvokingAxis1 {
public static void main(String[] args) throws ServiceException,
MalformedURLException, RemoteException {
String endpoint = "
http://localhost:8080/cxfNoSpring/services/publishAddress?wsdl";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new URL(endpoint));
// 指定要调用的接口方法的参数名称
call.addParameter("param", org.apache.axis.encoding.XMLType.XSD_STRING,
javax.xml.rpc.ParameterMode.IN);
// 设置返回类型
call.setReturnType(org.apache.axis.encoding.XMLType.XSD_STRING);
call.setUseSOAPAction(true);
// 命名空间,没有可为null,调用的方法名称
QName qname = new QName("", "sayHello");
// 调用目标方法名称
call.setOperationName(qname);
// 传递参数
Object[] param = { "00099" };
System.out.println(call.invoke(param));
}
}
|
依赖于服务器端接口的方式
|
|
在jboss部署时,对应的工程在src下添加
commons-logging.properties
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger
org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.LogFactoryImpl
org.apache.commons.logging.Log=org.apache.commons.logging.impl.Log4JLogger