prologexception中不允许的内容

我正在尝试将xml发送到第三方通过ac #.net应用程序提供给我的基于java的Web服务,并且我得到了org.xml.sax.SAXParseException: Content is not allowed in prolog错误中org.xml.sax.SAXParseException: Content is not allowed in prolog

我已经针对模式validation了xml,并且我传递了用于将xml保存到.xml文件的内存流,然后使用hex编辑器打开文件以确保prolog中没有不需要的字符,并且没有。 打开时,文件中的第一个字符是

  

我用来将xml数据发送到Web服务的类接受一个字节数组。 我认为使用XmlTextWriter创建xml到utf-8编码的内存流,然后将流的内容发送到字节数组是最直接的方法。

我已经做了很多研究并尝试了我能找到的这个问题的所有可能性,但没有任何效果。 有人可以帮忙吗? 提前致谢。

顺便说一句,这是Web服务返回给我的部分内容。 在SOAP消息的有效载荷中,应该在数据之后 元素看起来像那样,或者像之前的内容一样可读xml吗?

 Messages: Message: Payload: 1test1231234560testPD94b WwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dG5zOlN1Ym1pc3Npb25EYXRhIHhzaTpzY 2hlbWFMb2NhdGlvbj0iaHR0cDovL2dvdi5odWQuYXJtL2FybV9kYXRhYmFnXzNfMS54c2QiIHhtbG5zO nhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT......etc............................  

这里是xml数据,以提高可读性:

      1 test 123 123456 0  test PD94b WwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz48dG5zOlN1Ym1pc3Npb25EYXRhIHhzaTpzY 2hlbWFMb2NhdGlvbj0iaHR0cDovL2dvdi5odWQuYXJtL2FybV9kYXRhYmFnXzNfMS54c2QiIHhtbG5zO nhzaT0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxT......etc............................     

我能够通过删除UTF编码来摆脱这个问题。 听起来像在我们的两种情况下,文本实际上不是UTF-8编码的。

你的文件顶部是否有一个字节顺序标记导致这种混乱? 使用hex转储或hex编辑器转储或编辑文件,并检查前两个或三个字节,并确保文件以

我刚接过你的消息,缩进它并validation:

      1 test 123 123456 0  test  PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmL *abbreviated data to fit*     

我猜这个消息之前的某些内容在某种程度上是不同步的 – 错误消息似乎表明XML解析器认为它在看到行之前看到了注释。

只需使用hex编辑器(如hexplorer)打开XML文件,然后就可以查看和删除这些奇怪的字符,保存文件并使用首选编辑器打开(我个人使用Notepad ++ )并确保您的文件使用的是UTF-8编码:-)

希望对你有帮助

我已经完成了C#/ Java XML互操作性和Java处理字节顺序标记(XML声明之前的2或3个字节以及识别编码字节顺序)的问题。 Java无法很好地使用有效的BOM,因此您必须将其删除。 通过派生字节数组并使用以下命令检查它:

 arr[0] == (byte) 0xEF && arr[1] == (byte) 0xBB && arr[2] == (byte) 0xBF 

这将检查3字节变体,这是导致悲伤的原因:-(

Web服务是否与其他(Java)客户端一起正常运行? 我已经收到这个错误了很多次,错误的来源是库依赖的问题 – 如果我没记错的话,JAXB2与Java5有关。