Java文件:prolog中不允许的内容

时间:2023-01-15 07:30:24

I'm new to Spring and started using the Sprint Tool Suite (eclipse) and see this error in a java file in my maven project: "Content is not allowed in prolog". This prevents the class from compiling (which is just a minimal SpringBootApplication class) in eclipse.

我是Spring的新手,开始使用Sprint工具套件(eclipse),并在我的maven项目的java文件中看到这个错误:“prolog中不允许有内容”。这将阻止类在eclipse中编译(这只是一个最小的SpringBootApplication类)。

package com.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

I've scoured the web and saw that in virtually every reference, this is an XML-parsing error. I had been updating three XML files but didn't see any invisible characters before the <?xml in a hex editor. They all specify to use UTF-8 encoding and I'm not seeing alternating 0 bytes that would indicate an accidental UTF-16 encoding. The line endings seem consistent (just a line feed).

我搜索了web,发现在几乎所有引用中,这是一个xml解析错误。我一直在更新三个XML文件,但是在

Interestingly, it builds without compiler errors with "maven clean install". I don't see any special characters in the java file either, but eclipse tells me that file is the problem and that's it a spring beans problem. The error message shows on the first line with the package statement.

有趣的是,它使用“maven clean install”构建时没有编译错误。我在java文件中也没有看到任何特殊字符,但是eclipse告诉我这个文件就是问题所在,这就是spring beans的问题。错误消息显示在包语句的第一行。

Any ideas what the root problem is or how I can solve this?

你知道根本问题是什么或者我该怎么解决?

Update As requested, here's my pom.xml file:

按要求更新,这是我的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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-rest-service</artifactId>
    <version>0.1.0</version>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.5.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.8</version>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
       <resources>
         <resource>
           <targetPath>com/test/mybatis/mappers</targetPath>
           <directory>src/main/java/com/test/mybatis/mappers</directory>
           <includes>
             <include>*.xml</include>
           </includes>
         </resource>
         <resource>
           <directory>src/main/resources</directory>
         </resource>
       </resources>
    </build>

    <repositories>
        <repository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>
    <pluginRepositories>
        <pluginRepository>
            <id>spring-releases</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.36</version>
            </dependency>
        </dependencies>
    </dependencyManagement>
</project>

Update 2 I searched my project folder for all .xml files and have removed all invisible characters programmatically using perl -i -pe 's/[^\x20-\x7f\x0A\x09]//g' fileName, but there were no invisible characters. This confirms what I saw in the hex editor.

更新2我搜索我项目文件夹中的所有xml文件并删除所有不可见字符以编程方式使用perl - pe ' s /[^ \ x20的——\ x7f \ x0A \ x09]/ / g的文件名,但是没有看不见的字符。这证实了我在十六进制编辑器中看到的。

Two questions come to mind: Why is the error showing in a .java file instead of a. xml file? Why is this only a problem for eclipse and not maven?

我想到了两个问题:为什么错误显示在.java文件而不是. xml文件中?为什么这只是eclipse的问题,而不是maven的问题?

The eclipse log shows this message (which indicates a .xml file):

eclipse日志显示了这条消息(它指示一个.xml文件):

org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Content is not allowed in prolog.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.springframework.ide.eclipse.core.io.xml.XercesDocumentLoader.loadDocument(XercesDocumentLoader.java:48)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadDocument(XmlBeanDefinitionReader.java:429)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:391)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$2.loadBeanDefinitions(BeansConfig.java:397)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:456)
    at org.springframework.ide.eclipse.beans.core.internal.model.BeansConfig$3.call(BeansConfig.java:1)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)

Update 3 I did find some eclipse-generated xml files in my workspace with characters before the <?xml using grep -ERl '^[^=]+<\?xml' . which ignores some of the eclipse user prefs which have xml embedded in the lines of the file. After removing the extra characters, the problem remained though.

更新3我确实在我的工作空间中找到了一些eclipse生成的xml文件,其中包含

Think I may restart the project and copy over files one at a time.

我想我可以重新启动这个项目,一次复制一个文件。

4 个解决方案

#1


7  

It seems likely that the culprit was a corrupted eclipse workspace. I created a new workspace and imported the project and everything works fine. That would also explain why an external maven build didn't show any problems.

似乎罪魁祸首是一个损坏的eclipse工作区。我创建了一个新的工作空间并导入了这个项目,一切正常。这也可以解释为什么外部maven构建没有显示任何问题。

As noted in update 3, I had found some eclipse-generated xml files that had characters before the prolog. Although correcting those did not fix the problems, I didn't inspect every eclipse file with xml content (like the user prefs) to see if they had some invisible characters before the prolog.

正如更新3中所指出的,我发现了一些eclipse生成的xml文件,它们在prolog之前有字符。虽然纠正这些问题并没有解决问题,但是我没有检查每个eclipse文件,其中包含xml内容(比如用户prefs),看看它们是否在prolog之前有一些不可见的字符。

Don't know what would have caused it to be corrupted except for perhaps force quitting eclipse during an unresponsive maven repo update but I can't be certain if that's when my troubles started. I'm just glad I can move forward.

不知道是什么原因导致它被损坏,除了可能在maven repo更新时强制退出eclipse之外,但我不能确定这是否是我的麻烦开始的时候。我很高兴我能继续前进。

#2


3  

Most likely the error was generated by the UTF-8 BOM at the start of the XML file - applications like Notepad puts that at the start of the file and the Java streams cannot handle that automatically. Your XMLis correct, but the file is not UTF-8Encoded. I've seen this before.. try copying and pasting the XML from this forum into a text editor and saving it. Also make sure that you're text editor is really saving in UTF-8.

最可能的错误是由UTF-8 BOM在XML文件的开头生成的——像Notepad这样的应用程序将错误放在文件的开头,而Java流无法自动处理这些错误。您的XMLis是正确的,但是文件不是utf -8编码的。我以前见过这个. .尝试将这个论坛的XML复制并粘贴到一个文本编辑器中并保存它。还要确保你的文本编辑器保存在UTF-8中。

Also, Springwill work just fine without any <?xml ... > declaration so go ahead and remove the comment between the DTDdeclaration and the starting element. Remove the UTF-8declaration. Problems with UTF-8encoded XMLin Java are pretty common, and not specific to Spring.

而且,Springwill在没有任何 声明,因此继续并删除DTDdeclaration和起始元素之间的注释。删除UTF-8declaration。使用utf -8编码的XMLin Java的问题非常常见,而且不是Spring特有的。

#3


1  

In my case this error occured while I was renamed main class (class annotated with @SpringBootApplication) of springboot application. I don't mean this will always happen but I accidently got this error after rename this class file in STS 3.8.4.

在我的例子中,当我被重命名为springboot应用程序的主类(用@SpringBootApplication注释的类)时发生了这个错误。我并不是说这种情况会经常发生,但是我在STS 3.8.4中重命名了这个类文件后意外地得到了这个错误。

To resolve this issue, I closed the IDE, navigate to project folder and delete the .springBeans file. After reopened IDE, this error was gone and my IDE no longer complains about this.

为了解决这个问题,我关闭了IDE,导航到项目文件夹并删除. springbeans文件。在重新打开IDE之后,这个错误就消失了,我的IDE也不再对此抱怨。

#4


0  

For me it was because I had renamed some classes and the .springBeans file needed some manual editing.

对我来说,这是因为我重命名了一些类,而. springbeans文件需要一些手工编辑。

#1


7  

It seems likely that the culprit was a corrupted eclipse workspace. I created a new workspace and imported the project and everything works fine. That would also explain why an external maven build didn't show any problems.

似乎罪魁祸首是一个损坏的eclipse工作区。我创建了一个新的工作空间并导入了这个项目,一切正常。这也可以解释为什么外部maven构建没有显示任何问题。

As noted in update 3, I had found some eclipse-generated xml files that had characters before the prolog. Although correcting those did not fix the problems, I didn't inspect every eclipse file with xml content (like the user prefs) to see if they had some invisible characters before the prolog.

正如更新3中所指出的,我发现了一些eclipse生成的xml文件,它们在prolog之前有字符。虽然纠正这些问题并没有解决问题,但是我没有检查每个eclipse文件,其中包含xml内容(比如用户prefs),看看它们是否在prolog之前有一些不可见的字符。

Don't know what would have caused it to be corrupted except for perhaps force quitting eclipse during an unresponsive maven repo update but I can't be certain if that's when my troubles started. I'm just glad I can move forward.

不知道是什么原因导致它被损坏,除了可能在maven repo更新时强制退出eclipse之外,但我不能确定这是否是我的麻烦开始的时候。我很高兴我能继续前进。

#2


3  

Most likely the error was generated by the UTF-8 BOM at the start of the XML file - applications like Notepad puts that at the start of the file and the Java streams cannot handle that automatically. Your XMLis correct, but the file is not UTF-8Encoded. I've seen this before.. try copying and pasting the XML from this forum into a text editor and saving it. Also make sure that you're text editor is really saving in UTF-8.

最可能的错误是由UTF-8 BOM在XML文件的开头生成的——像Notepad这样的应用程序将错误放在文件的开头,而Java流无法自动处理这些错误。您的XMLis是正确的,但是文件不是utf -8编码的。我以前见过这个. .尝试将这个论坛的XML复制并粘贴到一个文本编辑器中并保存它。还要确保你的文本编辑器保存在UTF-8中。

Also, Springwill work just fine without any <?xml ... > declaration so go ahead and remove the comment between the DTDdeclaration and the starting element. Remove the UTF-8declaration. Problems with UTF-8encoded XMLin Java are pretty common, and not specific to Spring.

而且,Springwill在没有任何 声明,因此继续并删除DTDdeclaration和起始元素之间的注释。删除UTF-8declaration。使用utf -8编码的XMLin Java的问题非常常见,而且不是Spring特有的。

#3


1  

In my case this error occured while I was renamed main class (class annotated with @SpringBootApplication) of springboot application. I don't mean this will always happen but I accidently got this error after rename this class file in STS 3.8.4.

在我的例子中,当我被重命名为springboot应用程序的主类(用@SpringBootApplication注释的类)时发生了这个错误。我并不是说这种情况会经常发生,但是我在STS 3.8.4中重命名了这个类文件后意外地得到了这个错误。

To resolve this issue, I closed the IDE, navigate to project folder and delete the .springBeans file. After reopened IDE, this error was gone and my IDE no longer complains about this.

为了解决这个问题,我关闭了IDE,导航到项目文件夹并删除. springbeans文件。在重新打开IDE之后,这个错误就消失了,我的IDE也不再对此抱怨。

#4


0  

For me it was because I had renamed some classes and the .springBeans file needed some manual editing.

对我来说,这是因为我重命名了一些类,而. springbeans文件需要一些手工编辑。