2011-06-28 15 views
27

Próbuję wykonać wywołanie ajaxa w innej domenie lokalnie z mojego komputera, pisząc kod serwera proxy w jsp. A to jest mój kod jQuery AJAX, który wywołuje stronę proxy.jsp.Wymagane są białe spacje między jawnym IDI a identyfikatorem systemowym

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 
     }); 
    }; 

A mój plik JSP jest: -

<%@ 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() %> 

i kiedy sprawdzić odpowiedź, otrzymuję ten błąd w pliku XML Jest parsowania:

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

a Plik XMl to: -

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

Co wr Ong robie tutaj .. Wszelkie sugestie będą mile widziane ..

Odpowiedz

28

Komunikat o błędzie jest rzeczywiście poprawny, jeśli nie jest oczywisty. Mówi, że twój DOCTYPE musi mieć identyfikator SYSTEM. Zakładam, że twój ma tylko publiczny identyfikator.

Dostaniesz błąd z (na przykład):

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

Użytkownik nie będzie z:

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

Zawiadomienie "" na koniec w drugim - to system identyfikator. Komunikat o błędzie jest mylący: należy powiedzieć, że potrzebujesz identyfikatora systemu, a nie, że potrzebujesz spacji między publicId a (nieistniejącym) identyfikatorem systemowym.

Nawiasem mówiąc, pusty identyfikator systemu może nie być idealny, ale może wystarczyć, abyś mógł się poruszać.

+2

Czy odszedł, aby uzyskać java, aby zignorować ten błąd? –

1

Właśnie znalazłem ten post: http://forum.springsource.org/showthread.php?68949-White-spaces-are-required-between-publicId-and-systemId./page2&s=c69fe19798f5a071d22eaf681ca84a56

Parę osób tu sukcesy poprzez przełączenie linii wokół w pliku XML.

+0

dziękuję za odpowiedź .. Nie mogę edytować tego pliku xml .. ponieważ ten plik xml pochodzi z apache solr .. Więc nie mam kontroli nad tym .. I również ten kod działa dobrze dla tego xml 'http: // www.w3schools.com/xml/note.xml' – ferhan

+0

Problem zidentyfikowany w łączu jest właściwie poprawnym rozwiązaniem niektórych scenariuszy. W przypadku wartości xsi: schemaLocation każda przestrzeń nazw musi być zgodna z lokalizacją schematu, a nie z inną przestrzenią nazw. – Jaywalker

1

Właśnie znalazłem mój własny z tego wyjątku, starałem się zużywają JAX-WS, z niestandardowym URL tak:

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

i Java rzucił:

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

Okazuje się, że ciąg adresu URL użyty do skonstruowania usługi nie zawierał "? wsdl" na końcu. Na przykład:

Źle:

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

Dobre: ​​

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

Dzięki. to jest problem z utworzeniem klienta usługi WWW w Netbeans. – appmaster

0

Jeśli pracujesz z jakiejś sieci, która wymaga użycia serwera proxy w przeglądarce, aby połączyć się z internetem (prawdopodobnie budynek biurowy), to może być to. Miałem ten sam problem i rozwiązałem konfigurację proxy ustawień sieciowych.

  • przejdź do preferencji (Eclipse -> Preferencje na komputerze Mac lub Window -> Preferences na Windows)
  • Następnie -> Ogólne -> rozwinąć w celu wyświetlenia listy poniżej -> Wybierz Połączenia sieciowe (don 't expand)
  • U góry strony, która się pojawi, pojawi się menu rozwijane, wybierz "Manual".
  • Następnie wybierz "HTTP" na liście bezpośrednio pod menu rozwijanym (które powinno teraz mieć zaznaczone wszystkie opcje), a następnie kliknij przycisk "Edytuj" po prawej stronie listy.
  • Wprowadź adres URL serwera proxy i port, z którym zwykle należy łączyć się z Internetem w przeglądarce internetowej.
  • Powtórz dla "HTTPS."

Jeśli nie znasz adresu URL i portu serwera proxy, skontaktuj się z administratorem sieci.

1

Zmień kolejność zapisów. Dla mnie, zmieniając blok kodu

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

z

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

jest prawidłowy.

Powiązane problemy