重写CXF LoggingOutInterceptor中的isBinaryContent()方法



我需要扩展CXF用于检查二进制数据的内容类型,并遇到了这个答案:停止Apache CXF记录MultipartBody附件的二进制数据

但是,当我尝试实现isBinaryData()方法的覆盖时:

@Override
public boolean isBinaryContent(String contentType) {
    return contentType != null && BINARY_CONTENT_MEDIA_TYPES.contains(contentType) || "myContentType".equals(contentType);
}

访问BINARY_CONTENT_MEDIA_TYPES时出现错误:

字段abstractloginginterceptor。BINARY_CONTENT_MEDIA_TYPES不是可见

在CXF实现中,该BINARY_CONTENT_MEDIA_TYPES是通过静态块实现的,如开始时引用的问题所示。我只是简单地重新声明这个列表:

private static final List<String> BINARY_CONTENT_MEDIA_TYPES;
static {
    BINARY_CONTENT_MEDIA_TYPES = new ArrayList<String>();
    BINARY_CONTENT_MEDIA_TYPES.add("application/octet-stream");
    BINARY_CONTENT_MEDIA_TYPES.add("image/png");
    BINARY_CONTENT_MEDIA_TYPES.add("image/jpeg");
    BINARY_CONTENT_MEDIA_TYPES.add("image/gif");
}

如果是这样的话,我可以在List中添加另一个具有我所需内容类型的条目。

BINARY_CONTENT_MEDIA_TYPES字段是私有的,不能从子类访问。链接问题中的答案可能来自CXF的早期版本,其中列表不是私有的。

正如您所说,您可以重新声明列表,其中也包含您的内容类型。您还可以将您的逻辑附加到父实现中的现有逻辑:

@Override
protected boolean isBinaryContent(String type)
{
    return super.isBinaryContent(type) || "myContentType".equals(type);
}

如果CXF的未来版本更改了BINARY_CONTENT_MEDIA_TYPES列表,则该实现将自动继承这些更改。而如果列表是复制的,那么您必须手动更改实现。

相关内容

  • 没有找到相关文章

最新更新