axis2常见异常总结
Axis2 常见异常总结 Axis2 是一个流行的WebService框架,它提供了许多功能强大且灵活的特性。然而,在实际使用中,我们经常会遇到各种异常问题。下面我们将总结 Axis2 中的一些常见异常问题及其解决方法。 1. Jar 包或文件夹下的类成员变量需要有 get 方法 在 Axis2 中,如果我们在 WebService 方法中引用了其他 Jar 包或文件夹下的类,那么这些 Jar 包或文件夹下的类的成员变量就需要有 get 方法,否则就会出现找不到属性错误。解决方法是修改这些 Jar 包或文件夹下的类,给它们加入 get 方法。 2. services.xml 中需要加入 scope="transportsession" 如果我们在使用 Axis2 时抛出了 org.apache.axis2.AxisFault: The input stream for an incoming message is null 异常,就说明 services.xml 中没有加入 scope="transportsession"。解决方法是将 services.xml 配置文件中加入 scope="transportsession"。 3. 访问 Lucene 中 protected 方法 如果我们在使用 Axis2 时抛出了 org.apache.axis2.AxisFault: Class org.apache.axis2.engine.DefaultObjectSupplier can not access a member of class org.apache.lucene.analysis.Analyzer with modifiers "protected" 异常,就说明没法访问 Lucene 中 protected 方法。解决方法是修改源码,将 Analyzer 中的 protected 修饰的方法改为 public 的。 4. 访问 Lucene 中 abstract 方法 如果我们在使用 Axis2 时抛出了 org.apache.axis2.AxisFault: Class org.apache.axis2.engine.DefaultObjectSupplier can not access a member of class org.apache.lucene.analysis.Analyzer with modifiers "abstract" 异常,就说明没法访问 Lucene 中 abstract 方法。解决方法是修改源码,将 Analyzer 中的 abstract 方法改为非 abstract 的,并将 Analyzer 这个类的变成非 abstract 的。 5. services.xml 中需要使用 UTF-8 编码 如果我们在使用 Axis2 时抛出了 Invalid UTF-8 middle byte exception 异常,就说明 services.xml 中没有使用 UTF-8 编码。解决方法是将 services.xml 配置文件中使用 UTF-8 编码。 6. Axis2 创建的WebService方法参数不能是数组类型的 如果我们想传入一个数组类型的参数给 Axis2 创建的 WebService 方法,那么需要将其转换为字符串,方可传递。例如,我们可以将 int[] array=new int[]{1,2,3,4} 转换为 String array2=”1,2,3,4” 传递给 WebService 方法。 7. Axis2 创建的WebService方法参数类型需要与调用它时传给它的参数类型完全一致 如果我们在使用 Axis2 时传递了错误的参数类型,就会出现异常。解决方法是将 Axis2 创建的 WebService 方法参数类型与调用它时传给它的参数类型完全一致。例如,我们可以将 public void createIndex(String indexDirectory,Analyzer ana,String xmlFolder) 方法修改为 public void createIndex(String indexDirectory,IKAnalyzer ana,String xmlFolder)。 8. 超时异常 如果我们在使用 Axis2 时出现了超时异常,可以通过修改 %TOMCAT_HOME%\webapps\axis2\WEB-INF\conf\axis2.xml 文件中的<parameter name="ConfigContextTimeoutInterval">30000</parameter>,将其改大一些,以解决超时问题。 9. 传递 Date 类型参数 如果我们想传递 Date 类型参数给 Axis2 创建的 WebService 方法,那么需要先将 Date 类型转换为 String 类型再传递。例如,我们可以将”2012-12-28 7:21:33”传给 WebService 方法。 10. 使用 invokeRobust 调用服务方法 如果我们想使用 invokeRobust 调用服务方法,需要在服务方法中加入返回值使用 axis2 不当造成的异常。