从java客户端使用Axis2 1.7.4发送文件

时间:2017-03-18 00:02:29

标签: java web-services soap axis2 axis

我想使用Axis2 1.7.4将文件发送到此端点https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantes?wsdl

此代码的一部分如下所示:

OMFactory factory = OMAbstractFactory.getOMFactory();
OMNamespace ns = factory.createOMNamespace("http://ec.gob.sri.ws.recepcion", "RecepcionComprobantesService");
   OMElement validarComprobante = factory.createOMElement("validarComprobante", ns);        
    ConfigurableDataHandler dataHandler = new ConfigurableDataHandler(new FileDataSource("file.xml"));
    dataHandler.setTransferEncoding("UTF-8");
    dataHandler.setContentType("txt/xml");
    OMText textData = factory.createOMText(dataHandler, false);       
    validarComprobante.addChild(textData);
    ...
       ServiceClient client = new ServiceClient();
    ...
        OMElement response = client.sendReceive(validarComprobante);

我收到了来自服务器的回复,但该文件未被接受,因为我收到此消息"提交的文件未达到规定的规格:扩展,编码"

我阅读了文档,文件以Base64编码的字符串形式发送,所以我认为这是文件内容序列化的问题,我不知道是否可以解决这个问题。

1 个答案:

答案 0 :(得分:0)

根据WSDL描述soap请求body xml标记期望base64编码的字符串。因此,您必须读取文件内容,转换为base64编码的字符串并尝试将该字符串值传递给xml标记。

您的SOAP请求应与此类似

    <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ec="http://ec.gob.sri.ws.recepcion">
       <soapenv:Header/>
       <soapenv:Body>
          <ec:validarComprobante>
             <!--Optional:-->
             <xml>VGhpcyBpcyB0ZXN0IGRvY3VtZW50</xml>
          </ec:validarComprobante>
       </soapenv:Body>
    </soapenv:Envelope>