Axis2优劣:
现在用axis2开发一个webservice工程,虽说是webservice的一个新框架,但我并没有发现他有多么的好用,反而遇到了很多麻烦的问题:
1、axis2不支持事务。
对数据库增删改查一般都需要事务处理的,但是在对外发布的接口中是不能配置事务的。
解决方法:或者写一个代理类或者直接在dao中进行事务管理。
2、axis2不支持方法重载。
在对外发布的接口中不能使用方法重载,
[WARN] We don't support method overloading. Ignoring [updateClassifyTask]
[WARN] We don't support method overloading. Ignoring [updateClassifyTask]
[WARN] We don't support method overloading. Ignoring [updateClassifyTask]
如果你写了多个重名的方法,在该service中只会注册一个。
解决方法:无。要么更改成不同的方法名要么在传参上想办法
3、AXIS2 1.4.1 does not support java.util.Date type
Time portion of java.util.Date is missing from SOAP response in Axis2 1.5
瞧瞧axis2 的这些个bug,使用起来太不方便了。
虽然Apache的官方网站的bug页上有解决方案,但是我把DateServuce。aar文件考下来后仍然报相同的错误:
[ERROR] date string can not be less than 19 charactors
Caused by: java.lang.NumberFormatException: date string can not be less than 19 charactors
也不知道是怎么个意思,是把日期转换一下吗?好郁闷- - !
Axis2 1.5只能返回日期部分,时间部分丢失了!
解决方法:把Date类型都改成String类型的,这样是最安全的,但可能跟要求不符,应该不能算是一个好的解决方案吧。
4、axis2不能传递list类型的数据集合。
解决方法:将list转换成数组类型。这个还不算麻烦吧。
- package com.etrip.axis2;
- import java.io.Serializable;
- /**
- *
- * @Title: TODO
- * @Description: 实现TODO
- * @Copyright:Copyright (c) 2011
- * @Company:
- * @Date:2012-12-29
- * @author
- * @version 1.0
- */
- public class User implements Serializable {
- private static final long serialVersionUID = 1L;
- private int id;
- private String name;
- private String address;
- private String email;
- public int getId() {
- return id;
- }
- public void setId(int id) {
- this.id = id;
- }
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getAddress() {
- return address;
- }
- public void setAddress(String address) {
- this.address = address;
- }
- public String getEmail() {
- return email;
- }
- public void setEmail(String email) {
- this.email = email;
- }
- }
- package com.etrip.axis2;
- import java.util.ArrayList;
- import java.util.List;
- import org.springframework.stereotype.Service;
- /**
- *
- * @Title: TODO
- * @Description: 实现TODO
- * @Copyright:Copyright (c) 2011
- * @Company
- * @Date:2012-12-24
- * @author
- * @version 1.0
- */
- @Service
- public class UserService {
- /**
- * 传递数组
- * @return
- */
- public String[][] getTwoArray() {
- return new String[][] { { "中国", "北京" }, { "日本", "东京" }};
- }
- /**
- * 传递非字符串
- * @param b
- * @param len
- * @return
- */
- public String upload4Byte(byte[] b, int len) {
- return String.valueOf(b)+len;
- }
- /**
- * 传递字符串
- * @param userName
- * @return
- */
- public String hello(String userName){
- return "Hello ,"+userName;
- }
- /**
- * 传输对象
- * @return
- */
- public User getUer() {
- User user = new User();
- user.setAddress("JingsanRoad");
- user.setEmail("uer@123.com");
- user.setName("spark");
- user.setId(2);
- return user;
- }
- }
spring-app-context.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:flex="http://www.springframework.org/schema/flex"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans
- http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
- http://www.springframework.org/schema/flex
- http://www.springframework.org/schema/flex/spring-flex-1.5.xsd
- http://www.springframework.org/schema/context
- http://www.springframework.org/schema/context/spring-context-2.5.xsd">
- <context:component-scan base-package="*" />
- <context:annotation-config/>
- <bean id="applicationContext" class="org.apache.axis2.extensions.spring.receivers.ApplicationContextHolder" />
- </beans>
WebContent/WEB-INF/services/axis/META-INF/services.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <service name="userService">
- <parameter name="ServiceObjectSupplier">
- org.apache.axis2.extensions.spring.receivers.SpringAppContextAwareObjectSupplier
- </parameter>
- <parameter name="load-on-startup">true</parameter>
- <parameter name="SpringBeanName">userService</parameter>
- <messageReceivers>
- <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver" />
- <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver" />
- </messageReceivers>
- </service>
web.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
- <context-param>
- <param-name>contextConfigLocation</param-name>
- <param-value>classpath:spring/spring-*.xml
- </param-value>
- </context-param>
- <listener>
- <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
- </listener>
- <listener>
- <listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
- </listener>
- <display-name>Axis2SpringWS</display-name>
- <servlet>
- <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>
- <welcome-file-list>
- <welcome-file>index.html</welcome-file>
- <welcome-file>index.htm</welcome-file>
- <welcome-file>index.jsp</welcome-file>
- <welcome-file>default.html</welcome-file>
- <welcome-file>default.htm</welcome-file>
- <welcome-file>default.jsp</welcome-file>
- </welcome-file-list>
- <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-mapping>
- <servlet-name>AdminServlet</servlet-name>
- <url-pattern>/servlet/AdminServlet</url-pattern>
- </servlet-mapping>
- </web-app>
weblogic.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <wls:weblogic-web-app xmlns:wls="http://xmlns.oracle.com/weblogic/weblogic-web-app" 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 http://xmlns.oracle.com/weblogic/weblogic-web-app http://xmlns.oracle.com/weblogic/weblogic-web-app/1.3/weblogic-web-app.xsd">
- <wls:weblogic-version>10.3.6</wls:weblogic-version>
- <wls:context-root>Axis2SpringWS</wls:context-root>
- <wls:container-descriptor>
- <wls:prefer-web-inf-classes>true</wls:prefer-web-inf-classes>
- </wls:container-descriptor>
- </wls:weblogic-web-app>
详细参考:
Apache Axis2 User's Guide
http://axis.apache.org/axis2/java/core/docs/userguide.html
Axis2 Integration with the Spring Framework
http://axis.apache.org/axis2/java/core/docs/spring.html
POJO Web Services using Apache Axis2
http://axis.apache.org/axis2/java/core/docs/pojoguide.html
JAX-WS Guide
http://axis.apache.org/axis2/java/core/docs/jaxws-guide.html