Java 重写CXF LoggingOutinerCeptor中的isBinaryContent()方法
我需要扩展CXF用于检查二进制数据的内容类型,并找到了以下答案: 但是,当我尝试实现Java 重写CXF LoggingOutinerCeptor中的isBinaryContent()方法,java,logging,cxf,interceptor,binary-data,Java,Logging,Cxf,Interceptor,Binary Data,我需要扩展CXF用于检查二进制数据的内容类型,并找到了以下答案: 但是,当我尝试实现isBinaryData()方法的重写时: @Override public boolean isBinaryContent(String contentType) { return contentType != null && BINARY_CONTENT_MEDIA_TYPES.contains(contentType) || "myContentType".equals(conte
isBinaryData()
方法的重写时:
@Override
public boolean isBinaryContent(String contentType) {
return contentType != null && BINARY_CONTENT_MEDIA_TYPES.contains(contentType) || "myContentType".equals(contentType);
}
访问二进制内容媒体类型时出错:
字段AbstractLoggingInterceptor.BINARY\u CONTENT\u MEDIA\u TYPES不可用
可见的
在CXF实现中,此二进制内容\媒体\类型
通过静态块实现,如开头引用的问题所示。我是否只需重新声明此列表:
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");
}
私有静态最终列表二进制内容媒体类型;
静止的{
二进制内容媒体类型=新ArrayList();
二进制内容媒体类型。添加(“应用程序/八位字节流”);
二进制内容媒体类型。添加(“图像/png”);
二进制内容媒体类型。添加(“图像/jpeg”);
二进制内容媒体类型。添加(“图像/gif”);
}
如果是这样,我可以在列表中添加另一个具有我所需内容类型的条目。二进制内容媒体类型字段是私有的,不能从子类访问。链接问题中的答案可能来自早期版本的CXF,该列表不是私有的 正如您所说,您可以在列表中重新声明您的内容类型。还可以将逻辑附加到父实现中的现有逻辑:
@Override
protected boolean isBinaryContent(String type)
{
return super.isBinaryContent(type) || "myContentType".equals(type);
}
如果CXF的未来版本更改了二进制内容媒体类型列表,此实现将自动继承这些更改。如果复制了列表,则必须手动更改实现。是否可以重新声明最终变量?是的,因为它是私有的。但是您当然可以根据需要命名子类中声明的列表。我们可以知道扩展内容类型的原因吗?现有类型是否不包括您的?