异常解析
Session variable "sr#org.mule.session.DefaultMuleSession.va ZvalidL[1]idtLjava/lang/String" is malfomed and cannot be read
|
发生过程:Mule 3.2.1 通过binding方式调用其他service部署在Mule 2.2.1版本下:
主要原因由于:使用的SessionHandler的问题:相关类:Base64Encoder,MuleSessionHandler,LegacySessionHandler下面是两段代码:
Mule 2.2.1-MuleSessionHandler
- public void storeSessionInfoToMessage(MuleSession session, MuleMessage message) throws MuleException
- {
- StringBuffer buf = new StringBuffer();
- buf.append(getSessionIDKey()).append("=").append(session.getId());
- for (Iterator iterator = session.getPropertyNames(); iterator.hasNext();)
- {
- Object o = iterator.next();
- buf.append(";");
- buf.append(o).append("=").append(session.getProperty(o));
- if (logger.isDebugEnabled())
- {
- logger.debug("Adding property to session header: " + o + "=" + session.getProperty(o));
- }
- }
- String sessionString = buf.toString();
- if (logger.isDebugEnabled())
- {
- logger.debug("Adding session header to message: " + sessionString);
- }
- sessionString = (String) encoder.transform(sessionString);
- message.setProperty(MuleProperties.MULE_SESSION_PROPERTY, sessionString);
- }
Mule 3.2.1-SerializeAndEncodeSessionHandler
- @Override
- public void storeSessionInfoToMessage(MuleSession session, MuleMessage message) throws MuleException
- {
- byte[] serializedSession = SerializationUtils.serialize(removeNonSerializableProperties(session,message.getMuleContext()));
- String serializedEncodedSession;
- try
- {
- serializedEncodedSession = Base64.encodeBytes(serializedSession, Base64.DONT_BREAK_LINES);
- }
- catch (IOException e)
- {
- throw new SessionException(MessageFactory.createStaticMessage("Unable to serialize MuleSession"), e);
- }
- if (logger.isDebugEnabled())
- {
- logger.debug("Adding serialized and base64-encoded Session header to message: " + serializedEncodedSession);
- }
- message.setOutboundProperty(MuleProperties.MULE_SESSION_PROPERTY, serializedEncodedSession);
- }
解决方案:使用Mule3.2.1中的LegacySessionHandler类来作为莫尔纳的sessionHandler
- <?xml version="1.0" encoding="UTF-8"?>
- <mule xmlns="http://www.mulesoft.org/schema/mule/core" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns:spring="http://www.springframework.org/schema/beans" xmlns:cxf="http://www.mulesoft.org/schema/mule/cxf"
- xmlns:quartz="http://www.mulesoft.org/schema/mule/quartz" xmlns:test="http://www.mulesoft.org/schema/mule/test"
- xmlns:vm="http://www.mulesoft.org/schema/mule/vm" xmlns:smtp="http://www.mulesoft.org/schema/mule/smtp"
- xmlns:email="http://www.mulesoft.org/schema/mule/email" xmlns:http="http://www.mulesoft.org/schema/mule/http"
- xsi:schemaLocation="
- http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
- http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/3.2/mule.xsd
- http://www.mulesoft.org/schema/mule/test http://www.mulesoft.org/schema/mule/test/3.2/mule-test.xsd
- http://www.mulesoft.org/schema/mule/quartz http://www.mulesoft.org/schema/mule/quartz/3.2/mule-quartz.xsd
- http://www.mulesoft.org/schema/mule/vm http://www.mulesoft.org/schema/mule/vm/3.2/mule-vm.xsd
- http://www.mulesoft.org/schema/mule/smtp http://www.mulesoft.org/schema/mule/smtp/3.2/mule-smtp.xsd
- http://www.mulesoft.org/schema/mule/email http://www.mulesoft.org/schema/mule/email/3.2/mule-email.xsd
- http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/3.2/mule-http.xsd
- http://www.mulesoft.org/schema/mule/cxf http://www.mulesoft.org/schema/mule/cxf/3.2/mule-cxf.xsd">
- <http:connector name="legacyConnector">
- <service-overrides sessionHandler="org.mule.session.LegacySessionHandler"/>
- </http:connector>
- <flow name="cxfBinding1FlowWSDL">
- <inbound-endpoint address="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" />
- <cxf:jaxws-service
- serviceClass="com.synnex.ws.demo.cxf.bindingclient.BindingServiceImpl" />
- <component class="com.synnex.ws.demo.cxf.bindingclient.BindingServiceImpl">
- <binding interface="com.synnex.ws.demo.cxf.bindingclient.BindingInterface"
- method="login">
- <outbound-endpoint name="testClient1"
- address="xxxxxxxxxxxxxxxxxxxx" connector-ref="legacyConnector"
- >
- <cxf:jaxws-client operation="login" serviceClass="xxxxxxxxxxxxxxx">
- </cxf:jaxws-client>
- </outbound-endpoint>
- </binding>
- </component>
- </flow>
- </mule>
转载于:https://blog.51cto.com/ganludong/762351