I'm developing a quite simple web using Spring MVC + Thymeleaf + Spring Boot and so on.
I'll make some requests to a soap web service which is already deployed. I've created all the stuff using jaxws-maven-plugin:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxws-maven-plugin</artifactId>
<version>2.4.1</version>
<configuration>
<wsdlFiles>
<wsdlFile>padron/padronExterno.wsdl</wsdlFile>
</wsdlFiles>
<keep>true</keep>
<sourceDestDir>${project.basedir}/src/main/java/</sourceDestDir>
<verbose>true</verbose>
<xdisableSSLHostnameVerification>true</xdisableSSLHostnameVerification>
<vmArgs>
<vmArg>-Djavax.xml.accessExternalSchema=all</vmArg>
</vmArgs>
<args>
<arg>-p com.ingartek.ws.ppsfnp.dashboard_test.dto.padron</arg>
</args>
</configuration>
<executions>
<execution>
<goals>
<goal>wsimport</goal>
</goals>
</execution>
</executions>
When running mvn generate-sources, I get the following classes generated in the "com.ingartek.ws.ppsfnp.dashboard_test.dto.padron" package:
ExternalWSImplService
import java.net.MalformedURLException;
import java.net.URL;
import java.security.KeyManagementException;
import java.security.NoSuchAlgorithmException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import javax.xml.namespace.QName;
import javax.xml.ws.Service;
import javax.xml.ws.WebEndpoint;
import javax.xml.ws.WebServiceClient;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.WebServiceFeature;
@WebServiceClient(name = "ExternalWSImplService", targetNamespace = "http://service.ws.padron.ingartek.com/", wsdlLocation = "URL of WSDL")
public class ExternalWSImplService extends Service {
private final static URL EXTERNALWSIMPLSERVICE_WSDL_LOCATION;
private final static WebServiceException EXTERNALWSIMPLSERVICE_EXCEPTION;
private final static QName EXTERNALWSIMPLSERVICE_QNAME = new QName("http://service.ws.padron.ingartek.com/", "ExternalWSImplService");
TrustManager[] trustAllCerts = new TrustManager[] {
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(X509Certificate[] certs, String authType) { }
public void checkServerTrusted(X509Certificate[] certs, String authType) { }
}
};
static {
URL url = null;
WebServiceException e = null;
try {
url = new URL(/*https URL*/);
} catch (MalformedURLException ex) {
e = new WebServiceException(ex);
}
EXTERNALWSIMPLSERVICE_WSDL_LOCATION = url;
EXTERNALWSIMPLSERVICE_EXCEPTION = e;
}
public ExternalWSImplService() {
super(__getWsdlLocation(), EXTERNALWSIMPLSERVICE_QNAME);
}
public ExternalWSImplService(WebServiceFeature... features) {
super(__getWsdlLocation(), EXTERNALWSIMPLSERVICE_QNAME, features);
}
public ExternalWSImplService(URL wsdlLocation) {
super(wsdlLocation, EXTERNALWSIMPLSERVICE_QNAME);
}
public ExternalWSImplService(URL wsdlLocation, WebServiceFeature... features) {
super(wsdlLocation, EXTERNALWSIMPLSERVICE_QNAME, features);
}
public ExternalWSImplService(URL wsdlLocation, QName serviceName) {
super(wsdlLocation, serviceName);
}
public ExternalWSImplService(URL wsdlLocation, QName serviceName, WebServiceFeature... features) {
super(wsdlLocation, serviceName, features);
}
@WebEndpoint(name = "ExternalWSImplPort")
public ExternalWS getExternalWSImplPort() {
SSLContext sc;
try {
sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
// Create all-trusting host name verifier
HostnameVerifier allHostsValid = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
};
// Install the all-trusting host verifier
HttpsURLConnection.setDefaultHostnameVerifier(allHostsValid);
} catch (NoSuchAlgorithmException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (KeyManagementException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
return super.getPort(new QName("http://service.ws.padron.ingartek.com/", "ExternalWSImplPort"), ExternalWS.class);
}
@WebEndpoint(name = "ExternalWSImplPort")
public ExternalWS getExternalWSImplPort(WebServiceFeature... features) {
return super.getPort(new QName("http://service.ws.padron.ingartek.com/", "ExternalWSImplPort"), ExternalWS.class, features);
}
private static URL __getWsdlLocation() {
if (EXTERNALWSIMPLSERVICE_EXCEPTION!= null) {
throw EXTERNALWSIMPLSERVICE_EXCEPTION;
}
return EXTERNALWSIMPLSERVICE_WSDL_LOCATION;
}
}
ExternalWS
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.ResponseWrapper;
@WebService(name = "ExternalWS", targetNamespace = "http://service.ws.padron.ingartek.com/")
@XmlSeeAlso({
ObjectFactory.class
})
public interface ExternalWS {
@WebMethod(action = "urn:ComprobarSolicitud")
@WebResult(targetNamespace = "")
@RequestWrapper(localName = "comprobarSolicitud", targetNamespace = "http://service.ws.padron.ingartek.com/", className = "com.ingartek.ws.ppsfnp.dashboard_test.dto.padron.ComprobarSolicitud")
@ResponseWrapper(localName = "comprobarSolicitudResponse", targetNamespace = "http://service.ws.padron.ingartek.com/", className = "com.ingartek.ws.ppsfnp.dashboard_test.dto.padron.ComprobarSolicitudResponse")
@Action(input = "urn:ComprobarSolicitud", output = "http://service.ws.padron.ingartek.com/ExternalWS/comprobarSolicitudResponse")
public Respuesta comprobarSolicitud(
@WebParam(name = "username", targetNamespace = "")
String username,
@WebParam(name = "passwd", targetNamespace = "")
String passwd,
@WebParam(name = "nif", targetNamespace = "")
String nif,
@WebParam(name = "fechaDesde", targetNamespace = "")
String fechaDesde,
@WebParam(name = "fechaHasta", targetNamespace = "")
String fechaHasta,
@WebParam(name = "cantidad", targetNamespace = "")
int cantidad);
@WebMethod(action = "urn:HacerSolicitud")
@WebResult(targetNamespace = "")
@RequestWrapper(localName = "hacerSolicitud", targetNamespace = "http://service.ws.padron.ingartek.com/", className = "com.ingartek.ws.ppsfnp.dashboard_test.dto.padron.HacerSolicitud")
@ResponseWrapper(localName = "hacerSolicitudResponse", targetNamespace = "http://service.ws.padron.ingartek.com/", className = "com.ingartek.ws.ppsfnp.dashboard_test.dto.padron.HacerSolicitudResponse")
@Action(input = "urn:HacerSolicitud", output = "http://service.ws.padron.ingartek.com/ExternalWS/hacerSolicitudResponse")
public RespuestaCodigo hacerSolicitud(
@WebParam(name = "username", targetNamespace = "")
String username,
@WebParam(name = "passwd", targetNamespace = "")
String passwd,
@WebParam(name = "solicitante", targetNamespace = "")
int solicitante,
@WebParam(name = "nif", targetNamespace = "")
String nif,
@WebParam(name = "nombre", targetNamespace = "")
String nombre,
@WebParam(name = "apellido1", targetNamespace = "")
String apellido1,
@WebParam(name = "apellido2", targetNamespace = "")
String apellido2);
}
ComprobarSolicitudResponse
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "comprobarSolicitudResponse", propOrder = {
"_return"
})
public class ComprobarSolicitudResponse {
@XmlElement(name = "return")
protected Respuesta _return;
public Respuesta getReturn() {
return _return;
}
public void setReturn(Respuesta value) {
this._return = value;
}
}
ComprobarSolicitud
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "comprobarSolicitud", propOrder = {
"username",
"passwd",
"nif",
"fechaDesde",
"fechaHasta",
"cantidad"
})
public class ComprobarSolicitud {
protected String username;
protected String passwd;
protected String nif;
protected String fechaDesde;
protected String fechaHasta;
protected int cantidad;
public String getUsername() {
return username;
}
public void setUsername(String value) {
this.username = value;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String value) {
this.passwd = value;
}
public String getNif() {
return nif;
}
public void setNif(String value) {
this.nif = value;
}
public String getFechaDesde() {
return fechaDesde;
}
public void setFechaDesde(String value) {
this.fechaDesde = value;
}
public String getFechaHasta() {
return fechaHasta;
}
public void setFechaHasta(String value) {
this.fechaHasta = value;
}
public int getCantidad() {
return cantidad;
}
public void setCantidad(int value) {
this.cantidad = value;
}
}
TipoSolicitante
import javax.xml.bind.annotation.XmlEnum;
import javax.xml.bind.annotation.XmlType;
@XmlType(name = "tipoSolicitante")
@XmlEnum
public enum TipoSolicitante {
SOLICITUD_1,
SOLICITUD_2;
public String value() {
return name();
}
public static TipoSolicitante fromValue(String v) {
return valueOf(v);
}
}
SolicitudPadronFormateada
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "solicitudPadronFormateada", propOrder = {
"apellido1",
"apellido2",
"fechaEnviadoIZFE",
"fechaEsperadaRecepcionIzfe",
"fechaRecibidoIZFE",
"fechaSolicitud",
"ficheroConsulta",
"ficheroProcesado",
"nif",
"nombre",
"numeroReintentos",
"respuesta",
"solicitante"
})
public class SolicitudPadronFormateada {
protected String apellido1;
protected String apellido2;
protected String fechaEnviadoIZFE;
protected String fechaEsperadaRecepcionIzfe;
protected String fechaRecibidoIZFE;
protected String fechaSolicitud;
protected String ficheroConsulta;
protected String ficheroProcesado;
protected String nif;
protected String nombre;
protected Integer numeroReintentos;
protected String respuesta;
protected String solicitante;
public String getApellido1() {
return apellido1;
}
public void setApellido1(String value) {
this.apellido1 = value;
}
public String getApellido2() {
return apellido2;
}
public void setApellido2(String value) {
this.apellido2 = value;
}
public String getFechaEnviadoIZFE() {
return fechaEnviadoIZFE;
}
public void setFechaEnviadoIZFE(String value) {
this.fechaEnviadoIZFE = value;
}
public String getFechaEsperadaRecepcionIzfe() {
return fechaEsperadaRecepcionIzfe;
}
public void setFechaEsperadaRecepcionIzfe(String value) {
this.fechaEsperadaRecepcionIzfe = value;
}
public String getFechaRecibidoIZFE() {
return fechaRecibidoIZFE;
}
public void setFechaRecibidoIZFE(String value) {
this.fechaRecibidoIZFE = value;
}
public String getFechaSolicitud() {
return fechaSolicitud;
}
public void setFechaSolicitud(String value) {
this.fechaSolicitud = value;
}
public String getFicheroConsulta() {
return ficheroConsulta;
}
public void setFicheroConsulta(String value) {
this.ficheroConsulta = value;
}
public String getFicheroProcesado() {
return ficheroProcesado;
}
public void setFicheroProcesado(String value) {
this.ficheroProcesado = value;
}
public String getNif() {
return nif;
}
public void setNif(String value) {
this.nif = value;
}
public String getNombre() {
return nombre;
}
public void setNombre(String value) {
this.nombre = value;
}
public Integer getNumeroReintentos() {
return numeroReintentos;
}
public void setNumeroReintentos(Integer value) {
this.numeroReintentos = value;
}
public String getRespuesta() {
return respuesta;
}
public void setRespuesta(String value) {
this.respuesta = value;
}
public String getSolicitante() {
return solicitante;
}
public void setSolicitante(String value) {
this.solicitante = value;
}
}
RespuestaCodigo
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "respuestaCodigo", propOrder = {
"id",
"mensaje"
})
public class RespuestaCodigo {
protected String id;
protected String mensaje;
public String getId() {
return id;
}
public void setId(String value) {
this.id = value;
}
public String getMensaje() {
return mensaje;
}
public void setMensaje(String value) {
this.mensaje = value;
}
}
Respuesta
import java.util.ArrayList;
import java.util.List;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "respuesta", propOrder = {
"respuestaCodigo",
"solicitudesPadron"
})
public class Respuesta {
protected RespuestaCodigo respuestaCodigo;
@XmlElement(nillable = true)
protected List<SolicitudPadronFormateada> solicitudesPadron;
public RespuestaCodigo getRespuestaCodigo() {
return respuestaCodigo;
}
public void setRespuestaCodigo(RespuestaCodigo value) {
this.respuestaCodigo = value;
}
public List<SolicitudPadronFormateada> getSolicitudesPadron() {
if (solicitudesPadron == null) {
solicitudesPadron = new ArrayList<SolicitudPadronFormateada>();
}
return this.solicitudesPadron;
}
}
ObjectFactory
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlElementDecl;
import javax.xml.bind.annotation.XmlRegistry;
import javax.xml.namespace.QName;
@XmlRegistry
public class ObjectFactory {
private final static QName _HacerSolicitudResponse_QNAME = new QName("http://service.ws.padron.ingartek.com/", "hacerSolicitudResponse");
private final static QName _ComprobarSolicitud_QNAME = new QName("http://service.ws.padron.ingartek.com/", "comprobarSolicitud");
private final static QName _HacerSolicitud_QNAME = new QName("http://service.ws.padron.ingartek.com/", "hacerSolicitud");
private final static QName _ComprobarSolicitudResponse_QNAME = new QName("http://service.ws.padron.ingartek.com/", "comprobarSolicitudResponse");
public ObjectFactory() {
}
public HacerSolicitudResponse createHacerSolicitudResponse() {
return new HacerSolicitudResponse();
}
public ComprobarSolicitudResponse createComprobarSolicitudResponse() {
return new ComprobarSolicitudResponse();
}
public HacerSolicitud createHacerSolicitud() {
return new HacerSolicitud();
}
public ComprobarSolicitud createComprobarSolicitud() {
return new ComprobarSolicitud();
}
public RespuestaCodigo createRespuestaCodigo() {
return new RespuestaCodigo();
}
public Respuesta createRespuesta() {
return new Respuesta();
}
public SolicitudPadronFormateada createSolicitudPadronFormateada() {
return new SolicitudPadronFormateada();
}
@XmlElementDecl(namespace = "http://service.ws.padron.ingartek.com/", name = "hacerSolicitudResponse")
public JAXBElement<HacerSolicitudResponse> createHacerSolicitudResponse(HacerSolicitudResponse value) {
return new JAXBElement<HacerSolicitudResponse>(_HacerSolicitudResponse_QNAME, HacerSolicitudResponse.class, null, value);
}
@XmlElementDecl(namespace = "http://service.ws.padron.ingartek.com/", name = "comprobarSolicitud")
public JAXBElement<ComprobarSolicitud> createComprobarSolicitud(ComprobarSolicitud value) {
return new JAXBElement<ComprobarSolicitud>(_ComprobarSolicitud_QNAME, ComprobarSolicitud.class, null, value);
}
@XmlElementDecl(namespace = "http://service.ws.padron.ingartek.com/", name = "hacerSolicitud")
public JAXBElement<HacerSolicitud> createHacerSolicitud(HacerSolicitud value) {
return new JAXBElement<HacerSolicitud>(_HacerSolicitud_QNAME, HacerSolicitud.class, null, value);
}
@XmlElementDecl(namespace = "http://service.ws.padron.ingartek.com/", name = "comprobarSolicitudResponse")
public JAXBElement<ComprobarSolicitudResponse> createComprobarSolicitudResponse(ComprobarSolicitudResponse value) {
return new JAXBElement<ComprobarSolicitudResponse>(_ComprobarSolicitudResponse_QNAME, ComprobarSolicitudResponse.class, null, value);
}
}
HacerSolicitudResponse
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlType;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "hacerSolicitudResponse", propOrder = {
"_return"
})
public class HacerSolicitudResponse {
@XmlElement(name = "return")
protected RespuestaCodigo _return;
public RespuestaCodigo getReturn() {
return _return;
}
public void setReturn(RespuestaCodigo value) {
this._return = value;
}
}
HacerSolicitud
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "hacerSolicitud", propOrder = {
"username",
"passwd",
"solicitante",
"nif",
"nombre",
"apellido1",
"apellido2"
})
public class HacerSolicitud {
protected String username;
protected String passwd;
protected int solicitante;
protected String nif;
protected String nombre;
protected String apellido1;
protected String apellido2;
public String getUsername() {
return username;
}
public void setUsername(String value) {
this.username = value;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String value) {
this.passwd = value;
}
public int getSolicitante() {
return solicitante;
}
public void setSolicitante(int value) {
this.solicitante = value;
}
public String getNif() {
return nif;
}
public void setNif(String value) {
this.nif = value;
}
public String getNombre() {
return nombre;
}
public void setNombre(String value) {
this.nombre = value;
}
public String getApellido1() {
return apellido1;
}
public void setApellido1(String value) {
this.apellido1 = value;
}
public String getApellido2() {
return apellido2;
}
public void setApellido2(String value) {
this.apellido2 = value;
}
}
So, what I want to create is a service class, which acts as a WS client, making requests to hacerSolicitud() and comprobarSolicitud(), so that the Service can be attached through DI. What is the best approach to do so?
Thank you so much.