2011-06-28 21 views
27

Sto provando a effettuare una chiamata ajax ad altri domini localmente dal mio computer scrivendo del codice proxy in jsp. E questo è il mio codice jQuery AJAX che sta chiamando la pagina proxy.jsp.Sono richiesti spazi bianchi tra publicId e systemId

var metadata = 'https://rest-search.host.com/machine/search/meta?id='; 

var on_show_info= function() { 

    var AjaxCall = data + current_doc_info.id; 
    alert(AjaxCall); 
       request_meta_info = $.ajax({ 
       url: "proxy.jsp?url=" + AjaxCall, 
       type: 'GET', 
       success: check, 
       error: error 
     }); 
    }; 

E il mio file JSP è: -

<%@ page language="java" import="org.w3c.dom.*,javax.xml.parsers.DocumentBuilder,javax.xml.parsers.DocumentBuilderFactory,java.net.*,java.io.*" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<% 

String urlToQuery = request.getParameter("url"); 
System.out.println("rj " +urlToQuery); 
URL url = new URL(urlToQuery); 
final String login ="user"; 
final String password ="pass"; 

Authenticator.setDefault(new Authenticator() { 
    protected PasswordAuthentication getPasswordAuthentication() { 
     return new PasswordAuthentication (login, password.toCharArray()); 
    } 
}); 
URLConnection conn = url.openConnection(); 

InputStream in = conn.getInputStream(); 

DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); 
DocumentBuilder db =dbf.newDocumentBuilder(); 
Document doc=db.parse(urlToQuery); 


NodeList nl= doc.getElementsByTagName("attr"); 
%> 


<%= nl.item(0).getFirstChild().getNodeValue() %> 

E Quando controllo la risposta, io sono sempre questo errore per l'XML file, viene parsing:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/> 
<title>Error 500 White spaces are required between publicId and systemId.</title> 
</head> 
<body><h2>HTTP ERROR 500</h2> 
<p>Problem accessing /proxy.jsp. Reason: 
<pre> White spaces are required between publicId and systemId.</pre></p><h3>Caused by:</h3><pre>org.xml.sax.SAXParseException: White spaces are required between publicId and systemId. 
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) 
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) 
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:180) 
    at org.apache.jsp.proxy_jsp._jspService(org.apache.jsp.proxy_jsp:70) 
    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:109) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:389) 
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:486) 
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:380) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) 
    at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:390) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) 
    at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) 
    at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:213) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:171) 
    at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:145) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:92) 
    at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:381) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:67) 
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122) 
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110) 
    at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) 
    at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) 
    at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) 
    at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) 
    at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) 
    at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) 
    at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) 
    at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) 
    at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) 
    at org.mortbay.jetty.Server.handle(Server.java:326) 
    at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:536) 
    at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:915) 
    at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:539) 
    at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) 
    at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:405) 
    at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:409) 
    at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) 
</pre> 
<hr /><i><small>Powered by Jetty://</small></i><br/>             
</body> 
</html> 

E il Il file XMl è questo: -

<results><result><attr value="HW/SW" name="Line"/><attr value="ASIC" name="Description"/><attr value="CD" name="Number"/><attr value="AS" name="DocumentType"/><attr value="" name="Date"/><</result></results> 

ong che sto facendo qui .. Tutti i suggerimenti saranno apprezzati ..

risposta

28

Il messaggio di errore è effettivamente corretto se non evidente. Dice che il tuo DOCTYPE deve avere un identificatore di SISTEMA. Presumo che il tuo abbia solo un identificatore pubblico.

Si otterrà l'errore con (per esempio):

<!DOCTYPE persistence PUBLIC 
    "http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"> 

non sarà con:

<!DOCTYPE persistence PUBLIC 
    "http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" ""> 

Avviso "" alla fine nel secondo - questo è il sistema identificatore. Il messaggio di errore è confuso: dovrebbe dire che è necessario un identificatore di sistema, non che sia necessario uno spazio tra publicId e systemId (inesistente).

A proposito, un identificatore di sistema vuoto potrebbe non essere l'ideale, ma potrebbe essere sufficiente per farti muovere.

+2

C'è via per fare in modo che java ignori questo errore? –

1

Ho appena trovato questo post: http://forum.springsource.org/showthread.php?68949-White-spaces-are-required-between-publicId-and-systemId./page2&s=c69fe19798f5a071d22eaf681ca84a56

un paio di persone qui hanno avuto successo commutando le linee intorno in un file XML.

+0

grazie per la risposta .. Non riesco a modificare quel file xml .. come quel file xml proviene da apache solr .. Quindi non ho alcun controllo su quello .. E anche quel codice sta funzionando bene per questo 'http xml: // www.w3schools.com/xml/note.xml' – ferhan

+0

Il problema identificato nel collegamento è in realtà una soluzione corretta per alcuni scenari. Per xsi: valore schemaLocation, ogni spazio dei nomi deve essere seguito dal percorso dello schema e non da un altro spazio dei nomi. – Jaywalker

1

Ho appena trovato la mia auto con questa eccezione, stavo cercando di consumare una JAX-WS, con un URL personalizzato come questo:

String WSDL_URL= <get value from properties file>; 
Customer service = new Customer(new URL(WSDL_URL)); 
ExecutePtt port = service.getExecutePt(); 
return port.createMantainCustomers(part); 

e Java buttato:

XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,63] 
Message: White spaces are required between publicId and systemId. 

Risulta che alla stringa URL utilizzata per costruire il servizio mancava il "? wsdl" alla fine. Per esempio:

Bad:

http://www.host.org/service/Customer 

Buono:

http://www.host.org/service/Customer?wsdl 
+0

Grazie. questo è il problema che ho dovuto creare un client di servizi Web su Netbeans. – appmaster

0

Se si sta lavorando da qualche rete che richiede di utilizzare un proxy nel browser per connettersi a Internet (probabilmente un edificio per uffici), potrebbe essere questo. Ho avuto lo stesso problema e l'aggiunta delle configurazioni proxy alle impostazioni di rete l'ho risolto.

  • Vai tue preferenze (Eclipse -> Preferenze su un Mac, o Finestra -> Preferenze su un Windows)
  • Poi -> Generale -> espandere per visualizzare l'elenco sottostante -> Selezionare Connessioni di rete (don 't espandere)
  • Nella parte superiore della pagina che appare c'è un menu a discesa, selezionare "Manuale".
  • Quindi selezionare "HTTP" nell'elenco direttamente sotto l'elenco a discesa (che ora dovrebbe avere tutte le sue opzioni selezionate) e quindi fare clic sul pulsante "Modifica" a destra dell'elenco.
  • Immettere l'URL e la porta proxy che è necessario connettere a Internet nel browser Web normalmente.
  • Ripetere per "HTTPS".

Se non si conoscono l'url del proxy e la porta, parlare con il proprio amministratore di rete.

1

Modificare l'ordine degli annunci. Per me, cambiare il blocco di codice

xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/beans/spring-beans.xsd" 

con

xsi:schemaLocation="http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans.xsd 
        http://www.springframework.org/schema/context" 

è valido.

Problemi correlati