J'essaie de faire un appel ajax vers un autre domaine localement depuis mon ordinateur en écrivant du code proxy en jsp. Et voici mon jQuery AJAX qui appelle la page proxy.jsp.
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
});
};
Et mon fichier JSP est: -
<%@ 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() %>
Et lorsque je vérifie la réponse, j'obtiens cette erreur pour le fichier XML qu'il analyse:
<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>
Et le fichier XMl est le suivant: -
<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>
Quel mal je fais ici .. Toutes les suggestions seront appréciées ..
Le message d'erreur est en fait correct s'il n'est pas évident. Il indique que votre DOCTYPE doit avoir un identifiant SYSTEM. Je suppose que le vôtre n'a qu'un identifiant public.
Vous obtiendrez l'erreur avec (par exemple):
<!DOCTYPE persistence PUBLIC
"http://Java.Sun.com/xml/ns/persistence/persistence_1_0.xsd">
Vous ne le ferez pas avec:
<!DOCTYPE persistence PUBLIC
"http://Java.Sun.com/xml/ns/persistence/persistence_1_0.xsd" "">
Remarquer ""
à la fin du second - c'est l'identifiant du système. Le message d'erreur est déroutant: il doit indiquer que vous avez besoin d'un identifiant système, pas que vous avez besoin d'un espace entre publicId et systemId (inexistant).
Soit dit en passant, un identifiant système vide n'est peut-être pas idéal, mais il peut suffire à vous faire bouger.
Je viens de me retrouver avec cette exception, j'essayais de consommer un JAX-WS, avec une URL personnalisée comme celle-ci:
String WSDL_URL= <get value from properties file>;
Customer service = new Customer(new URL(WSDL_URL));
ExecutePtt port = service.getExecutePt();
return port.createMantainCustomers(part);
et Java a lancé:
XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,63]
Message: White spaces are required between publicId and systemId.
Il s'avère que la chaîne URL utilisée pour construire le service ne contenait pas le "? Wsdl" à la fin. Par exemple:
Mauvais:
http://www.Host.org/service/Customer
Bien:
http://www.Host.org/service/Customer?wsdl
Je viens de trouver ce message: http://forum.springsource.org/showthread.php?68949-White-spaces-are-required-between-publicId-and-systemId./page2&s=c69fe19798f5a071d22eaf681ca84a56
Quelques personnes ici ont réussi en inversant les lignes dans un fichier XML.
Modifiez l'ordre des instructions. Pour moi, changer le bloc de code
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/context
http://www.springframework.org/schema/beans/spring-beans.xsd"
avec
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context"
est valable.
Si vous travaillez à partir d'un réseau qui vous oblige à utiliser un proxy dans votre navigateur pour vous connecter à Internet (probablement un immeuble de bureaux), c'est peut-être le cas. J'ai eu le même problème et l'ajout des configurations de proxy aux paramètres réseau l'a résolu.
Si vous ne connaissez pas l'URL et le port du proxy, contactez votre administrateur réseau.