2012-11-25 146 views
0

我构建了一个GET REST webservice(Rest API),它必须返回text/html。 在序列内部,我有一个调解器,我调用一个网页(如http://www.mypage.com或其他),并将其内容获取到一个String变量中。
之后,我需要在内容中做一些字符串替换,并将其作为text/html发送回客户端。
问题是,当我在我的页面中找到它时,esb已将所有<html>和其他标记替换为&lt;html&gt;标记。因此,Web浏览器不会呈现html页面,而只是将标记写入页面本身。WSO2 ESB - HTML响应

其主要思想是它像servlet的代理一样工作,在那里我调用一个servlet,得到响应,在de和html里面做一些字符串替换,然后发送给客户端。

这里是序列XML:

<resource methods="GET" uri-template="/view"> 
    <inSequence> 
    <log level="full"/> 
    <header name="To" action="remove"/> 
    <property name="URL" value="http://www.mypage.com"/> 
    <sequence key="MyMediator"/> 
    <property name="RESPONSE" value="true"/> 
    <property name="NO_ENTITY_BODY" scope="axis2" action="remove"/> 
    <property name="ContentType" value="text/html" scope="axis2"/> 
    <enrich> 
     <source type="property" clone="true" property="RESPONSE_MSG"/> 
     <target type="body"/> 
    </enrich> 
    <send/> 
    </inSequence> 

于是,我把字符串变量与HTML(从中介MyMediator,这是一个Java类了,并调用网页www.mypage .com)转换为属性'RESPONSE_MSG',然后尝试将其写入主体(丰富)。

在这种情况下,我得到一个错误,因为我设置的属性是一个字符串而不是XML。
如果我使用payloadFactory而不是丰富,那么它将生成一个XML,我将得到&lt;html&gt;的html标签。

我想知道一种有效的方式,我可以从中介发送字符串变量,它不会被转换成一些xml,其中所有的html标签都被&lt;&gt;取代。或者我可以像上面的代码一样发送它,而不会出现任何错误。我必须使用另一种类型来存放属性RESPONSE_MSG中的变量吗?

在此先感谢!

回答

0

这是使用的messageFormatter(text/html)的问题。检查conf目录中的axis2.xml文件,查看为关键字text/html配置了哪个messageFormatter。否则,可以尝试使用普通的XML构建器(即application/xml)。

+0

我认为axis2.xml中的messageFormatter是可以的,它为**“text/html”ContentType配置** org.wso2.carbon.relay.ExpandingMessageFormatter **。我在这个问题中提供了更多的信息来澄清一点。 –