一、 新建一个web项目,
1.打开axis2.war包,将conf,lib,modules三个文件夹复制到项目的WEB-INF文件夹下,再在WEB-INF目录下新建一个services文件夹,然后在services文件下新建一个文件夹(任意取名);
再新建META-INF文件夹,最后再新增services.xml,接口信息就写在这里面。
具体路径:WEB-INF/services/myservice/META-INF/services.xml
2.配置 web.xml 。加载axis2 和 applicationContext.xml。
<!-- 加载配置文件 --> <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:/*.xml</param-value> </context-param> <!-- 加载axis2 --> <servlet> <display-name>Apache-Axis Servlet</display-name> <servlet-name>axisServlet</servlet-name> <servlet-class>org.apache.axis2.transport.http.AxisServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>axisServlet</servlet-name> <url-pattern>/services/*</url-pattern> </servlet-mapping>
3.然后在项目中的src下创建包,再在包下创建一个类,用来提供web service接口。
package com.axis.service;
public class TestAxis {
public String test(String str) {
return "test " + str;
}
public String printHello(String name) {
return "hello " + name;
}
public String printWorld(String name) {
return "World " + name;
}
}
4.配置 services.xml文件。
<?xml version="1.0" encoding="UTF-8"?> <service name="axisService" targetNamespace="http://e3.org/axis2Namespace/soapws"> <!-- 服务名描述 --> <description>axis2 接口开发范例</description> <!-- 命名空间可以自由定义 --> <schema schemaNamespace="http://e3.org/axis2Namespace/soapws" /> <!-- 方式一、直接写类位置 --> <!-- <parameter name="ServiceClass">com.axis.service.TestAxis</parameter> --> <!-- 方式二、指向的类位置,通过applicationContext.xml 配置 --> <parameter name="SpringBeanName">CrjWs</parameter> <parameter name="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier </parameter> <!-- 方式一 --> <operation name="test"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="printHello"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <operation name="printWorld"> <messageReceiver class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> </operation> <!-- 方式二 --> <!-- <messageReceivers> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" /> <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" /> </messageReceivers> --> <!-- 屏蔽的接口 --> <excludeOperations> <operation>printHello</operation> </excludeOperations> </service>
5.配置文件 applicationContext.xml。
<!--WebService 入口的 bean --> <bean id ="CrjWs" class="com.axis.service.TestAxis" />
6. 目录结构。
7.运行该项目,使用浏览器访问地址
http://localhost:8080/webserviceTest/services/axisService?wsdl,
如果有异常信息,那就返回看一下是jar包缺失还是其它配置原因,自己从头细心再看看哪里是否没配置。
如果成功,会在页面上显示一份wsdl页面。
二、下面是我遇到的一些小问题。
1、报 The SERVICE_OBJECT_SUPPLIER parameter is not specified。
查看了一下发现是没有写监听器。在web.xml文件中添加
<listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener>
如果使用 SpringBeanName 的话,需要加载 ServiceObjectSupplier。
<parameter name="SpringBeanName">CrjWs</parameter> <parameter name="ServiceObjectSupplier"> org.apache.axis2.extensions.spring.receivers.SpringServletContextObjectSupplier </parameter>
三、客户端调用。
package com.test;
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
public class webTest {
public static void main(String[] args) {
String _newendPoint =
"http://localhost:8080/webserviceTest/services/axisService?wsdl";
String _newNameSpace =
"http://e3.org/axis2Namespace/soapws";
try {
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(_newendPoint));
call.setOperationName(new QName(_newNameSpace, "test"));
String s = (String) call.invoke(new Object[] {"test123"});
System.out.println(s);
// call.setOperationName(new QName(_newNameSpace,"printHello"));
// s = (String) call.invoke(new Object[] { "printHello456"});
// System.out.println(s);
call.setOperationName(new QName(_newNameSpace, "printWorld"));
s = (String) call.invoke(new Object[] { "printWorld789" });
System.out.println(s);
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
转载于:https://blog.51cto.com/7852586/1784076