拨打电话时出现mule-序列化异常

时间:2014-02-18 10:02:05

标签: serialization mule outbound

我有一个简单的流,它有一个http入站端点。我正在尝试使用http出站并收到以下异常。

我可以直接从SOAP UI使用相同的出站。但是,无法通过Mule流程打电话。

java.io.OptionalDataException(org.apache.commons.lang.SerializationException)

来自端点的响应...内部服务器错误,代码:500

    INFO  2014-02-17 07:16:41,234 [[updatecustomer].connector.http.mule.default.receiver.02]
     org.mule.api.processor.LoggerMessageProcessor: Logger ...in main thread
     java.io.OptionalDataException (org.apache.commons.lang.SerializationException)

希望这个原始的xml有助于识别问题。

来自SOAP UI的原始XML输入:

    POST http://localhost:8080/foo3 HTTP/1.1
    Accept-Encoding: gzip,deflate
    Content-Type: text/xml;charset=UTF-8
    SOAPAction: ""
    Content-Length: 2044
    Host: localhost:8080
    Connection: Keep-Alive
    User-Agent: Apache-HttpClient/4.1.1 (java 1.5)

来自SOAP UI输出的原始XML(直接命中端点):

    HTTP/1.1 200 OK
    Date: Tue, 18 Feb 2014 06:10:56 -0600
    Server: Mule Core/3.4.0
    Content-Type: text/xml; charset=UTF-8
    X-MULE_SESSION: sjkfsdhbbzzzxxxxxxx ....
    http.method: POST
    X-MULE_ENCODING: UTF-8
    Transfer-Encoding: chunked
    Connection: close

通过Mule流程从SOAP UI获取原始XML:

    HTTP/1.1 500 Internal Server Error
    Content-Type: text/plain
    Date: Tue, 18 Feb 2014 06:09:49 -0600
    Server: Mule EE Core Extensions/3.4.1
    http.status: 500
    X-MULE_SESSION: sdkfasdfgsdkgfbsdfkxxxxxxxhshduiaodudyy.....
    X-MULE_ENCODING: UTF-8
    Content-Length: 78
    Connection: close

2 个答案:

答案 0 :(得分:2)

尝试为HTTP连接器设置NullSessionHandler:

<http:connector name="NoSessionConnector">
    <service-overrides sessionHandler="org.mule.session.NullSessionHandler" />
</http:connector>

答案 1 :(得分:0)

这听起来好像您向出站发送了一些不正确的标题或数据,并且它以500错误响应。一个典型的问题是使用不正确的Content-Type标头,因此您可能会在端点之前遗漏<set-property propertyName="Content-Type" value="text/xml;charset=UTF-8"/>之类的内容。同样从SoapUI添加soap标头SOAPAction,并确保您的出站HTTP端点是POST。

对于调试,我建议您尝试使用Postman或其他一些简单的HTTP客户端来获得成功的响应,然后在Mule中设置完全相同的标头/数据。在出站端点之前使用记录器,以确保您的消息正文与您在SoapUI / Postman中成功使用的消息正文相匹配。此外,在尝试将HTTP响应映射到任何内容之前,请记录HTTP响应,因此您知道您没有使用无效数据。如果您有开发人员访问您正在呼叫的服务,请查看日志中的内容。