Ciao a tutti.
Sono più di due settimane che cerco di far funzionare il sistema e non sono riuscito ancora a fare niente. Siamo partiti da un progetto vuoto Spring Boot.
Ho generato le due chiavi (2 key e i corrispettivi csr) dal server dove andremo ad installare il sistema, le ho “conciliate” con i due certificati “cer” (client e server) scaricati dal primo step e poi, tramite keytool, le ho aggiunte al keystore.jks.
I certificati caentrate.der, CAEntrateTest.cer e testservizi.fatturapa.it.cer sono stati aggiunti nel truststore.jks.
Genero la request xml e tramite Postman contatto il mio webservice.
Poi contatto il WS di test ma l’unica risposta che ricevo è un Internal Error e non so dove sbaglio.
org.springframework.ws.soap.client.SoapFaultClientException: Internal Error
at org.springframework.ws.soap.client.core.SoapFaultMessageResolver.resolveFault(SoapFaultMessageResolver.java:38)
at org.springframework.ws.client.core.WebServiceTemplate.handleFault(WebServiceTemplate.java:830)
at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:624)
at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:555)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:390)
at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:383)
at com.csteam.fatturapa.endpoint.TrasmissioneEndpoint.riceviFile(TrasmissioneEndpoint.java:79)
Sto cercando di tirare su il sistema di invio con Spring Boot anche io, ma sono bloccato sull’errore 403… ho provato anche a creare il keystore.jks e il truststore.jks come hai scritto te ma ancora niente!!
Probabilmente non ho ben capito come creare keystore/truststore con i vari certificati che mi hanno rilasciato.
posto anche il codice della configurazione spring boot e della chiamata a ricevi file.
Configurazione:
@Bean
Jaxb2Marshaller jaxb2Marshaller() {
Jaxb2Marshaller jaxb2Marshaller = new Jaxb2Marshaller();
jaxb2Marshaller.setContextPath("it.sogei.service.sdi.ricevifile");
return jaxb2Marshaller;
}
@Bean
public WebServiceTemplate webServiceTemplate() throws Exception {
WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setMarshaller(jaxb2Marshaller());
webServiceTemplate.setUnmarshaller(jaxb2Marshaller());
webServiceTemplate.setDefaultUri(defaultUri);
webServiceTemplate.setMessageSender(httpComponentsMessageSender());
return webServiceTemplate;
}
@Bean
public HttpComponentsMessageSender httpComponentsMessageSender() throws Exception {
HttpComponentsMessageSender httpComponentsMessageSender = new HttpComponentsMessageSender();
httpComponentsMessageSender.setHttpClient(httpClient());
return httpComponentsMessageSender;
}
@Bean
public HttpClient httpClient() throws Exception {
return HttpClientBuilder.create().setSSLSocketFactory(sslConnectionSocketFactory())
.addInterceptorFirst(new RemoveSoapHeadersInterceptor()).build();
}
@Bean
public SSLConnectionSocketFactory sslConnectionSocketFactory() throws Exception {
return new SSLConnectionSocketFactory(sslContext(), NoopHostnameVerifier.INSTANCE);
}
@Bean
public SSLContext sslContext() throws Exception {
return SSLContextBuilder.create()
.loadKeyMaterial(keyStore.getFile(), trustStorePassword.toCharArray(), trustStorePassword.toCharArray())
.loadTrustMaterial(trustStore.getFile(), trustStorePassword.toCharArray()).build();
}
Ciao Claudio,
allora innanzitutto assicurati di aver caricato i certificati giusti nel truststore e keystore. Ci ho perso dei giorni! Dei certificati “server” te ne puoi fregare, nel keystore basta mettere solo quello client.
Nel bean di JAXB2 io ho inserito questi context: marshaller.setContextPaths("it.gov.fatturapa.sdi.ws.ricezione.v1_0.types", "it.gov.fatturapa.sdi.ws.trasmissione.v1_0.types", "it.gov.agenziaentrate.ivaservizi.docs.wsdl.trasmissionefile.v2", "it.gov.agenziaentrate.ivaservizi.docs.xsd.fatture.v1");
Il metodo di ricezione l’ho inserito in una classe con l’annotation @Endpoint e l’ho impostato in questo modo: @SoapAction("http://www.fatturapa.it/RicezioneFatture/RiceviFattureSdI") @ResponsePayload public JAXBElement<RispostaRiceviFattureType> riceviFattureSdI( @RequestPayload JAXBElement<FileSdIConMetadatiType> request) {
Il resto della configurazione mi sembra uguale alla mia.
Spero che questo possa esserti d’aiuto.
Per la ricevuta delle notifiche (sia di scarto che di consegna e tutte le altre) il metodo è molto semplice in quanto il parametro in ricezione è lo stesso:
Dove NAMESPACE_TRASMISSIONE = http://www.fatturapa.gov.it/sdi/ws/trasmissione/v1.0/types
e RICEVUTA_CONSEGNA = "RicevutaConsegna"
Nella notifica di mancata consegna (e nelle altre) cambia solo il SoapAction @SoapAction(value = "http://www.fatturapa.it/TrasmissioneFatture/NotificaMancataConsegna")
Salve,
ho iniziato da poco a lavorare su un progetto per l’integrazione, sto usando anche io Java e SpringBoot, ma su ambiente unix. Sto avendo problemi, credo con i certificati, ho seguito le istruzioni che avete dato, ma continuo a ricevere errore 403.
Nello specifico ho messo nel keystore il certificato client inviatomi da SDI e convertito in .pem mentre nel trusttore tutti quelli presenti nel kit di test. Entrambi sono importati alla creazione dell’SslContext nella classe di configurazione del webserviceTemplate.
Guardando i log riesco effettivamente a creare il messaggio soap ma ottengo sempre errore 403.