Пробелы требуются между publicId и systemId - PullRequest
32 голосов
/ 29 июня 2011

Я пытаюсь сделать ajax-вызов в другой домен локально со своего компьютера, написав некоторый прокси-код в jsp. И это мой код jQuery AJAX, который вызывает страницу 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
        });
    };

И мой файл 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() %> 

И когда я проверяю ответ, я получаю эту ошибку для XML-файла, который он анализирует:

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

Причина:

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)

Работает на причале: //

И файл XMl таков: -

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

Что не так я здесь делаю .. Любые предложения будут оценены ..

Ответы [ 5 ]

32 голосов
/ 10 февраля 2012

Сообщение об ошибке действительно правильно, если не очевидно.Это говорит о том, что ваш DOCTYPE должен иметь идентификатор SYSTEM.Я предполагаю, что у вас есть только публичный идентификатор.

Вы получите сообщение об ошибке (например):

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

Вы не будете с:

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

Обратите внимание "" в конце второго - это системный идентификатор.Сообщение об ошибке сбивает с толку: в нем должно быть указано, что вам нужен системный идентификатор, а не то, что вам нужен пробел между publicId и (несуществующим) systemId.

Кстати, пустой системный идентификатор может небудь идеальным, но этого может быть достаточно, чтобы заставить тебя двигаться.

3 голосов
/ 10 мая 2014

Я только что нашел себя с этим Исключением, я пытался использовать JAX-WS с пользовательским URL-адресом, подобным этому:

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

и Java бросил:

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

Оказывается, что в строке URL-адреса, использованной для создания службы, в конце отсутствовал «? Wsdl».Например:

Плохо:

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

Хорошо:

http://www.host.org/service/Customer?wsdl
1 голос
/ 23 ноября 2016
1 голос
/ 29 июня 2011

Я только что нашел это сообщение: http://forum.springsource.org/showthread.php?68949-White-spaces-are-required-between-publicId-and-systemId./page2&s=c69fe19798f5a071d22eaf681ca84a56

Несколько человек добились успеха, переключив строки в файле XML.

0 голосов
/ 27 марта 2015

Если вы работаете в какой-либо сети, для которой требуется подключение к Интернету через прокси-сервер в браузере (вероятно, в офисном здании), то это может быть так. У меня была такая же проблема, и добавление конфигов прокси в настройки сети решило ее.

  • Перейдите в настройки (Eclipse -> Настройки на Mac или Window -> Настройки в Windows)
  • Затем -> Общие -> развернуть, чтобы просмотреть список внизу -> Выбрать сетевые подключения (не развертывать)
  • В верхней части появившейся страницы есть раскрывающийся список, выберите «Вручную».
  • Затем выберите «HTTP» в списке непосредственно под выпадающим списком (в котором теперь должны быть отмечены все его параметры), а затем нажмите кнопку «Изменить» справа от списка.
  • Введите в прокси-адресе URL-адрес и порт, который требуется для обычного подключения к Интернету в веб-браузере.
  • Повторите для "HTTPS".

Если вы не знаете URL-адрес и порт прокси-сервера, обратитесь к администратору сети.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...