gpt4 book ai didi

java - Web 服务返回 java.lang.reflect.InvocationTargetException

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:17 26 4
gpt4 key购买 nike

我在向 java 网络服务发出请求时收到上述消息。

我们最初创建了一个 Java Console 应用程序并手动提交了一个 xml 文件。将其作为 Java 应用程序运行时,使用 System.out.println 成功创建并显示了响应。我们通过选择包含方法的 java 文件并选择“创建 web 服务”来创建 web 服务,指定要在其中创建 web 服务的动态项目和要公开的方法。

应用程序正在做的是获取一个 xml 文件并将其解码为一个对象,使用:

 public static Object unmarshalToObject(Class classToBeBound,
String xmlRequest) {
Object obj = new Object();
try {
JAXBContext jc = JAXBContext.newInstance(classToBeBound);
Unmarshaller um = jc.createUnmarshaller();
obj = um.unmarshal(new StringReader(xmlRequest));
} catch (Exception e) {
e.printStackTrace()
}
return obj;
}

对文件进行一些处理,然后将对象编码为 xml,如下所示:

 public static String marshalToXML(Object data) {
StringWriter sw = new StringWriter();
try {
logger.info("Create new Marshall");
JAXBContext jc = JAXBContext.newInstance("ContextPathName");
logger.info("Marshalled to xmlObjects");
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
marshaller.marshal(data, sw);
} catch (Exception e) {
logException(logger, e);
}
return sw.toString();
}

以下是似乎导致问题的代码行,因为记录器在此之前显示消息:

JAXBContext jc = JAXBContext.newInstance("ContextPathName");

Web 服务永远不会到达下一行 - 以下是 SOAP 消息的主体:

  <soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.lang.reflect.InvocationTargetException</faultstring>
<detail>
<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">servername</ns1:hostname>
</detail>
</soapenv:Fault>

我已经在这部分代码周围添加了 Try/Catch,甚至在寻找 JAXBExceptions 时也是如此,但这似乎没有捕获到任何东西 - 一般异常也没有捕获到。

运行控制台应用程序时不会出现此问题。这个的构建路径包括sun\jwsdp-2.0\jaxb\lib的以下内容:

jaxb-api.jar
jsr173_1.0_api.jar
jaxb-impl.jar

我已经将这些添加到动态项目的WEB-INF文件中的lib文件夹中。

我在 JBuilder 2008 R2 中运行网络服务并使用 SOAPUI 提交请求 - 这指向创建网络服务时生成的 wsdl。

如果有人对如何解决这个问题有任何帮助或想法,请回复 - 感谢您花时间阅读这篇文章!

最佳答案

我的做法与您非常相似,通过 SOAP 获取一些 XML 并将其编码为对象。这不一定与问题有关。

当在处理请求的过程中在 Axis 内部运行某些 Java 代码时出现问题时,将抛出 InvocationException。您需要指定一些额外的选项才能访问 Axis 本身的日志输出。一旦你得到这个输出,你很可能会看到一个对你有意义的异常(在我的例子中,我使用的是一个我没有包含在我的服务器类路径中的类)。

基本上,您需要将一个 LogHandler 添加到您的 WSDD 文件中。下一页有关于您在 WSDD 中需要什么的很好的指南。但是,此页面讨论的是用于 Axis 客户端的 client-config.wsdd,而我将 Axis 捆绑在我的 EAR 中并对 server-config.wsdd 进行了更改。

http://www.theserverside.com/discussions/thread.tss?thread_id=35765

This page具有更特定于 Tomcat 的信息

请注意,axis.log 的保存位置可能因您的服务器和操作系统而异。有人报告它出现在 Windows 的 System32 目录中,第二个链接说它将出现在 Tomcat 的 bin/目录中。在我的例子中(Mac OS X,Glassfish 2.1.1)它出现在我域的 config/目录中。

关于java - Web 服务返回 java.lang.reflect.InvocationTargetException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3000550/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com