我想使用 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 编码字符串发送,所以我认为这是文件内容序列化的问题,我不知道是否可以解决这个问题。
根据 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>