【发布时间】:2014-01-16 16:16:35
【问题描述】:
所以,我最近将我们的 Grails 应用程序从版本 1.3.7 升级到了 2.3.4。我现在在尝试提取消息内容并将其记录到数据库的 SOAP 处理程序中遇到异常。这在 1.3.7 中有效,但我假设一些新的依赖项或某些东西与类路径混淆了。
代码如下所示:
private String extractSOAPMessage(SOAPMessageContext smc) {
Source source = smc.getMessage().getSOAPPart().getContent()
TransformerFactory factory = TransformerFactory.newInstance()
Transformer transformer = factory.newTransformer()
transformer.setOutputProperty( OutputKeys.METHOD, "xml" )
java.io.StringWriter writer = new StringWriter()
Result result = new StreamResult( writer )
transformer.transform( source, result )
return writer.toString()
}
我看到的例外是:
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of <bootloader>) previously initiated loading for a different type with name "javax/activation/DataHandler"
它发生在这一行: 源source = smc.getMessage().getSOAPPart().getContent()
看起来罪魁祸首是 getSOAPart() 调用。
请注意,我正在为 Grails 使用 1.1.1 版本的 cxf 插件。对此的任何帮助将不胜感激。我发现了几个类似的解决方案问题,但没有一个是针对“javax/activation/DataHandler”的,所以我不确定这里发生了什么。
【问题讨论】:
-
我怀疑某些东西对您需要排除的
activation库具有传递依赖 - 尝试依赖报告。从 Java 6 开始,JAR 就不再是必需的,因为它内置在核心 Java 类库中,但许多东西仍然依赖于它,因此它们可以在 Java 5 上工作(或者可以追溯到 Java 5 仍在广泛使用的时候) . -
激活 jar 确实是问题所在。谢谢!
-
没问题,我已经把我的评论变成了你可以接受的答案。