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

使用Axis2 1.7.4从java客户端发送文件,java,web-services,soap,axis2,axis,Java,Web Services,Soap,Axis2,Axis,我想使用Axis2 1.7.4将文件发送到此端点 部分代码如下所示: OMFactory factory = OMAbstractFactory.getOMFactory(); OMNamespace ns = factory.createOMNamespace("http://ec.gob.sri.ws.recepcion", "RecepcionComprobantesService"); OMElement validarComprobante = factory.createOME

我想使用Axis2 1.7.4将文件发送到此端点

部分代码如下所示:

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编码字符串的形式发送,因此我认为这就是问题所在。文件的内容被序列化,我不知道是否有可能解决这个问题。

根据WSDL描述,soap请求主体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>

VGhpcyBpcyB0ZXN0IGRvY3VtZW50

Axis编码为base64,web服务仅作为文件接收。拦截请求soap消息可能有助于解决问题。我将xml文件作为base64编码字符串发布到服务,并得到错误响应“在密钥标记中未找到任何信息”。如果我将纯文本文件作为base64编码字符串发送,则会出现错误“无法转换为xml文件”。因此,根据错误分析,第一个案例文件验证通过。我怀疑你的请求可能不符合base64的要求。