Axis 简单说明:
1. Lib 包引用
2.web.xml配置
<listener>
<listener-class>org.apache.axis.transport.http.AxisHTTPSessionListener</listener-class>
</listener>
<servlet>
<display-name>Apache-Axis Servlet</display-name>
<servlet-name>AxisServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class>
</servlet>
<servlet>
<display-name>Axis Admin Servlet</display-name>
<servlet-name>AdminServlet</servlet-name>
<servlet-class>org.apache.axis.transport.http.AdminServlet</servlet-class>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet>
<display-name>SOAPMonitorService</display-name>
<servlet-name>SOAPMonitorService</servlet-name>
<servlet-class>org.apache.axis.monitor.SOAPMonitorService</servlet-class>
<init-param>
<param-name>SOAPMonitorPort</param-name>
<param-value>5001</param-value>
</init-param>
<load-on-startup>100</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/servlet/AxisServlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>*.jws</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>AxisServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>SOAPMonitorService</servlet-name>
<url-pattern>/SOAPMonitor</url-pattern>
</servlet-mapping>
<session-config>
<!-- Default to 5 minute session timeouts -->
<session-timeout>5</session-timeout>
</session-config>
<mime-mapping>
<extension>wsdl</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
<mime-mapping>
<extension>xsd</extension>
<mime-type>text/xml</mime-type>
</mime-mapping>
3.添加相应的axis配置文件
<?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" />
注:定义相关webservice访问类
<service name="userManage" provider="java:RPC">
<parameter name="className"value="com.axis.service.UserManageWebService" />
<parameter name="allowedMethods" value="*" />
注:定义相关webservice访问类中方法传递参数类型,其中User为客户端相对应UserBean的类型。
<beanMapping languageSpecificType="java:com.axis.bean.UserBean" qname="n1:user" xmlns:n1="urn:User" />
<parameter name="scope" value="session" />
</service>
<transport name="http">
<requestFlow>
<handler type="URLMapper" />
</requestFlow>
</transport>
</deployment>
4.关于spring与 axis的相关问题
如上:com.axis.service.UserManageWebService,在axis配置文件中定义,所以其内的DAO对象实例化不能进行spring自动注入,需要手动进行注入,如下是相关的解决方法:
定义相关mapping:
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.WebApplicationContext;
importorg.springframework.web.context.support.WebApplicationContextUtils;
public class SpringInit implements ServletContextListener {
private static WebApplicationContext springContext;
public SpringInit() {
super();
}
public void contextInitialized(ServletContextEvent event) {
springContext = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
}
public void contextDestroyed(ServletContextEvent event) {
}
public static ApplicationContext getApplicationContext() {
return springContext;
}
}
Mapping在Web.xml中配置:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>gxlu.gmap.web.util.SpringInit</listener-class>
</listener>
然后在服务端方法中进行调用相关配置的Bean就可以了:
userDaoOther = (UserDao) SpringInit.getApplicationContext().getBean("userDaoOther");
5.服务端调用:
1)引用lib如下:
2)调用相关方法:
String url = "http://localhost:7001/gmap/services/userManage";
Service service = new Service();
Call call = (Call) service.createCall();
//定义本地User类,关联到服务UserBean
QName qn = new QName("urn:User","user");
call.registerTypeMapping(User.class, qn,
neworg.apache.axis.encoding.ser.BeanSerializerFactory(User.class,qn),
neworg.apache.axis.encoding.ser.BeanDeserializerFactory(User.class,qn));
call.setTargetEndpointAddress(new java.net.URL(url));
//调用服务端方法register
call.setOperationName(new QName("user","register"));
User user=new User();
user.setUserName("webservicetest1");
user.setLoginName("webservicetest1");
user.setPassword("123");
user.setUserId(1);
user.setTelephone("13597436721");
user.setEnabled(1);
user.setCreator("webservice");
Integer ret = (Integer) call.invoke(new Object[] {user });