【问题标题】:InvocationTargetException from web service which returns a custom object来自返回自定义对象的 Web 服务的 InvocationTargetException
【发布时间】:2012-11-12 11:03:42
【问题描述】:

我正在将 Web 应用程序从 websphere 环境迁移到 tomcat7 和 Axis2。我有许多网络服务给我带来了问题。

Web 服务是使用 Eclipse (Juno) 中的 Web 服务向导从 Java 类创建的。相应的文件夹在 WEB-INF/services 下创建,应用程序可以调用服务。返回简单对象(字符串、整数等)的服务工作正常。返回自定义对象(例如客户、国家/地区)的服务会生成包含以下内容的错误响应:

<faultcode>soapenv:Server</faultcode>
<faultstring>java.lang.reflect.InvocationTargetException</faultstring>
<detail/>

自定义对象是可序列化的,并且有一个公共的 null 构造函数。就像测试一样,我将返回类型更改为 String 并将 toString() 添加到返回值 - 它起作用了。

什么可能导致这个问题?

【问题讨论】:

  • 您必须至少记录完整的堆栈跟踪并发布。
  • @MarkoTopolnik - 这部分是我的问题。我能找到的唯一日志是访问日志。我的代码中没有例外,所以没有什么要记录的。 Axis 有自己的日志记录吗?
  • @paul 查看我的回答,了解如何配置 LogHandler。

标签: java eclipse axis2


【解决方案1】:

不确定 Axis2,可能类似,但为了调试此类问题,使用 Axis,我将在 WSDD 文件中添加 LogHandler。这样,您将看到导致此问题的异常。对于tomcat,请参阅How to log SOAP messages for a Tomcat/Axis Web Service

对于 Axis2,您需要编写一个简单的模块,请参阅Writing Your Own Axis2 Module

【讨论】:

  • 我没有 WSDD 文件。我认为这只是针对 Axis1 但我可能错了。
  • @paul Axis2 似乎使用了不同的方法。请参阅我的更新答案。
【解决方案2】:

要从 Axis2 获取一些日志记录,我可以将以下内容添加到我的 log4j.xml:

<category name="org.apache.axis2" additivity="false">
    <priority value="trace"/>
    <appender-ref ref="roller"/>
    <appender-ref ref="console"/>
</category>

然后我能够看到 InvocationTargetException 的根本原因是我的一个类中的 NullPointerException。 Axis2 似乎对这些事情比 Axis1 更敏感。

【讨论】:

    猜你喜欢
    • 2010-12-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多