采用CXF中MTOM机制来实现REST方式的附件服务
在CXF及Axis中关于MTOM都有相关的例子可以参考,我这里想要说的是XML Schema中对附件数据格式的设定,及整合Spring时对cxf-servlet.xml的配置。
附件不同于文本类型,在包含附件的消息中媒体类型为Multiparts,而附件为MIME类型,跟文本域是分开的,可以参考以下的Soap消息截图:
所以在设计SOAP消息的XML Schema时,对于附件域的数据格式我们需要采用xmlmine,对于ContentType也需要有定义,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:xmime="http://www.w3.org/2005/05/xmlmime" xmlns:m="http://demo.dfe.com/xsd" targetNamespace="http://demo.dfe.com/xsd" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="AccessoryTest">
<xs:complexType>
<xs:sequence>
<xs:element name="ACCESSORY_NAME" type="xs:string"/>
<xs:element name="ACCESSORY" type="xs:base64Binary"
xmime:expectedContentTypes="application/octet-stream"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
注意对于xmime命名空间的引入及附件的类型和expectedContentTypes的定义。
另外在整合Spring时,我们还需要在cxf-servlet.xml中将mtom打开,如下所示:

<jaxrs:server id="accessory" address="http://localhost:8080/accessory">
<jaxrs:properties>
<entry key="mtom-enabled" value="true"/>
</jaxrs:properties>
<jaxrs:serviceBeans>
<ref bean="AccessoryTestResource" />
</jaxrs:serviceBeans>
</jaxrs:server>
VN:F [1.9.7_1111]
Rating: 3.0/10 (1 vote cast)
采用CXF中MTOM机制来实现REST方式的附件服务, 3.0 out of 10 based on 1 rating 相关文章
June 22, 2010 at 7:49 am
这是服务端,但如何来实现客户端呢?而且这个Java的服务端,怎么实现语言的客户端呢?其他语言也支持这种机制麽?
June 22, 2010 at 7:52 am
我也正在考虑这个问题,你可以参考下:java客户端:
JAXRSMultipartTest.java
XopType.java
php客户端 :phpmtom@游荡者
March 29, 2011 at 8:55 am
能讲清楚一些吗?因为在cxf中支持模块很多,我做了配置但是还是报404
April 4, 2011 at 7:22 am
Developing Web Services with Apache CXF and Axis2这本书第6章有详细介绍,你可以下载下来参考下。