Eu tenho um cliente de serviço web baseado em Java conectado ao serviço web Java (implementado na estrutura Axis1).
Estou recebendo a seguinte exceção no meu arquivo de log:
Caused by: org.xml.sax.SAXParseException: Content is not allowed in prolog.
at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)
at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$PrologDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at javax.xml.parsers.SAXParser.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.ws.axis.security.WSDoAllReceiver.invoke(WSDoAllReceiver.java:114)
at org.apache.axis.strategies.InvocationStrategy.visit(InvocationStrategy.java:32)
at org.apache.axis.SimpleChain.doVisiting(SimpleChain.java:118)
at org.apache.axis.SimpleChain.invoke(SimpleChain.java:83)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:198)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
Respostas:
Isso geralmente é causado por um espaço em branco antes da declaração XML, mas pode ser qualquer texto , como um traço ou qualquer caractere. Eu digo muitas vezes causado pelo espaço em branco porque as pessoas assumem que o espaço em branco é sempre ignorável, mas esse não é o caso aqui.
Outra coisa que costuma acontecer é uma UTF-8 BOM (marca de ordem de bytes), que é permitida antes que a declaração XML possa ser tratada como espaço em branco se o documento for entregue como um fluxo de caracteres para um analisador XML em vez de um fluxo de bytes .
O mesmo pode acontecer se os arquivos de esquema (.xsd) forem usados para validar o arquivo xml e um dos arquivos de esquema tiver uma BOM UTF-8 .
fonte
Document document = documentBuilder.parse(new InputSource(new StringReader(xml)))
paraDocument document = documentBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))))
Na verdade, além do post de Yuriy Zubarev
Quando você passa um arquivo xml inexistente para o analisador. Por exemplo, você passa
quando apenas o arquivo C: /temp/abc.xml existe no seu sistema de arquivos
Em ambos os casos
ou
Todos dão a mesma mensagem de erro.
Bug muito decepcionante, porque o seguinte rastreamento
não diz nada sobre o fato de 'o nome do arquivo estar incorreto' ou 'esse arquivo não existe'. No meu caso, eu tinha o arquivo xml absolutamente correto e tive que passar 2 dias para determinar o problema real.
fonte
Tente adicionar um espaço entre a
encoding="UTF-8"
string no prólogo e a terminação?>
. No XML, o prólogo designa esse elemento delimitado por ponto de interrogação entre colchetes no início do documento (enquanto o prólogo da tag no fluxo de empilhamento se refere à linguagem de programação).Adicionado: esse traço na frente do seu prólogo faz parte do documento? Esse seria o erro lá, ter dados na frente do prólogo
-<?xml version="1.0" encoding="UTF-8"?>
,.fonte
<?xml ver...
bit.Eu tive o mesmo problema (e resolvi) ao tentar analisar um documento XML com o freemarker.
Eu não tinha espaços antes do cabeçalho do arquivo XML.
O problema ocorre quando e somente quando a codificação do arquivo e o atributo de codificação XML são diferentes. (ex: arquivo UTF-8 com atributo UTF-16 no cabeçalho).
Então, eu tinha duas maneiras de resolver o problema:
fonte
Isso significa que o XML está malformado ou o corpo da resposta não é um documento XML.
fonte
Passei apenas 4 horas rastreando um problema semelhante em um WSDL. Acontece que o WSDL usou um XSD que importa outro namespace XSD. Este XSD importado continha o seguinte:
Observe o vazio
include
elemento ! Esta foi a raiz dos meus problemas. Eu acho que esta é uma variação no arquivo do Egor não encontrado problema acima.+1 a um relatório de erro decepcionante.
fonte
No meu caso, remover completamente o atributo 'encoding = "UTF-8"' funcionou.
Parece um problema de codificação do conjunto de caracteres, talvez porque seu arquivo não esteja realmente em UTF-8.
fonte
Minha resposta provavelmente não ajudaria você, mas ajudaria nesse problema em geral.
Quando você vir esse tipo de exceção, tente abrir o arquivo xml em qualquer editor hexadecimal e, em algum momento, poderá ver bytes adicionais no início do arquivo que o editor de texto não mostra.
Exclua-os e seu xml será analisado.
fonte
Às vezes é o código, não o XML
O código a seguir,
também resultará nesse erro,
porque está tentando analisar a string literal
"file.xml"
(e não o conteúdo dofile.xml
arquivo) e falhando porque"file.xml"
como uma string, não é um XML bem formado.Correção: Remover
StringReader()
:Da mesma forma, problemas com buffer sujo podem deixar lixo residual à frente do XML real. Se você verificou cuidadosamente seu XML e ainda está recebendo esse erro, registre o conteúdo exato que está sendo passado para o analisador; Às vezes, o que realmente está sendo analisado é surpreendente.
fonte
applicaionContext.xml
caminho no código e não estava verificando o código estava procurando erro apenas no arquivo XMLPrimeiro limpe o projeto e depois reconstrua o projeto. Eu também estava enfrentando o mesmo problema. Tudo veio bem depois disso.
fonte
Se tudo mais falhar, abra o arquivo em binário para garantir que não haja caracteres engraçados [3 caracteres não imprimíveis no início do arquivo que identifiquem o arquivo como utf-8] no início do arquivo. Fizemos isso e encontramos alguns. então convertemos o arquivo de utf-8 para ascii e funcionou.
fonte
Para os mesmos problemas, removi a seguinte linha,
Está funcionando bem. Não sei ao certo por que esse UTF-8 dá problema. Para me manter em choque, também funciona bem para o UTF-8.
Estou usando o Windows 7 de 32 bits e o Netbeans IDE com Java * jdk1.6.0_13 *. Não faço ideia de como isso funciona.
fonte
Como Mike Sokolov já apontou, uma das possíveis razões é a presença de alguns caracteres (como um espaço em branco) antes da tag.
Se seu XML de entrada estiver sendo lido como uma String (em oposição à matriz de bytes), você poderá substituir sua string de entrada pelo código abaixo para garantir que todos os caracteres 'desnecessários' antes da tag xml sejam apagados.
Você precisa ter certeza de que o xml de entrada começa com a tag xml.
fonte
No meu caso, o web.xml no meu aplicativo tem espaço extra, mesmo depois que eu excluí não funcionava, eu tinha que reverter chages e suas correções e sim, eu estava brincando com logging.properties e web.xml no meu tomcat, mas mesmo depois de reverter o erro continuava sendo exibido, então isso foi corrigido)).
Para ser específico, tentei adicionar org.apache.catalina.filters.ExpiresFilter.level = FINE stack over flow algo sobre logging.properties
fonte
Segui as instruções encontradas aqui e recebi o mesmo erro.
Tentei várias coisas para resolvê-lo (ou seja, alterar a codificação, digitar o arquivo XML em vez de copiar e colar) no Bloco de notas e no Bloco de notas XML, mas nada funcionou.
O problema foi resolvido quando editei e salvei meu arquivo XML no Notepad ++ (codificação -> utf-8 sem BOM)
fonte
Para todos aqueles que recebem esse erro: AVISO: Catalina.start usando conf / server.xml: o conteúdo não é permitido no prólogo.
Não é muito informativo .. mas o que isso realmente significa é que há lixo no seu arquivo conf / server.xml.
Eu já vi esse erro exato em outros arquivos XML. Esse erro pode ser causado por alterações em um editor de texto que introduz o lixo.
A maneira de verificar se você tem lixo no arquivo ou não é abri-lo com um "Editor HEX". Se você vir algum caractere antes dessa string
assim seria lixo
esse é o seu problema .... A solução é usar um bom editor HEX. Um que permita salvar arquivos com diferentes tipos de codificação.
Em seguida, salve-o como UTF-8. Alguns sistemas que usam arquivos XML podem precisar salvá-lo como UTF NO BOM, o que significa com "NO Byte Order Mark"
Espero que isto seja útil a alguém!!
fonte
Para mim, um Build-> Clean corrigiu tudo!
fonte
Para corrigir o problema de lista técnica nos sistemas Unix / Linux:
Verifique se há um caractere de lista técnica indesejado:
hexdump -C myfile.xml | more
um caractere de lista técnica indesejado aparecerá no início do arquivo como...<?xml>
Como alternativa, faça
file myfile.xml
. Um arquivo com um caractere de lista técnica aparecerá como:myfile.xml: XML 1.0 document text, UTF-8 Unicode (with BOM) text
Corrija um único arquivo com:
tail -c +4 myfile.xml > temp.xml && mv temp.xml myfile.xml
Repita 1 ou 2 para verificar se o arquivo foi limpo. Provavelmente também é sensato fazer
view myfile.xml
para verificar o conteúdo permaneceu.Aqui está um script bash para higienizar uma pasta inteira de arquivos XML:
fonte
Apenas um pensamento adicional sobre este para o futuro. Para obter esse bug, pode-se simplesmente pressionar a tecla delete ou alguma outra tecla aleatoriamente quando eles têm uma janela XML como a exibição ativa e não estão prestando atenção. Isso já aconteceu comigo antes com o arquivo struts.xml no meu aplicativo da web. Cotovelos desajeitados ...
fonte
Eu também estava recebendo o mesmo
XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,2] Message: Reference is not allowed in prolog.
, quando meu aplicativo estava criando uma resposta XML para uma chamada RestFull Webservice. Ao criar o formato XML String, substituí o & lt e & gt por <e> e o erro foi disparado, e eu estava obtendo uma resposta adequada. Não tenho certeza de como funcionou, mas funcionou.
amostra :
fonte
Eu tive o mesmo problema.
Primeiro, baixei o arquivo XML para a área de trabalho local e recebi
Content is not allowed in prolog
durante o arquivo de importação no servidor de portal. Até o arquivo visual estava bom para mim, mas de alguma forma estava corrompido.Então, baixei novamente o mesmo arquivo, tentei o mesmo e funcionou.
fonte
Tivemos o mesmo problema recentemente e acabou sendo o caso de uma URL incorreta e, consequentemente, de uma resposta HTTP 403 padrão (que obviamente não é o XML válido que o cliente estava procurando). Vou compartilhar os detalhes caso alguém dentro do mesmo contexto tenha esse problema:
Esse era um aplicativo Web baseado no Spring, no qual um bean "JaxWsPortProxyFactoryBean" foi configurado para expor um proxy para uma porta remota.
O "END_POINT_BASE_URL" é uma variável de ambiente configurada em "setenv.sh" da instância do Tomcat que hospeda o aplicativo Web. O conteúdo do arquivo é algo como isto:
O ";" ausente após cada linha causou o URL mal formado e, portanto, a resposta incorreta. Ou seja, em vez de "BusinessAppServices / OurService? Wsdl", o URL tinha um CR antes de "/". O "Monitor TCP / IP" foi bastante útil ao solucionar o problema.
fonte
No meu caso, recebi esse erro porque a API que usei poderia retornar os dados no formato XML ou JSON. Quando o testei usando um navegador, ele assumiu o formato XML, mas quando invoquei a mesma chamada de um aplicativo Java, a API retornou a resposta formatada em JSON, que naturalmente desencadeou um erro de análise.
fonte
Até eu tinha enfrentado um problema semelhante. A razão era algum caractere de lixo no início do arquivo.
Correção: basta abrir o arquivo em um editor de texto (testado em texto sublime), remover qualquer recuo, se houver, e copiar e colar todo o conteúdo do arquivo em um novo arquivo e salvá-lo. É isso aí!. Quando executei o novo arquivo, ele foi executado sem erros de análise.
fonte
Peguei o código do Dineshkumar e modifiquei para validar meu arquivo XML corretamente:
fonte
Defina seu documento para formar da seguinte maneira:
fonte
Eu tive o mesmo problema com a primavera
e pelo código de pré-processo.
Talvez alguém precise de um motivo: BytesMessage #readBytes - lendo bytes ... e esqueci que a leitura é uma operação de direção única. Você não pode ler duas vezes.
fonte
Tente com BOMInputStream em apache.commons.io:
fonte
Eu estava tendo o mesmo problema ao analisar o
info.plist
arquivo no meu mac. No entanto, o problema foi corrigido usando o seguinte comando que transformou o arquivo em um XML.Espero que ajude alguém.
fonte
Eu tive o mesmo problema com alguns arquivos XML, resolvi ler o arquivo com codificação ANSI (Windows-1252) e escrever um arquivo com codificação UTF-8 com um pequeno script em Python. Eu tentei usar o Notepad ++, mas não tive sucesso:
fonte