How to create Metro Soap Client Service in Spring

804 views Asked by At

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.

0

There are 0 answers