gpt4 book ai didi

java - Spring 4 应用程序在防火墙环境中运行时可以支持 spring-beans.dtd 吗?

转载 作者:行者123 更新时间:2023-12-01 11:57:03 25 4
gpt4 key购买 nike

我有一个 Spring 4 项目,当部署它时,它在非常严格的防火墙后面运行。该防火墙的作用是我的项目在启动/运行时无法从互联网下载任何内容。我的项目依赖于一个库 jar,其中包含使用 spring-beans.dtd 的 spring 配置文件。 Spring 3 jar 与 spring-beans.dtd 一起打包,但 Spring 4 jar 没有。当 spring 尝试初始化 bean 时,它会尝试下载 spring-beans.dtd,但会失败,因为它被防火墙阻止并导致堆栈跟踪。

Caused by: org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from URL [jar:file:/<someFile>]; nested exception is java.net.ConnectException: Connection refused
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:409)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:335)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:180)
at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:216)
at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.importBeanDefinitionResource(DefaultBeanDefinitionDocumentReader.java:242)
... 54 more
Caused by: java.net.ConnectException: Connection refused
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:345)
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206)
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at java.net.Socket.connect(Socket.java:538)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.http.HttpClient.<init>(HttpClient.java:211)
at sun.net.www.http.HttpClient.New(HttpClient.java:308)
at sun.net.www.http.HttpClient.New(HttpClient.java:326)
at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:1167)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1103)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:997)
at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:931)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1511)
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1439)
at org.springframework.beans.factory.xml.DefaultDocumentLoader.loadDocument(DefaultDocumentLoader.java:76)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:428)
at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:390)
... 59 more

我知道有问题的配置文件应该从 spring beans.dtd 更新:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>

</beans>

到 spring-beasns.xsd:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

</beans>

但是,我无权更改它们。

是否有某种方法可以类似于 Spring 3 中的方式打包 spring-beans.dtd 文件,以便在初始化 Bean 时它将使用本地版本而不是尝试下载一个?

最佳答案

我遇到的问题是我正在将一个使用 *.dtd xml 验证的 bean 定义文件导入到 spring 4 项目中。由于我无权更改依赖项 jar,因此我选择将有问题的 spring 文件中的 bean 定义复制到项目的本地 spring 文件中。

之前:

位于依赖项 jar 中的有问题的 Bean 定义文件

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<bean id="dependendBean" class="someClass" />
</beans>

本地 bean 定义

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<import resource="classpath*:/dependency-beans.xml"/>

</beans>

之后:

本地 bean 定义

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="dependendBean" class="someClass" />

</beans>

关于java - Spring 4 应用程序在防火墙环境中运行时可以支持 spring-beans.dtd 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28371328/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com