1

我有一个在 GlassFish 上部署了 Web 服务的工作解决方案,当客户端向 Web 服务发送 XML 请求时,我从 SOAPBody 中提取第一个子节点。这适用于在 Windows 7、Server 2003 和 Server 2008 R2 上运行的 GlassFish 3.1.1 和 java 运行时 1.6.0_06-b02。

我被要求在 Ubuntu 12.10 上运行的 GlassFish 3.1.2 和 java runtime 1.7.0_09 上部署解决方案

当使用我在 SOAPEnvelope 的 XML 中没有空格的测试工具运行时,3.1.1 和 3.1.2 系统都可以正常工作,但是,如果我使用 SoapUI 发送包含空格的消息,则 Window 安装工作正常,而 Ubuntu版本引发强制转换异常。

当我尝试运行以下代码片段(分配给 Web 服务的消息处理程序)时:

public boolean handleMessage(SOAPMessageContext messageContext) {
    SOAPElement requestElt = (SOAPElement) messageContext.getMessage().getSOAPBody().getFirstChild();
    // Do things here
}

当信封包含空格时,将引发以下异常:

com.sun.xml.messaging.saaj.soap.impl.TextImpl cannot be cast to javax.xml.soap.SOAPElement

谁能帮我解释一下这个问题?

4

1 回答 1

0

在将 Windows 机器更新到 jdk1.7.0_13 和 GlassFish 3.1.2 后,我遇到了同样的问题,即我无法处理带有空格的 SOAP 消息。

我不知道为什么会这样,问题出在 JDK 还是 GlassFish 上,以及是引入的问题还是 XML 处理的收紧。

结果是我现在创建了一个例程,您也传递了 SOAPBody,它遍历 ChildElements,直到找到一个元素而不是一个节点。

如果你正在阅读这篇文章,那可能不是你想听到的,但它目前对我有用。

于 2013-02-13T13:12:40.433 回答