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>
ここで何が間違っていますか。どんな提案でも歓迎します。
エラーメッセージは、明らかでない場合は実際には正しいです。 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の間にスペースが必要であることではなく、システム識別子が必要であることを示す必要があります。
ところで、空のシステム識別子は理想的ではないかもしれませんが、動いてもらうには十分かもしれません。
私はこの例外で自分を見つけました、私はこのようなカスタム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
ここのカップルは、XMLファイルの行を切り替えることで成功しました。
条件の順序を変更します。私にとっては、コードのブロックを変更する
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"
有効です。
ブラウザーでプロキシーを使用してインターネット(オフィスビルなど)に接続する必要があるネットワークから作業している場合、それが原因である可能性があります。同じ問題が発生し、プロキシ設定をネットワーク設定に追加すると解決しました。
プロキシのURLとポートがわからない場合は、ネットワーク管理者に相談してください。