首页 文章

在WSO2 ESB 4.9.0中使用payloadFactory生成javascript有效负载

提问于
浏览
2

我想在WSO2 ESB 4.9.0中创建一个API资源,在那里它发回一个带有javascript内容的有效负载 . 此资源必须返回Content-type:text / javascript的响应 .

为此,我使用了一个payloadFactory中介,我设置了一个简单的注释行 . 因为,没有带有media-text text-plain或text-javascript的payloadFactory,我使用media-type =“json” .

而且,我得到了很好的回应 . 但是,当我将messageType设置为“text / javascript”时,我在响应中得到202个http代码,并且有效负载为空 .

我在调用PlainTextFormatter时会在日志中看到nullPointerException,因为我在axis2.xml中设置了org.apache.axis2.format.PlainTextFormatter和org.apache.axis2.format.PlainTextBuilder .

我的资源如下:

<resource methods="GET" uri-template="/js">
    <inSequence>
        <log>
            <property name="*** IN" value="[API] /test/v1/jsEcho/js"/>
        </log>
        <payloadFactory media-type="json">
            <format>//tealium universal tag - utag.sync ut4.0.201604181647, Copyright 2016 Tealium.com Inc. All Rights Reserved.</format>
            <args></args>
        </payloadFactory>
        <property name="messageType" value="application/json" scope="axis2" type="STRING"/>
        <loopback/>
    </inSequence>
    <outSequence>
        <log>
            <property name="*** OUT" value="[API] /test/v1/jsEcho/js"/>
        </log>
        <property name="messageType" value="text/javascript" scope="axis2" type="STRING"/>
        <send/>
    </outSequence>
    <faultSequence></faultSequence>
</resource>

并且,日志中的错误是here .

反正有没有这样做?

1 回答

  • 2

    由于这是一个有趣的问题,我试过这个 . 好消息是,我能够完成它 .

    以下是我的api配置 .

    <api xmlns="http://ws.apache.org/ns/synapse" name="Stack" context="/stack">
       <resource methods="GET" url-mapping="/js">
          <inSequence>
             <payloadFactory media-type="xml">
                <format>
                   <ms11:text xmlns:ms11="http://ws.apache.org/commons/ns/payload"><![CDATA[//tealium universal tag - utag.sync ut4.0.201604181647, Copyright 2016 Tealium.com Inc. All Rights Reserved.]]></ms11:text>
                </format>
                <args/>
             </payloadFactory>
            <property name="messageType" value="text/javascript" scope="axis2"/>
             <respond/>
             <drop/>
          </inSequence>
       </resource>
    </api>
    

    让我解释一下我所做的一些事情 .

    • 我在inSequence中使用了响应中介和drop mediator,将通过有效负载工厂中介生成的有效负载返回给客户端,然后删除该消息 . 有了这个,消息不会超过这一点,然后你不需要outSequence .

    • 我无法解释它如何与ms11:text标签一起使用 . 我是从Transform response to plain-text using wso2 esb 4.0.6找到的 .

    • 我用CDATA来封装你的javascript . 它也适用于没有CDATA标签 . 如果你的javascript中有xml非友好字符,你可以使用它 .

    • 我为text / javascript内容类型添加了纯文本格式化程序 .

    请参阅我收到卷曲请求的回复 .

    curl -v -X GET http://localhost:8280/stack/js
    
    < HTTP/1.1 200 OK
    < Host: localhost:8280
    < Content-Type: text/javascript; charset=UTF-8
    < Accept: */*
    < Date: Mon, 13 Jun 2016 16:52:36 GMT
    < Transfer-Encoding: chunked
    < 
    * Connection #0 to host localhost left intact
    //tealium universal tag - utag.sync ut4.0.201604181647, Copyright 2016 Tealium.com Inc. All Rights Reserved.
    

相关问题