Client SOAP FATCA Tax Agency java

0

Good I am trying to consume the SOAP of the tax agency of FATCA (290). I can not receive a valid response receiving an SOAPFaultException exception. My code with which I consume the SOAP is:

Receipt response = null;
KeyStore keyStore = KeyStore.getInstance("JKS");
keyStore.load(null, null);
KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
kmf.init(keyStore, null);
TLSClientParameters tlsParams = new TLSClientParameters();

tlsParams.setSecureSocketProtocol("TLS");
tlsParams.setKeyManagers(kmf.getKeyManagers());
DeclarationService service = new DeclarationService(Fatca.class.getResource("xsd/FatcaNtnlDeclaration_v2.0.wsdl"));
Declaration soap = service.getDeclare();

((HTTPConduit) ClientProxy.getClient(soap).getConduit()).setTlsClientParameters(tlsParams);
SOAPFault fault = null;
try {
    response = soap.declare(data);
} catch (SOAPFaultException ex) {
    ex.getStackTrace();
    LOGGER.info(ex.getMessage());
    fault = ex.getFault();
}
return response;

Any help would be appreciated.

    
asked by Observer 26.10.2017 в 16:30
source

1 answer

0

You have to use CURL for communications instead of SOAP, I'll give you an example.

 $var_header = [ 'Content-Type: application/xml;charset=UTF-8' ];

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_USERAGENT, "Soap Client");
        curl_setopt($ch, CURLOPT_VERBOSE, 1);
        curl_setopt($ch, CURLOPT_URL, $URL);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, 1);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLINFO_HEADER_OUT, 1);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $var_header);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);  // aqui le pones la consulta XML
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);

        //SSL
        //curl_setopt($ch, CURLOPT_SSLVERSION, 3); //=3
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);

        curl_setopt($ch, CURLOPT_SSLCERT, $ruta_pem_publica);
        curl_setopt($ch, CURLOPT_SSLKEY, $ruta_pem_privada);
        curl_setopt($ch, CURLOPT_SSLKEYTYPE, 'PEM');

        curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $contrasenia_pem);

        curl_setopt($ch, CURLOPT_COOKIE, 'sessionid=' . date("Ymd"));

        //Parse cURL response
        $response     = curl_exec($ch);
        $curl_errorno = curl_errno($ch);

        if ($curl_errorno == CURLE_OK)   // si ha ido todo bien
        {
            $curl_statuscode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            $header_size     = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
            $info            = curl_getinfo($ch);

            $header = substr($response, 0, $info['header_size']);
            $body   = substr($response, -$info['download_content_length']);

            //print_r($header);  // esta variable contiene la cabecera de respuesta
            //print_r($body); // esta variable contiene el cuerpo de la respuesta. ( en XML)

            $resultado = [
                'finalizada' => true,
                'error'      => null,
                'cabecera'   => $header,
                'cuerpo'     => $body
            ];

        } else  // si la conexion ha dado problemas
        {

            $curl_errormsg = curl_error($ch);
            //echo $curl_errormsg;

            $resultado = [
                'finalizada' => false,
                'error'      => $curl_errormsg,
                'cabecera'   => null,
                'cuerpo'     => null
            ];
        }

        //Close connection
        curl_close($ch);

        //dd($URL, $resultado, $xml);

        return $resultado;

ANCIENT ANSWER

Yo por junio ya desarrolle esto en PHP y acabe por no usar SOAP para la comunicación por los fallos que daba (hay un maldito proxy en la AEAT que fastidia la mitad de las comunicaciones de SOAP por el dominio que pone). Finalmente y a día de hoy ando usando CURL.
    
answered by 26.10.2017 в 18:47