2009-09-23 13 views
5

Ho la seguente xml frammento:Connection refused: connect durante l'analisi XML con Groovy

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

<!DOCTYPE sqlMap PUBLIC "-//ibatis.apache.org//DTD SQL Map 2.0//EN" 
    "http://ibatis.apache.org/dtd/sql-map-2.dtd"> 
<sqlMap namespace="reports"> 

    <typeAlias alias="Header" type="VerificationVO"/> 
    </sqlMap> 

Durante il tentativo di analizzare questo XML utilizzando:

def sqlMapOld = new XmlParser().parse(file) 

ottengo il seguente errore:

Exception thrown: Connection refused: connect 
java.net.ConnectException: Connection refused: connect 

Questo errore va via se rimuovo il DOCTYPE dallo snippet xml. C'è un modo per evitare che lo script groovy provi a connettersi all'URL?

risposta

5

Se stai usando un parser del caso, provare il load-external-dtd caratteristica.

def parser= new XmlParser() 
parser.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) 
def sqlMapOld= parser.parse(new FileInputStream(file)) 

altrimenti penso che avrei dovuto set un EntityResolver che non fa nulla.

1

Prova

def sqlMapOld = new XmlParser (false, true) .parse (file)

per renderlo non-validante

2

Il parser sta tentando di scaricare la DTD esterna a cui fa riferimento il DOCTYPE.

Si hanno due opzioni, disabilitare l'uso della DTD esterna o configurare il proprio ambiente Java/Groovy XML per utilizzare un catalogo locale di DTD.

È possibile disattivare il caricamento DTD esterno con

def p = new XmlParser() 
p.setFeature("http://apache.org/xml/features/nonvalidating/load-external-dtd", false) 
p.parse(file) 

Per informazioni sulla configurazione e l'utilizzo di un catalogo locale vedere: http://www.sagehill.net/docbookxsl/WriteCatalog.html

http://www.sagehill.net/docbookxsl/UseCatalog.html

Problemi correlati