개발인생/etc

[eclipse] xml파일의 "Downloading external resources is disabled." 오류 해결

forri 2025. 2. 19. 14:02

오류 발생

xml 파일에서 빨간줄 -> 원인:Downloading external resources is disabled.

오류 원인

http://mybatis.org/dtd/mybatis-3-mapper.dtd

문제가 된 여기 링크로 접속하니까 아래 파일이 다운로드 되었다. 즉, url에 이상이 있는 것이 아니라 이클립스에서 dtd 형식의 파일을 제대로 다운받지 못하고 있었던 거임

이거 다운받았는데 괜히 받음

오류 해결

Window > Preference > XML (Wild Web Developer)

Download external resources like referenced DTD, XSD (첫번째 체크)가 해제되어 있다면 체크하고 Apply한다.

 


 

위에 방법으로 간단하게 해결했지만 사실 그렇게 간단하지는 않았다.

아래 방법으로 했는데도 안됐음. 아래는 gpt가 알려준거니까 참고해보기

 

🔹 해결 방법 1: DTD 파일을 로컬에 저장하고 사용하기

인터넷에 접근할 수 없는 환경이라면 DTD 파일을 로컬로 다운로드하고, 이를 직접 참조하는 방식으로 변경하면 돼.

  1. DTD 파일 다운로드
    • 브라우저에서 MyBatis 공식 DTD 파일을 다운로드해.
    • 프로젝트의 resources/dtd/mybatis-3-config.dtd 경로에 저장해.
  2. XML에서 DTD 참조 변경
<!DOCTYPE configuration SYSTEM "file:///{프로젝트경로}/resources/dtd/mybatis-3-config.dtd">

예를 들어, 프로젝트 루트에 dtd 폴더를 만들어서 저장했다면 아래처럼 설정하면 돼.

<!DOCTYPE configuration SYSTEM "file:///C:/myproject/resources/dtd/mybatis-3-config.dtd">

⚠ 주의: 경로는 시스템에 따라 다를 수 있으니 맞게 수정해야 해.

 


🔹 해결 방법 2: DTD 없이 XML을 작성하기

사실 MyBatis는 DTD 없이도 잘 동작해. DTD를 생략하고 XML을 작성해도 문제가 없으니까 아래처럼 <!DOCTYPE> 선언을 아예 제거하는 것도 방법이야.

<?xml version="1.0" encoding="UTF-8"?>

<configuration>
	<settings>
		<setting name="mapUnderscoreToCamelCase" value="true" />
		<setting name="logImpl" value="STDOUT_LOGGING" />
        <setting name="jdbcTypeForNull" value="VARCHAR" />
	</settings>

	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="oracle.jdbc.driver.OracleDriver" />
				<property name="url" value="jdbc:oracle:thin:@localhost:xe" />
				<property name="username" value="" />
				<property name="password" value="" />
			</dataSource>
		</environment>
	</environments>

	<mappers>
		<mapper resource="mybatis/mapper/BoardMapper.xml" />
		<mapper resource="mybatis/mapper/MemberMapper.xml" />
	</mappers>
</configuration>

이렇게 하면 DTD를 참조하지 않으므로 외부 네트워크 문제도 발생하지 않아.