在Glassfish中使用saaj.soap到xml.soap castException

时间:2013-02-07 13:14:01

标签: java web-services glassfish

我有一个工作解决方案,它在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
}

当Envelope包含空格时,抛出以下异常:

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

有人可以帮我解释这个问题吗?

1 个答案:

答案 0 :(得分:0)

将Windows计算机更新为jdk1.7.0_13和GlassFish 3.1.2之后,我遇到了同样的问题,即我无法使用空格填充SOAP消息。

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

结果是我现在已经创建了一个例程,你传递了SOAPBody,它迭代了ChildElements,直到找到一个Element而不是Node。

如果您正在阅读此内容,可能不是您想听到的内容,但它目前适用于我。