在我的情况下,使用正确的查询服务器始终返回正常处理并发回的XML响应。但与此同时,服务器配置是这样的,当一个不正确的查询它返回一个HTML响应而不是XML。如果你试图处理或如何替换,重新创建响应的主体我只是得到一个错误解析只有工作的东西才会被发送回用户。是否有可能以某种方式避免解析过程并以个人格式发送错误?
几个细节:
所以我得到了回复代码
<property xmlns:ns="http://org.apache.synapse/xsd" name="Status" expression="$axis2:HTTP_SC" scope="default" type="STRING"/>
选择一个处理器,然后将所有人送回用户
<switch xmlns:ns="http://org.apache.synapse/xsd" source="$axis2:HTTP_SC">
<case regex="401">
<send/>
</case>
在这种情况下,一切正常。以下是用户按原样获取HTML服务器的响应。
BUT!当你试图像这样替换响应的主体时
<case regex="401">
<payloadFactory media-type="xml">
<format>
<error xmlns="">
<message>some message</message>
</error>
</format>
</payloadFactory>
<send/>
我收到错误
[2013-09-11 15:20:06,669] ERROR - AnonymousListMediator Error while building messageorg.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxParsingException: Unexpected lose tag </head>; expected </link>. at [row,col {unknown-source}]: [13,6] at org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
是任何替换答案的尝试(即使通过故障介体)导致此错误。 有什么想法吗?
答案 0 :(得分:2)
请原谅我问这个问题真的能够解决它! 在搜索解决方案已经花了很多时间,然后我就在这里留下这个问题的解决方案。问题是
的默认设置contentType="text/html"
在系统设置中未指定此内容类型的Message Builder。 为了使所有人都能找到一个文件 {WSO2 ESB HOME} /repository/conf/axis2/axis2.xml
找到它(消息构建器) 因此,在本节中没有该内容类型的处理程序。 (如果我是开发人员WSO我会问这个默认处理程序但是唉,在这种情况下,它不适合) 因此,在本节中,您需要为我们的内容类型添加处理程序
<messageBuilder contentType="text/html"
class="org.wso2.carbon.relay.BinaryRelayBuilder"/>
所以它会将消息处理为二进制。但与此同时,它不会导致系统崩溃。在此操作之后,您可以安全地使用PayloadFactory,如上所示。 这个对我有用!也许别人会有用。感谢您的关注。 个人感谢Chanaka udaya尝试。
答案 1 :(得分:-1)
您可以通过在介体之后添加介体(如下所示)来查看payloadFactory介体是否已创建消息正文。
<case regex="401">
<payloadFactory media-type="xml">
<format>
<error xmlns="">
<message>some message</message>
</error>
</format>
</payloadFactory>
**<log level="full"/>**
<send/>
您可以使用此日志中介验证邮件是否已构建。如果您可以共享整个synapse配置,我们可以提供适当的解决方案。