如何强制Mediator接受警笛内容

时间:2018-01-15 16:10:53

标签: webmethods

我有一个REST服务,它使用带有警报内容的超媒体。 要使用,客户端必须发送带有此值的Accept标头:

application/vnd.siren+json

但是,当我通过Centrasite将此服务虚拟化为Mediator包时,请求将被拒绝。 当我使用仅接受application/json次请求的接受时,但内容没有超媒体链接,因此无法使用。

我更改了Mediator包的资源中的content-types.xml文件:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<content-types xmlns="http://contentTypes.mediator.softwareag">
    <!-- Please enter the custom content-types
    <content-type type="xml">
            <name></name>
    </content-type>
    -->
    <content-type type="json">
            <name>application/vnd.siren+json</name>
    </content-type>
</content-types>

有了这个,现在接受带有警报器的请求,但是没有超媒体内容(与application / json一样)

如何强制Mediator接受此接受标头并将其转移到端点而不更改它?

我使用webMethods Integration Server 9.7和IS_9.7_Core_Fix19以及Mediator 9.7.0.0017-0490

更新:

查看端点日志后,标题和响应似乎是正确的,但响应会被中介截断。 所有警报内容都从json响应中删除,但响应仍然很好,但是不完整,即使在调试模式下也没有任何Mediator登录。

是调解员问题,轴心问题还是其他问题?

1 个答案:

答案 0 :(得分:0)

在Empower知识库中搜索后,我发现了这个:

If the Content-Type header field specifies a content type for which no content
handler has been registered, Integration Server uses the default content 
handler (ContentHandler_Default), which treats the content as text/html.

这就解释了为什么我必须更改WmMediator包的config目录中的content-types.xml文件。

其次,我发现了这个问题:

SMGME-6616 (Fix 18)
MultiRoot node elements of JSON type are not passed for a custom content type.
When a custom content type for JSON is executed and a multi root node 
element is passed as a request for virtual rest API, then only the first 
node is passed to the backend native API. This issue is resolved.

这似乎是一个很好的解释,为什么我没有完整的回复内容,因为使用Siren超媒体格式,我们在json消息中有多个根。

所以,除了补丁之外没有解决方案。

修改

修补后,问题得到解决