Author Topic: Publicando servicio SOAP  (Read 70 times)

edinson

  • Newbie
  • *
  • Posts: 3
  • Karma: 0
    • View Profile
Publicando servicio SOAP
« on: Junio 14, 2020, 07:14:28 pm »
Buenas,
Tengo un proyecto Maven en el cual he implementado un servicio, pero tengo problemas al momento de publicarlo localmente.

Mi WebMethod tienen la siguiente definición:
Code: [Select]
package soap.aldaz.interfaces;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;

import soap.aldaz.entity.ProductoBean;

@WebService(name = "Producto")
public interface Producto {

@WebMethod
public void save(@WebParam(name = "producto") ProductoBean bean);

@WebMethod
public List<ProductoBean> filtrarXPrecio(@WebParam(name = "minimo") double minimo, @WebParam(name = "maximo") double maximo);
}

La implementación de dichos WebMethod tienen la siguiente forma:
Code: [Select]
package soap.aldaz.ws;

import java.util.List;

import javax.jws.WebService;

import org.springframework.beans.factory.annotation.Autowired;

import soap.aldaz.entity.ProductoBean;
import soap.aldaz.interfaces.Producto;
import soap.aldaz.services.ProductoService;

@WebService(name = "ProductoService", endpointInterface = "soap.aldaz.interfaces.Producto")
public class ProductoImpl implements Producto {

@Autowired
private ProductoService service;

@Override
public void save(ProductoBean bean) {
service.save(bean);
}

@Override
public List<ProductoBean> filtrarXPrecio(double minimo, double maximo) {
return service.filtrarXPrecio(minimo, maximo);
}
}
ProductoService es una interface cuya implementación realiza la conexión a la BD y la realiza las operaciones correspondientes, es decir, son DAO's en realidad. Estoy tratando de inyectar dicho objeto (lo he hecho de manera similar cuando utilizo @AutoWired en una clase @Controller y se inyecta correctamente, pero es la primera vez que trato de inyectar en un @WebService

Ahora, pretendo registrar el servicio:
Code: [Select]
package soap.aldaz.ws;

import javax.xml.ws.Endpoint;

import org.springframework.beans.factory.annotation.Autowired;

import soap.aldaz.interfaces.Producto;

public class ProductoRegistro {

@Autowired
private static Producto svc;

public static void main(String[] args) {

String url = "http://localhost:8065/ealdaz/producto?wsdl";

Endpoint ep = Endpoint.publish(url, svc);

System.out.print(ep.isPublished());
}
}
Cuando ejecuto esto último como Java Application, me arroja un NullPointerException debido a que el objeto svc no se está inyectado.
Por favor una mano, llevo horas dándole vueltas. Soy nuevo en Java generalmente me muevo en .Net.
Saludos y gracias.
« Last Edit: Junio 14, 2020, 07:21:22 pm by edinson »

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Publicando servicio SOAP
« Reply #1 on: Junio 14, 2020, 08:31:16 pm »
Hola,

Tienes la anotacion WebService (name="...") tanto en la interfaz como en la implementación, pero con nombre distinto.
Prueba a quitar el nombre (y casi te diría que la anotacion) de la implementación, ya que de alguna forma la "hereda" de la interfaz.

Saludos.

edinson

  • Newbie
  • *
  • Posts: 3
  • Karma: 0
    • View Profile
Re: Publicando servicio SOAP
« Reply #2 on: Junio 14, 2020, 08:54:58 pm »
Hola Chuidiang,
Probé colocando el mismo name en la anotación WebService tanto en la interfaces como en la implementación pero el problema persiste. También probé retirando el name en ambos lados y también probé quitando la anotación de la implementación pero nada.
Qué más podría ser, algo estoy haciendo mal.
« Last Edit: Junio 14, 2020, 09:20:13 pm by edinson »

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Publicando servicio SOAP
« Reply #3 on: Junio 15, 2020, 04:59:55 am »
Hola

Ademas de la anotacion WebService, añade la anotacion @Component o @Service de spring. Esto hace que spring sea consciente de ese bean y lo meta en @Autowired.

Saludos.

edinson

  • Newbie
  • *
  • Posts: 3
  • Karma: 0
    • View Profile
Re: Publicando servicio SOAP
« Reply #4 on: Junio 22, 2020, 09:45:35 pm »
Hola chuidiang,
Estuve revisando un tutorial y veo que para utilizar @Autowired se debe contar con un archivo applicationContext.xml donde se configura el paquete donde Spring deberá escanear para buscar las dependencias, algo como esto:
Code: [Select]
<context:component-scan base-package="soap.aldaz.ws"></context:component-scan>Sin embargo, en el tutorial lo hacen utilizando un proyecto Java clásico y han colocado este archivo dentro de la carpeta de src. Yo estoy utilizando un proyecto Maven y no sé donde colocar este archivo. Por hacer una prueba lo he colocado dentro del src pero no me inyecta las dependencias, luego lo he colocado dentro de la carpeta src/main/webapp/WEB-INF y nada.

chuidiang

  • Administrator
  • Hero Member
  • *****
  • Posts: 5466
  • Karma: 12
    • View Profile
    • Apuntes de programación
Re: Publicando servicio SOAP
« Reply #5 on: Junio 23, 2020, 06:42:59 pm »
¿Estas usando algún servidor de aplicaciones estilo JBoss, Wildfly, glassfish?
Saludos.

 

ey