简体   繁体   English

使用Apache CXF通过Web服务下载文件

[英]Downloading file via Web Service using Apache CXF

I try to develop Web Service which send file from server to client. 我尝试开发从服务器向客户端发送文件的Web服务。 I use Apache CXF for developing Web Serivce. 我使用Apache CXF来开发Web Serivce。 Application is Spring based. 应用程序是基于Spring的。 First I tried to write simple test code: 首先,我尝试编写简单的测试代码:

applicationContext.xml applicationContext.xml中

<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>

<bean class="com.llth.paymentgateway.webservice.PaymentGatewayReportingWebServiceImpl" id="paymentGatewayReportingWebService"/>

<jaxws:endpoint id="reportingWebService" implementor="#paymentGatewayReportingWebService" address="/ReportingWebService">
    <jaxws:properties>
        <entry key="mtom-enabled" value="true"/>
    </jaxws:properties>
</jaxws:endpoint>

PaymentGatewayReportingWebService.java Web Service inteface PaymentGatewayReportingWebService.java Web服务接口

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface PaymentGatewayReportingWebService {

    @WebMethod(operationName = "downloadFile")
    public DataHandler downloadFile(String fileName);

}

PaymentGatewayReportingWebServiceImpl.java implementation of PaymentGatewayReportingWebService inteface PaymentGatewayReportingWebService接口的PaymentGatewayReportingWebServiceImpl.java实现

@WebService(endpointInterface = "com.llth.paymentgateway.webservice.PaymentGatewayReportingWebService")
public class PaymentGatewayReportingWebServiceImpl implements PaymentGatewayReportingWebService {

    @Override
    @XmlMimeType("application/octet-stream")
    public DataHandler downloadFile(String fileName) {
        FileDataSource dataSource = new FileDataSource(fileName);

        return new DataHandler(dataSource);
    }
}

When I import and execute Web Service method by soapUI I recevie the following response (copied from RAW tab) 当我通过soapUI导入并执行Web Service方法时,我收到以下响应(从RAW选项卡复制)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: multipart/related; type="application/xop+xml"; boundary="uuid:9f003136-a7e0-4634-8032-51c1ba701776"; start="<root.message@cxf.apache.org>"; start-info="text/xml";charset=UTF-8
Transfer-Encoding: chunked
Date: Tue, 12 Mar 2013 12:35:06 GMT


--uuid:9f003136-a7e0-4634-8032-51c1ba701776
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml";
Content-Transfer-Encoding: binary
Content-ID: <root.message@cxf.apache.org>

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns1:downloadFileResponse xmlns:ns1="http://webservice.paymentgateway.llth.com/"><return><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:c0836641-6f5f-46ac-9e01-d89eaceafe49-1@cxf.apache.org"/></return></ns1:downloadFileResponse></soap:Body></soap:Envelope>
--uuid:9f003136-a7e0-4634-8032-51c1ba701776
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <c0836641-6f5f-46ac-9e01-d89eaceafe49-1@cxf.apache.org>

яШяб'«Exif
and some binary data here

soapUI doesn't download anything. soapUI不会下载任何内容。 I don't know if everything is right or not. 我不知道一切是否正确。 Should soapUI begin download the file? soapUI应该开始下载文件吗? If soapUI should download the file then something is wrong. 如果soapUI应该下载文件,那么出问题了。 If yes, what is wrong? 如果是,怎么了?

In fact soapUI is giving you the right answer. 实际上soapUI给您正确​​的答案。 That "some binary data here" is the file you asked for “这里有些二进制数据”是您要求的文件

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM