web-dev-qa-db-ja.com

publicIdとsystemIdの間には空白が必要です

Jspでプロキシコードを記述して、コンピューターからローカルに他のドメインにajax呼び出しをしようとしています。これは、proxy.jspページを呼び出しているjQuery AJAXコードです。

 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>

ここで何が間違っていますか。どんな提案でも歓迎します。

32
arsenal

エラーメッセージは、明らかでない場合は実際には正しいです。 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" "">

通知""最後の2つ目-それはシステム識別子です。エラーメッセージはわかりにくいです。publicIdと(存在しない)systemIdの間にスペースが必要であることではなく、システム識別子が必要であることを示す必要があります。

ところで、空のシステム識別子は理想的ではないかもしれませんが、動いてもらうには十分かもしれません。

32
Max Tardiveau

私はこの例外で自分を見つけました、私はこのようなカスタムURLで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
3
raoolio

私はこの投稿を見つけました: http://forum.springsource.org/showthread.php?68949-White-spaces-are-required-between-publicId-and-systemId./page2&s=c69fe19798f5a071d22eaf681ca84a56

ここのカップルは、XMLファイルの行を切り替えることで成功しました。

1
Hudspeth

条件の順序を変更します。私にとっては、コードのブロックを変更する

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"

有効です。

1
ÖMER TAŞCI

ブラウザーでプロキシーを使用してインターネット(オフィスビルなど)に接続する必要があるネットワークから作業している場合、それが原因である可能性があります。同じ問題が発生し、プロキシ設定をネットワーク設定に追加すると解決しました。

  • 設定に移動します(Eclipse-> Macの設定、またはWindow-> Windowsの設定)
  • 次に->一般->展開して下のリストを表示->ネットワーク接続の選択(展開しない)
  • 表示されるページの上部にドロップダウンがあり、「手動」を選択します。
  • 次に、ドロップダウンのすぐ下にあるリストで[HTTP]を選択し(すべてのオプションがオンになっているはずです)、リストの右側にある[編集]ボタンをクリックします。
  • 通常、Webブラウザでインターネットに接続するために必要なプロキシURLとポートを入力します。
  • 「HTTPS」について繰り返します。

プロキシのURLとポートがわからない場合は、ネットワーク管理者に相談してください。

0
Kirsten Crear