Добрый день. Я пытаюсь запустить службу SOAP с Spring Boot и получаю следующую ошибку:
*************** ************ Приложение не удалось запустить
Описание:
Параметру 0 конструктора в com.example.conexion.service.ClienteServiceImpl требуется компонент типа 'com.example.conexion.repository.ClienteRepository', который не найден.
Действие:
Рассмотрим определение компонента типа 'com.example.conexion.repository.ClienteRepository' в вашей конфигурации.
Я знаю, что, возможно, это глупая ошибка, но я ее не вижу
Приложение к моему коду:
SpringBootSoapApp. java
package com.example.conexion;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;
@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class })
public class SpringBootSoapApp {
public static void main(String[] args) {
SpringApplication.run(SpringBootSoapApp.class, args);
}
}
WebServiceConfig. java
package com.example.conexion.config;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.ClassPathResource;
import org.springframework.ws.config.annotation.EnableWs;
import org.springframework.ws.config.annotation.WsConfigurerAdapter;
import org.springframework.ws.transport.http.MessageDispatcherServlet;
import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;
import org.springframework.xml.xsd.SimpleXsdSchema;
import org.springframework.xml.xsd.XsdSchema;
import com.example.conexion.endpoint.ClienteEndpoint;
@EnableWs
@Configuration
public class WebServiceConfig extends WsConfigurerAdapter {
@SuppressWarnings({ "rawtypes", "unchecked" })
@Bean
public ServletRegistrationBean messageDispatcherServlet(ApplicationContext appContext){
MessageDispatcherServlet servlet = new MessageDispatcherServlet();
servlet.setApplicationContext(appContext);
servlet.setTransformWsdlLocations(true);
return new ServletRegistrationBean(servlet, "/ws/*");
}
// localhost:8080/ws/movies.wsdl
@Bean(name = "clientes")
public DefaultWsdl11Definition defaultWsdl11Definition(XsdSchema schema){
DefaultWsdl11Definition wsdl11Definition = new DefaultWsdl11Definition();
wsdl11Definition.setPortTypeName("ClientesPort");
wsdl11Definition.setLocationUri("/ws");
wsdl11Definition.setTargetNamespace(ClienteEndpoint.NAMESPACE_URI);
wsdl11Definition.setSchema(schema);
return wsdl11Definition;
}
@Bean
public XsdSchema moviesSchema(){
return new SimpleXsdSchema(new ClassPathResource("cliente.xsd"));
}
}
ClienteEndpoint. java
package com.example.conexion.endpoint;
import java.util.ArrayList;
import java.util.List;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ws.server.endpoint.annotation.Endpoint;
import org.springframework.ws.server.endpoint.annotation.PayloadRoot;
import org.springframework.ws.server.endpoint.annotation.RequestPayload;
import org.springframework.ws.server.endpoint.annotation.ResponsePayload;
import com.example.conexion.entity.Cliente;
import com.example.conexion.service.ClienteService;
import com.example.conexion.gs_ws.ClienteType;
import com.example.conexion.gs_ws.GetAllClientesRequest;
import com.example.conexion.gs_ws.GetAllClientesResponse;
import com.example.conexion.gs_ws.GetClienteByIdRequest;
import com.example.conexion.gs_ws.GetClienteByIdResponse;
@Endpoint
public class ClienteEndpoint {
public static final String NAMESPACE_URI = "http://www.javaspringclub.com/movies-ws";
private ClienteService service;
public ClienteEndpoint() {
}
@Autowired
public ClienteEndpoint(ClienteService service) {
this.service = service;
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getClienteByIdRequest")
@ResponsePayload
public GetClienteByIdResponse getMovieById(@RequestPayload GetClienteByIdRequest request) {
GetClienteByIdResponse response = new GetClienteByIdResponse();
Cliente clienteEntity = service.getClienteById(request.getClienteCedula());
ClienteType clienteType = new ClienteType();
BeanUtils.copyProperties(clienteEntity, clienteType);
response.setClienteType(clienteType);
return response;
}
@PayloadRoot(namespace = NAMESPACE_URI, localPart = "getAllClientesRequest")
@ResponsePayload
public GetAllClientesResponse getAllMovies(@RequestPayload GetAllClientesRequest request) {
GetAllClientesResponse response = new GetAllClientesResponse();
List<ClienteType> clienteTypeList = new ArrayList<ClienteType>();
List<Cliente> clienteEntityList = service.getAllClientes();
for (Cliente cliente : clienteEntityList) {
ClienteType clienteType = new ClienteType();
BeanUtils.copyProperties(cliente, clienteType);
clienteTypeList.add(clienteType);
}
response.getClienteType().addAll(clienteTypeList);
return response;
}
}
Cliente. java
package com.example.conexion.entity;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Cliente {
@Id
@Column(name="CEDULA")
private int cedula;
@Column(name="NOMBRE")
private String nombre;
@Column(name="APELLIDO")
private String apellido;
@Column(name="TIPO_CLIENTE")
private String tipo_cliente;
// Getter y Setters
public int getCedula() {
return cedula;
}
public void setCedula(int cedula) {
this.cedula = cedula;
}
public String getNombre() {
return nombre;
}
public void setNombre(String nombre) {
this.nombre = nombre;
}
public String getApellido() {
return apellido;
}
public void setApellido(String apellido) {
this.apellido = apellido;
}
public String getTipo_cliente() {
return tipo_cliente;
}
public void setTipo_cliente(String tipo_cliente) {
this.tipo_cliente = tipo_cliente;
}
}
ClienteRespository. java
package com.example.conexion.repository;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import com.example.conexion.entity.Cliente;
@Repository
public interface ClienteRepository extends CrudRepository <Cliente,Integer> {
public Cliente findById(int cedula);
}
ClienteService. java
package com.example.conexion.service;
import com.example.conexion.entity.Cliente;
import java.util.List;
public interface ClienteService {
public Cliente getClienteById(int id);
public List<Cliente> getAllClientes();
}
ClienteServiceImpl. java
package com.example.conexion.service;
import java.util.ArrayList;
import java.util.List;
import javax.transaction.Transactional;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.example.conexion.service.ClienteService;
import com.example.conexion.entity.Cliente;
import com.example.conexion.repository.ClienteRepository;
@Service
@Transactional
public class ClienteServiceImpl implements ClienteService {
private ClienteRepository repository;
public ClienteServiceImpl() {
}
@Autowired
public ClienteServiceImpl(ClienteRepository repository) {
this.repository = repository;
}
@Override
public Cliente getClienteById(int cedula) {
return this.repository.findById(cedula);
}
@Override
public List<Cliente> getAllClientes() {
List<Cliente> list = new ArrayList<>();
repository.findAll().forEach(e -> list.add(e));
return list;
}
}
cliente.xsd
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://www.javaspringclub.com/clientes-ws"
targetNamespace="http://www.javaspringclub.com/clientes-ws"
elementFormDefault="qualified">
<xs:element name="getClienteByIdRequest">
<xs:complexType>
<xs:sequence>
<xs:element name="clienteCedula" type="xs:int" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getClienteByIdResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="clienteType" type="tns:clienteType" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="clienteType">
<xs:sequence>
<xs:element name="cedula" type="xs:int" />
<xs:element name="name" type="xs:string" />
<xs:element name="apellido" type="xs:string" />
<xs:element name="tipo_cliente" type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="getAllClientesRequest">
<xs:complexType/>
</xs:element>
<xs:element name="getAllClientesResponse">
<xs:complexType>
<xs:sequence>
<xs:element name="clienteType" type="tns:clienteType" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
аппликат ion.properties
# Oracle settings
spring.datasource.url=jdbc:oracle:thin:@//10.164.7.203:1521/ORCLPDB1.localdomain
spring.datasource.username=cesar
spring.datasource.password=xxxxxx123
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.jpa.hibernate.ddl-auto=update
пом. xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example.conexion</groupId>
<artifactId>soap-service-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>soap-service-example</name>
<description>WebService Example</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web-services</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
</dependency>
<dependency>
<groupId>com.oracle.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<executions>
<execution>
<id>xjc-schema</id>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<sources>
<source>src/resources/xsd/clientes.xsd</source>
</sources>
<packageName>com.example.conexion.gs_ws</packageName>
<clearOutputDir>false</clearOutputDir>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<!-- Repository for ORACLE JDBC Driver -->
<repository>
<id>codelds</id>
<url>https://code.lds.org/nexus/content/groups/main-repo</url>
</repository>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
<pluginRepositories>
<pluginRepository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
<pluginRepository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</project>
Моя структура проекта

Я пытаюсь следовать этому примеру: https://www.javaspringclub.com/publish-and-consume-soap-web-services-using-spring-boot-part-1/, но чтобы подключиться к базе данных oracle, которая находится в контейнере и для которой я уже проверил соединение, я относительно новичок в пружинный башмак