在CXF升级时删除了MultipartBody Content-Type属性

时间:2016-01-04 18:55:19

标签: jax-rs cxf multipart

将Apache CXF从2.4.0升级到3.1.4后,来自JAX-RS方法的响应的Content-Type标题已删除了几个属性。

在CXF 2.4.0下,标题为:

Content-Type: multipart/mixed; type="application/octet-stream"; boundary="uuid:61b631f1-0aa9-4cc8-ad85-3c09129ec442"; start="<DocumentName.ext>"; start-info="application/octet-stream"

在CXF 3.1.4下,它是:

Content-Type: multipart/mixed; boundary="uuid:804168d7-70ed-44e7-a471-9647372b9224"

注意:属性typestartstart-info缺失。

以下是我们正在使用的代码:

@GET
@Path( "{order_id}/document/{document_id}/file" )
@Produces("multipart/mixed")
public MultipartBody getDocument( @PathParam( "order_id") int _orderId,  @PathParam( "document_id") int _documentId) throws Exception {

   FileInfo fileInfo = findFileInfo( _orderId, _documentId );

   List<Attachment> atts = new ArrayList<Attachment>();

   File internalFile = fileInfo.getActualFile();

   String fileName = fileInfo.getOriginalDocumentName();

   String fileSize = String.valueOf( internalFile.length() );

   ContentDisposition cd = new ContentDisposition("attachment; filename=\"" + fileName + "\"; size=" + fileSize );

   InputStream inputStreamToUse = new FileInputStream( internalFile );

   Attachment att = new Attachment(fileName, inputStreamToUse, cd);

   atts.add( att );

   return new MultipartBody(atts, true);    
}

我无法在Migration Guides中找到此区域中的任何更改,上述方法的风格似乎与getBooks2() method in the JAX-RS Multipart documentation中的风格相匹配。

任何可能导致不同行为的指导?

1 个答案:

答案 0 :(得分:1)

这样做是因为根据http://tools.ietf.org/html/rfc2387显然只有multipart/related媒体类型可以包含可选的startstart-info属性。

有关该主题的更完整的讨论在CXF邮件列表中,特别是this message,表明Content-Type也已被破坏。