Я хочу использовать файл XML, в котором есть параметры, и автоматически связывать его с полями компонента класса, чтобы в будущем его можно было повторно использовать в качестве класса конфигурации.Я опирался на сообщение: нажмите .
Мой файл файла configuration.xml выглядит так:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<server serverport="1111"/>
<client clientport="1111">
<ServerHost>localhost</ServerHost>
</client>
</config>
Мои классы следующие:
@ImportResource(value = "classpath:configuration.xml")
@Configuration
@NoArgsConstructor
@Getter
public class Config {
private Server server;
private Client client;
}
Client.java
@Getter
public class Client {
private @Value("#{clientport}") String clientPort;
private String serverHost;
}
Server.java
@Getter
public class Server {
private @Value("#{serverport}") String serverPort;
}
pom.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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.8.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.Java</groupId>
<artifactId>advanced</artifactId>
<version>0.0.1-SNAPSHOT</version>
<properties>
<java.version>11</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
При таком подходе я получаю ошибкукак:
Line 2 in XML document from class path resource [configuration.xml] is invalid; nested exception is org.xml.sax.SAXParseException; lineNumber: 2; columnNumber: 9; cvc-elt.1.a: Cannot find the declaration of element 'config'.
и
Caused by: org.xml.sax.SAXParseException: cvc-elt.1.a: Cannot find the declaration of element 'config'.
Я немного растерялся, потому что, похоже, все выглядит хорошо, но я не могу найти источник этой ошибки.Я буду благодарен за предложение о том, как решить эту проблему в моем приложении и сделать его многократно используемым в качестве класса с параметрами конфигурации из файла XML.
РЕДАКТИРОВАТЬ: Если вы знаете другой подход для достижения желаемой цели, не стесняйтесь опубликовать его.
РЕДАКТИРОВАТЬ2: Я нашел обходной путь для этой проблемы, но я надеюсь, что будет другое решение, которое принесетжелаемый эффект: клик