web-dev-qa-db-fra.com

Des espaces blancs sont requis entre publicId et systemId

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 ..

32
arsenal

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.

32
Max Tardiveau

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
3
raoolio

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.

1
Hudspeth

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.

1
ÖMER TAŞCI

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.

  • Accédez à vos préférences (Eclipse -> Préférences sur Mac ou Fenêtre -> Préférences sur Windows)
  • Ensuite -> Général -> développez pour afficher la liste en dessous -> Sélectionnez Connexions réseau (ne développez pas)
  • En haut de la page qui apparaît, il y a une liste déroulante, sélectionnez "Manuel".
  • Ensuite, sélectionnez "HTTP" dans la liste directement en dessous du menu déroulant (qui devrait maintenant avoir toutes ses options vérifiées), puis cliquez sur le bouton "Modifier" à droite de la liste.
  • Entrez l'URL et le port proxy dont vous avez besoin pour vous connecter à Internet dans votre navigateur Web normalement.
  • Répétez l'opération pour "HTTPS".

Si vous ne connaissez pas l'URL et le port du proxy, contactez votre administrateur réseau.

0
Kirsten Crear