2011-06-28 59 views
27

我想通過在jsp中編寫一些代理代碼來從本地計算機向本地其他域調用ajax。這是我調用proxy.jsp頁面的jQuery AJAX代碼。publicId和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 
     }); 
    }; 

我的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文件,它解析:

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

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

什麼wr翁我在這裏做什麼。任何建議,將感激..

回答

28

如果不明顯,錯誤消息實際上是正確的。它說你的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之間有一個空格。

順便說一句,空的系統標識符可能不理想,但它可能足以讓你移動。

+2

有沒有讓java忽略這個錯誤? –

1

我剛剛發現這個帖子:這裏http://forum.springsource.org/showthread.php?68949-White-spaces-are-required-between-publicId-and-systemId./page2&s=c69fe19798f5a071d22eaf681ca84a56

幾個人在一個XML文件中來回切換線取得了成功。

+0

感謝您的答覆..我不能編輯該XML文件..因爲該XML文件來自Apache SOLR ..所以我無法控制的..此外,該代碼工作正常這個XML'http: // www.w3schools.com/xml/note.xml' – ferhan

+0

鏈接中確定的問題實際上是某些場景的正確解決方案。對於xsi:schemaLocation值,每個名稱空間必須緊跟在模式位置之後,而不是另一個名稱空間。 – Jaywalker

1

我剛剛發現我自己有這個例外,我試圖消耗JAX-WS,使用自定義網址是這樣的:

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

謝謝。這就是我必須在Netbeans上創建Web服務客戶端的問題。 – appmaster

0

如果你從一些網絡需要您在瀏覽器中使用代理合作,以連接到互聯網(可能是一座辦公大樓),可能就是這樣。我遇到了同樣的問題,並將代理配置添加到網絡設置中解決了它。

  • 轉到您的喜好(日食 - 一個Mac或窗口上>首選項 - 在Windows>首選項)
  • 然後 - >常規 - >擴展到下面查看列表 - >選擇網絡連接(唐't擴大)
  • 在出現的頁面頂部有一個下拉菜單,選擇「手動」。
  • 然後在下拉列表正下方的列表中選擇「HTTP」(現在應選中所有選項),然後單擊列表右側的「編輯」按鈕。
  • 輸入代理網址和端口,您需要通常在您的網絡瀏覽器中連接到互聯網。
  • 重複「HTTPS」。

如果您不知道代理網址和端口,請諮詢您的網絡管理員。

1

更改陳述的順序。 對於我來說,改變的代碼

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

塊與

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

是有效的。